一、JMeter參數(shù)化簡介
1.JMeter參數(shù)化的概念
當(dāng)使用JMeter進(jìn)行測試時(shí),測試數(shù)據(jù)的準(zhǔn)備是一項(xiàng)重要的工作。若要求每次迭代的數(shù)據(jù)不一樣時(shí),則需進(jìn)行參數(shù)化,然后從參數(shù)化的文件中來讀取測試數(shù)據(jù)。
參數(shù)化:是自動(dòng)化測試腳本的一種常用技巧,可將腳本中的某些輸入使用參數(shù)來代替,如登錄時(shí)利用GET/POST請求方式傳遞參數(shù)的場景,在腳本運(yùn)行時(shí)指定參數(shù)的取值范圍和規(guī)則。
腳本在運(yùn)行時(shí),根據(jù)需要選取不同的參數(shù)值作為輸入,該方式稱為數(shù)據(jù)驅(qū)動(dòng)測試(Data Driven Test),而參數(shù)的取值范圍被稱為數(shù)據(jù)池(Data Pool)。
2.JMeter參數(shù)化方式之使用場景對比
序號 | 參數(shù)化方式 | 使用場景 |
---|---|---|
1 | User Parameters | 適用于參數(shù)取值范圍很小的時(shí)候使用 |
2 | CSV Data Set Config | 適用于參數(shù)取值范圍較大的時(shí)候使用,該方法具有更大的靈活性 |
3 | User Defined Variables | 一般用于Test Plan中不需要隨請求迭代的參數(shù)設(shè)置,如:Host、Port Number |
4 | Function Helper中的函數(shù) | 可作為其他參數(shù)化方式的補(bǔ)充項(xiàng),如:隨機(jī)數(shù)生成的函數(shù)${__Random(,,)} |
二、JMeter參數(shù)化的4種主要方式
接口代碼:
@RestController
@Slf4j
public class UserController {
@GetMapping("/getUser")
public String getUser(String id,String name){
log.info("用戶ID:"+id+"->用戶名:"+name);
return "用戶ID:"+id+"->用戶名:"+name;
}
}
-
User Parameters(用戶參數(shù))
操作路徑:HTTP取樣器->前置處理器->用戶參數(shù)
1)添加User Parameters功能模塊
用戶參數(shù)
2)設(shè)置參數(shù)項(xiàng)、參數(shù)值
3)配置HTTP取樣器界面的請求參數(shù)
4)查看請求結(jié)果
2.CSV Data Set Config(CSV數(shù)據(jù)配置)
1)添加CSV Data Set Config模塊
操作路徑:HTTP取樣器-》配置元件-》CSV數(shù)據(jù)文件配置
2)預(yù)先準(zhǔn)備好要參數(shù)化的所有參數(shù)值
3)配置CSV Data來源
Configure the CSV Data Source配置項(xiàng)&功能:
配置項(xiàng) | 取值or選擇項(xiàng) |
---|---|
Filename | 參數(shù)化文件的讀取位置,即保存參數(shù)化數(shù)據(jù)的文件目錄。可為絕對路徑,也可為相對路徑。在分布式測試中,還是利用相對路徑比較方便,因?yàn)橛械臋C(jī)器可能安裝路徑不一樣,同時(shí)可避免腳本遷移時(shí)需要修改路徑 |
File Encoding | 編碼格式,選擇utf-8 |
Variable Names | 變量名稱。這里定義的變量名稱,后面就可以直接用來引用了。(多個(gè)變量名稱以逗號隔開,例如username,passwd。參數(shù)化文件中同樣有對應(yīng)的兩列數(shù)據(jù)。) |
Ignore first line | 忽略第一行數(shù)據(jù)(類似LR中第一行數(shù)據(jù)是變量名稱,如果你的配置文件中為了記憶第一行也是變量名,可以選擇是忽略該行數(shù)據(jù)) |
Delimiter | Variable Names中的參數(shù)分隔符,默認(rèn)為英文逗號 |
Allow quoted data | 是否允許引用數(shù)據(jù),默認(rèn)false。選項(xiàng)為“true”時(shí)對全角字符的處理可能會(huì)出現(xiàn)亂碼 |
Recycle on EOF | 是否循環(huán)讀取參數(shù)文件內(nèi)容;因?yàn)镃SV Data Set Config一次讀入一行,分割后存入若干變量中交給一個(gè)線程,如果線程數(shù)超過文本的記錄行數(shù),那么可以選擇從頭再次讀入 |
Stop thread on EOF | 當(dāng)Recycle on EOF為False時(shí)(讀取文件到結(jié)尾),停止進(jìn)程,當(dāng)Recycle on EOF為True時(shí),此項(xiàng)無意義 |
Sharing mode | 共享模式,即參數(shù)文件的作用域:All Threads;Current Thread Group;Current Thread |
4)設(shè)置HTTP取樣器的請求參數(shù)
5)執(zhí)行Run,查看效果
3.User Defined Variables(用戶自定義變量)
1)添加User Defined Variables模塊
2)配置用戶自定義變量界面中的參數(shù)及其值
3)配置HTTP取樣器中的請求參數(shù)
此時(shí)可以聯(lián)合其他參數(shù)化方式(如:User Parameters)一起檢測效果
4)執(zhí)行Run,觀察效果
4.函數(shù)助手
操作路徑:工具菜單-->函數(shù)助手對話框
1)選擇參數(shù)化所需的函數(shù),配置函數(shù)
有變量名:
無變量名:
[圖片上傳失敗...(image-289995-1564818269287)]
2)配置HTTP取樣器的請求參數(shù)
有變量名:
${__Random(1,100,id)}
無變量名:
3)執(zhí)行Run,查看效果
jmeter參數(shù)化的四種方式總結(jié):
1、函數(shù)助手_CSVRead的參數(shù)化功能相比CSV Data Set Config較弱;
2、CSV 數(shù)據(jù)設(shè)置,適用于參數(shù)取值范圍較大的時(shí)候使用,該方法具有更大的靈活性;
3、用戶自定義變量 一般用于test plan中不需要隨請求迭代的參數(shù)設(shè)置;
4、用戶參數(shù),適用于參數(shù)取值范圍很小的時(shí)候使用;
三、json數(shù)據(jù)參數(shù)化
@RestController
@Slf4j
public class UserController {
@GetMapping("/getUser")
public String getUser(@RequestBody User user){
log.info("用戶ID:"+user.getId()+"->用戶名:"+user.getName());
return "用戶ID:"+user.getId()+"->用戶名:"+user.getName();
}
}
-
采樣器添加 HTTP 信息管理器
鼠標(biāo)右擊該采樣器,右鍵菜單選擇 "添加" -> 配置元件 -> HTTP 信息頭管理器,然后信息頭添加一條名稱為 Content-Type,值為 application/json 即可:
采樣器添加 HTTP 信息管理器
采樣器添加 HTTP 信息管理器 JSON數(shù)據(jù)
{
"id":1,
"name":"張三",
"age":20
}
3.結(jié)果查看
- 使用CVS參數(shù)
CVS文件:
1,張三
2,李四
3,王五
-
查看結(jié)果
查看結(jié)果