關聯java
1、什麼是關聯正則表達式
關聯是請求與請求之間存在數據依賴關係,須要從上一個請求獲取下一個請求須要回傳回去的數據。json
簡單地說就是在測試過程當中有些數據的值會常常發生變化,要獲取並使用這些數據,把這個動態的信息保存下來,咱們就要進行關聯。api
例如:用戶登陸後,session信息都不一樣,有些操做要使用session,就須要將這個動態的信息保存下來。
還有常常遇到的場景,第二個請求提交的參數要從第一個請求的返回數據中獲取。服務器
2、關聯的用法cookie
經常使用的兩種關聯用法網絡
1.json Path Extractor提取參數值session
2.正則表達式的方法併發
咱們已學生金幣充值的接口爲例來實驗,因爲接口須要權限,須要獲取登陸時的sign值咱們就用關聯來實現。工具
登陸接口
請求URL
http://api.nnzhp.cn/api/user/login
參數名 必選 類型 說明
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
參數名 必選 類型 說明
stu_name 是 string 學生姓名
調用接口結果
學生金幣充值
請求URL:
http://api.nnzhp.cn/api/user/gold_add
該接口有權限驗證,須要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
參數名 必選 類型 說明
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
請求參數 參數爲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
或者直接點擊所有運行按鈕,進行運行,就能夠進行壓測啦,你們一塊兒來試一下吧