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

1.簡介

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

尤其是在用到jmeter工具時,無論做接口測試還是性能測試,參數化都是一個必須掌握且非常有用的知識點。參數化的使用場景,例如:
  1)多個請求都是同一個ip地址,若服務器地址更換了,則腳本需要更改每個請求的ip
  2)註冊賬號,不允許賬號重複;想批量註冊用戶時
  3)模擬多個用戶登錄,需要用到不同用戶信息登錄時
  4)上一個請求的輸出結果用於下一個請求的參數傳入,例如登錄獲取到的token信息,用於提交賬單請求的參數調用

2.什麼是參數化

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

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

3.jmeter的幾種參數化方式

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

開發者註冊

請求方式:POST

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

Query參數名 類型 必需 描述 示例 e.g.
name string 用戶名 peakchao
passwd string 密碼 123456
email string 郵箱,用戶反饋相關會郵件通知。 [email protected]

返回示例:

{
    "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。
如果報錯,請求不成功,注意檢查是不是這兩點沒有注意到。

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

Tags: