關聯
一、什么是關聯
關聯是請求與請求之間存在數據依賴關系,需要從上一個請求獲取下一個請求需要回傳回去的數據。
簡單地說就是在測試過程中有些數據的值會經常發生變化,要獲取並使用這些數據,把這個動態的信息保存下來,我們就要進行關聯。
例如:用戶登錄后,session信息都不同,有些操作要使用session,就需要將這個動態的信息保存下來。
還有經常遇到的場景,第二個請求提交的參數要從第一個請求的返回數據中獲取。
二、關聯的用法
常用的兩種關聯用法
1.json Path Extractor提取參數值
2.正則表達式的方法
我們已學生金幣充值的接口為例來實驗,由於接口需要權限,需要獲取登錄時的sign值我們就用關聯來實現。
登錄接口
請求URL
http://api.nnzhp.cn/api/user/login
- 請求方式 post
- 請求參數 參數為key-value形式
參數名 必選 類型 說明
username 是 string 用戶名
passwd 是 string 密碼
登陸用戶名:niuhanyang
密碼:aA123456
返回參數說明
參數名 類型 說明
error_code int 錯誤編碼,0為操作成功
login_info object 登錄對象信息
userId int 用戶id
sign string 簽名
login_time string 登錄時間
打開jmeter,添加登錄接口請求,調用查看結果
獲取學生信息接口
請求URL http://api.nnzhp.cn/api/user/stu_info
- 請求方式 get
- 請求參數
參數名 必選 類型 說明
stu_name 是 string 學生姓名
調用接口結果
學生金幣充值
請求URL:
http://api.nnzhp.cn/api/user/gold_add
- 請求方式 post
- 參數 ,
該接口有權限驗證,需要admin用戶才可以做操作,需要添加cookie
cookie中key為登錄的用戶名,value從登錄接口中獲取,登陸成功之后會返回sign
參數名 必選 類型 說明
stu_id 是 int 學生id
gold 是 int 金幣數量
返回參數說明
參數名 類型 說明
error_code int 錯誤編碼,0為操作成功
msg string 提示信息
第一種方法比較簡單,使用插件json path postprocessorh 或 jp@gc - json Path Extractor
如下:在登錄接口添加json path postprocessorh,獲取需要參數化的值的信息



上面的例子中,返回值只有一個結果,如果存在多個結果的場合,我們怎么取值呢?
現在我們以學生ID為例來實驗,可以看到上圖中的查看學生信息中反回了多個ID號,我們用上邊的方式來試一下
添加json Path Extractor
從學生信息返回的結果看,獲取內容的json串取為$.stu_info.id,將stu_id進行參數化為${id},執行
可以看到執行結果是失敗的,傳入的學生id是我們輸入的默認值nono。
我們來看一下學生接口的返回信息
{
"error_code": 0,
"stu_info": [
{
"id": 872,
"name": "A",
"sex": "nn",
"age": 33,
"addr": "士大夫是非得失的士大夫士大夫",
"grade": "33",
"phone": "15221223211",
"gold": 9500
},
{
"id": 1053,
"name": "A",
"sex": "nn",
"age": 33,
"addr": "士大夫是非得失的士大夫士大夫",
"grade": "33",
"phone": "16221223211",
"gold": 100
}
]
}

執行結果是成功的。
2.正則表達式 需要進行參數化還有一種方法是用正則表達式,如下


下載文件 1.文件上傳
文件上傳類型
請求URL:
http://api.nnzhp.cn/api/file/file_upload
- 請求方式 post
- 參數
參數名 必選 類型 說明
file 是 file 文件
返回參數說明
參數名 類型 說明
error_code int 錯誤編碼,0為操作成功
msg string 提示信息
在jmeter中添加http請求,選擇文件,添加參數信息,執行
可以看到上傳文件執行成功了。
2.下載文件
現在我們來試一下下載文件是如何操作的
在網絡上找到一個圖片資源,獲取到圖片的地址:http://img4.duitang.com/uploads/item/201209/08/20120908180716_3rrvi.jpeg
我們在jmeter中新建一個HTTP請求,填寫相應的參數,執行
可以看到下載成功了,那怎么把圖片下載到本地呢?這就需要用到Bean Shell Sampler
BeanShell是一種完全符合Java語法規范的腳本語言,並且又擁有自己的一些語法和方法;

代碼如下:
可以看到在填寫的下載路徑文件夾下,可以看到下載好的文件

登錄接口
請求URL
http://api.nnzhp.cn/api/user/login
- 請求方式 post
-
請求參數 參數為key-value形式
參數名 必選 類型 說明
username 是 string 用戶名
passwd 是 string 密碼
登陸用戶名:niuhanyang
密碼:aA123456
添加線程組,添加http請求,添加聚合報告
設置壓測的並發數,這里我們設置100個並發,循環10次,持續30s

下面看一下各個參數的含義:
Label:每個 JMeter 的 element(例如 HTTP Request)都有一個 Name 屬性,這里顯示的就是 Name 屬性的值
#Samples:表示你這次測試中一共發出了多少個請求,如果模擬10個用戶,每個用戶迭代10次,那么這里顯示100,我們設置的為100個用戶循環10次,所以一共的請求為100*10=1000
Average:平均響應時間——默認情況下是單個 Request 的平均響應時間(單位是毫秒),當使用了 Transaction Controller 時,也可以以Transaction 為單位顯示平均響應時間
Median:中位數,也就是 50% 用戶的響應時間
90% Line:90% 用戶的響應時間
Min:最小響應時間
Max:最大響應時間
Error%:本次測試中出現錯誤的請求的數量/請求的總數
Throughput:吞吐量——默認情況下表示每秒完成的請求數(Request per Second),當使用了 Transaction Controller 時,也可以表示類似 LoadRunner 的Transaction per Second 數
KB/Sec:每秒從服務器端接收到的數據量,相當於LoadRunner中的Throughput/Sec


或者直接點擊全部運行按鈕,進行運行,就可以進行壓測啦,大家一起來試一下吧