Jmeter(三十四) - 從入門到精通進階篇 - 引數化(詳解教程)

巨集哥發表於2021-01-06

1.簡介

  前邊三十多篇文章主要介紹的是Jmeter的一些操作和基礎知識,算是一些初級入門的知識點,從這一篇開始我們就來學習Jmeter比較高階的操作和深入的知識點了。今天這一篇主要是講引數化,其實前邊或多或少的介紹過類似的知識點,知識沒有系統的講解,由於這個在實際工作中用到比較多而且經常用到,所以巨集哥今天將其單獨作為一個主題來系統的講解。

尤其是在用到jmeter工具時,無論做介面測試還是效能測試,引數化都是一個必須掌握且非常有用的知識點。引數化的使用場景,例如:
  1)多個請求都是同一個ip地址,若伺服器地址更換了,則指令碼需要更改每個請求的ip
  2)註冊賬號,不允許賬號重複;想批量註冊使用者時
  3)模擬多個使用者登入,需要用到不同使用者資訊登入時
  4)上一個請求的輸出結果用於下一個請求的引數傳入,例如登入獲取到的token資訊,用於提交賬單請求的引數呼叫

2.什麼是引數化

  概念:根據需求動態獲取資料並進行賦值的過程。

  引數化:通俗的講就是在進行測試的時候,測試資料是一項重要的準備工作,每次迭代的資料當不一樣的時候,需要進行引數化,從引數化的檔案中來讀取測試資料。例如:測試使用者登入時需要輸入使用者名稱和密碼,假如系統不允許相同的使用者名稱和密碼同時登入,或者想更好的模擬多個使用者來登入系統。這個時候就需要對使用者名稱和密碼進行引數化,使每個虛擬使用者都使用不同的使用者名稱和密碼進行訪問。

3.jmeter的幾種引數化方式

這裡以下邊的這個註冊介面為例:介面地址:https://api.apiopen.top/api.html

開發者註冊

請求方式:POST

請求地址:https://api.apiopen.top/developerRegister

Query引數名型別必需描述示例 e.g.
name string 使用者名稱 peakchao
passwd string 密碼 123456
email string 郵箱,使用者反饋相關會郵件通知。 309324904@qq.com

返回示例:

{
    "code": 200,
    "message": "成功!",
    "result": {
        "apikey": "b9b3a96f7554e3bead2eccf16506c13e"
    }
}

3.1在jmeter中,通過${變數名}來獲取引數值。

1、使用者定義的變數

1)執行緒組右鍵新增-->配置元件-->使用者定義的變數,出現如下設定頁面後

  輸入名稱、值;注意:名稱可以自定義設定,如下圖所示:

2)然後將設定後的變數名稱,在註冊、登入請求中進行引數化引用${ip}、${email}

  注意:引用的引數名跟使用者定義變數設定的名稱必須保持一致,巨集哥這裡例舉了一個註冊例項,如下圖所示:

3)點選執行,檢視結果樹,顯示成功,如下圖所示:

2、函式助手獲取引數值

1)選擇選單欄 選項-->函式助手對話方塊,彈出函式助手框,功能下面有多個函式可供選擇,我們主要看下__RandomString,其他可以自行了解下喲

2)要進行多個賬號註冊(比如10個使用者),註冊資訊要求郵箱 email 和使用者名稱 name 不能重複;所以可以這麼來思考,QQ郵箱後邊的@qq.com段固定,那就對QQ郵箱前幾位進行隨機,頁面設定如下圖所示:

3)拷貝生成的函式字串,貼上進行引數引用,如下圖所示:

4)設定執行緒組執行緒數為10,模擬10個虛擬使用者的註冊,如下圖所示:

5)點選執行,檢視結果樹,顯示成功,(巨集哥這裡只舉例說明郵箱,使用者名稱你可以模仿設定後《巨集哥這裡在“北京巨集哥”後邊加了一個隨機函式random,這樣北京巨集哥後帶有一個數字就不會重複了》,才能註冊成功,否則會報使用者名稱重複的錯誤)如下圖所示:

3、CSV Data Set Config獲取引數值

1)若需要註冊的QQ郵箱不能隨機,必須是使用者真實提供的QQ郵箱進行註冊的話,就採用以下這種方式,提前收集使用者真實QQ號及暱稱,存放在本地txt或者CSV檔案(CSV檔案預設逗號隔開),如下圖所示:

 

2)執行緒組右鍵新增-->配置元件-->CSV Data Set Config,如下圖所示:

關鍵引數說明:

  Filename:需要傳入檔案的完整路徑。我的檔案位於C盤目錄下,檔名為users.txt。

  File encoding:引數檔案的編碼格式。可以不填。

  Variable Names:對應引數檔案中每列的變數名,也是你要引用到請求中的引數變數名。這裡第一列是使用者名稱、第二列是密碼、第三列是郵箱。變數名可以自定義。

  igonre first line(only used if Variable Names is not empty):當 CSV 檔案中首行設定了變數名時,該項設為 true,此時每次請求讀取檔案時會自動忽略首行,直接讀取第二行的資料。若首行未設定,則選擇False

  Delimiter:檔案中的分隔符,預設英文的逗號分隔。所以注意txt文件中每行多個引數用英文逗號分隔。

  Recycle on EOF: 設定為True後,允許重頭迴圈取值;為False,當讀取檔案到結尾時,停止讀取檔案

  Stop Thread EOF: 當Recycle on EOF為false並且Stop Thread EOF 為true,則讀完csv檔案中的記錄後,停止執行,執行緒數及執行次數無效。

  Sharing Mode:共享模式。All threads:所有執行緒,所有執行緒迴圈取值,執行緒1取第一行,執行緒2取下一行;Current thread group:當前執行緒組,各個執行緒組分別迴圈取值;Current thread:當前執行緒,該測試計劃內的所有執行緒都取第一行。

備註說明:這裡我用通俗的語言大概講一下Recycle on EOF與Stop thread on EOF結果的關聯

Recycle on EOF :到了檔案尾處,是否迴圈讀取引數,選項:true和false

Stop thread on EOF:到了檔案尾處,是否停止執行緒,選項:true和false

當Recycle on EOF 選擇true時,Stop thread on EOF選擇true和false無任何意義,通俗的講,在前面控制了不停的迴圈讀取,後面再來讓stop或run沒有任何意義

當Recycle on EOF 選擇flase時,Stop thread on EOF選擇true,執行緒4個,引數3個,那麼只會請求3次

當Recycle on EOF 選擇flase時,Stop thread on EOF選擇flase,執行緒4個,引數3個,那麼會請求4次,但第4次沒有引數可取,不讓迴圈,所以第4次請求錯誤

3)使用CSV Data Set Config中定義好

a、直接引數化引用,如下圖所示:

b、通過函式助手進行引數化引用,如下圖所示:

 

4)設定執行緒組中執行緒數為3,執行後,輸出如下結果:成功,如下圖所示:

4.小結

1.在檔案中輸入變數的值時,尤其是.txt和.bat檔案中的變數值之間要用英文的逗號隔開。
2.變數值中有中文時,要在後邊勾選utf-8。
如果報錯,請求不成功,注意檢查是不是這兩點沒有注意到。

  好了,時間不早了,今天就分享到這裡吧!!!

相關文章