需求
同一個接口,要輸入不同的測試數據,可以用測試場景中的自定義變量來進行參數化
自定義變量類型
常量
-
定義
1)變量名:變量名稱,后續調用直接 ${變量名} 調用2)值:變量值,可以使用Jmeter的內置函數
-
調用
直接使用 ${變量名} 調用 -
舉個例子
新增一個常量,變量名為 test_constant ,報文中可以用 ${test_constant} 調用
列表
定義
- 變量名:列表的變量名稱
- 值:多個枚舉值之間用英文逗號分隔
調用
- foreach循環中,直接使用 for i in 變量名,i會依次取得列表中的值;
- 可以直接用 ${變量名_n}的形式,取得對應的值,n為值在列表中的位置,從1開始
舉個例子
列表定義變量名為 test_list,變量值為 cat,dog,rabbit
-
ForEach循環
直接for value in test_list, value會依次取得列表中的值,即cat,dog,rabbit
運行之后,這個用例會執行三次,
請求的報文依次為:
{"test_list":"cat"} {"test_list":"dog"} {"test_list":"rabbit"}
-
獲取列表中指定位置的值
指定位置從1開始
比如,要獲取dog,那么變量直接寫成${test_list_2}
CSV
定義
-
變量名:CSV文件的變量名似乎並沒有什么實際的用途,因為調用的時候是不需要用到這個變量名的
-
配置:上傳的一個CSV文件,CSV文件首行就是列名,后續直接使用 ${列名}調用變量
-
Encoding:文件編碼,可不填
-
分隔符:默認逗號,一般不改
-
是否允許帶引號 : 默認False
調用
在循環計數器中調用,直接使用 ${列名}調用
舉個例子
-
新建CSV文件
-
接口場景中,添加一個循環控制器,
-
變量用 ${列名} 調用,接口請求報文如下:
{
"facilityCode": "${header_facilityCode}",
"companyCode": "${header_companyCode}",
"clientCode": "${header_clientCode}",
"sourcePlatformCode": "${header_sourcePlatformCode}"
}
- 循環三次,每次依次取得CSV中中每一行的值,接口請求報文如下:
{
"facilityCode": "basic_facility_01",
"companyCode": "basic_company_01",
"clientCode": "OFS",
"sourcePlatformCode": "OFS"
}
// 這個地方有個小問題,我本來是想模擬 "facilityCode":null , 但是貌似使用csv實現不了,還是會變成字符串
{
"facilityCode": "null",
"companyCode": "basic_company_01",
"clientCode": "OFS",
"sourcePlatformCode": "OFS"
}
// csv中不填,報文就會自動識別成空字符串""
{
"facilityCode": "",
"companyCode": "basic_company_01",
"clientCode": "OFS",
"sourcePlatformCode": "OFS"
}
計數器
定義
-
變量名:變量的名稱,后續調用用 ${變量名} 調用
-
開始:起始值,包含這個值
-
結束:結束值,包含這個值
-
增量:即步長
-
輸出格式:就是格式化,比如,原本准備輸出值 1,輸出格式定義為 000,則輸出的值變成 001
調用
一般在循環計數器中使用,使用 ${變量名} 即可調用,每次循環,循環計數器的值會自動化加一
舉個例子
- 新建一個循環計數器
- 循環計數器從1到4,如果循環次數超過循環計數器,則從頭再次開始
- 總共循環5次,每次循環的報文如下:
{"test_count":"001"}
{"test_count":"002"}
{"test_count":"003"}
{"test_count":"004"}
{"test_count":"001"}
隨機數
定義
-
變量名:變量的名稱,使用 ${變量名} 調用
-
最小值:隨機的最小值
-
最大值:隨機的最大值
-
輸出格式:就是格式化,比如,原本准備輸出值 1,輸出格式定義為 000,則輸出的值變成 001
調用
直接使用 ${變量名} 調用即可
舉個例子
- 新建一個隨機數的場景變量 test_random ,隨機數最小為0,最大為10
-
添加一個循環計數器,請求報文中,直接用 ${test_random}調用
-
循環3次,每次取得一個隨機數,每次請求的報文如下:
{"test_random":"6"} {"test_random":"0"} {"test_random":"1"}
總結
以上就是自定義變量的一些用法,但是目前實際測試接口用到的比較少,主要原因如下:
-
需要測試字段為null的場景,使用csv無法實現,或者說,目前我還沒找到能夠實現的方式;
-
接口不太規范,不同的測試數據請求接口,得到的結果報文都不太相同,特別是接口返回失敗的時候,msg都不太一樣,導致無法使用同一個斷言進行判斷