JMETER與它的組件們

JSON提取器與Debug Sampler我們平時會遇到很多JSON格式的接口返回,我們需要提取參數可以用JSON提取器,同時配合自帶的調試器來進行調試 。

JMETER與它的組件們

文章插圖
 JSON提取器
Name of created variables:提取的值存放的變量名稱JSON Path expression:表達式,就是剛在在結果樹中驗證的表達式,可以同時使用多個表達式,用分號隔開Match No:0 隨機 1第一個 -1所有Compute concatenation var:如果匹配所有時 , 就將所有值存入變量名_ALL 中Default Value:提取不到值時默認值我們使用Dummy sampler來mock一個返回(這里不會可以上一篇)
{"topic":"mock_api","data":{"errormes":"","response":[{"name":"A","age":18},{"name":"B","age":30}]}}現在我們來提取age這個字段,這里會分享不同的方法來取值
第一種:一層一層從上至下取age=18這個值
//每一層就是一個"." , 因為response是個列表 , 我們去索引為0$.data.response[0].age第二種:有條件的篩選name=A的age , 使用表達式:[?(@.key == value)]
//$..直接去找response字段,根據表達式去找name是A的age$..response[?(@.name=="A")].age第三種:直接根據表達式找,并且可以一次性提取多層多變量
// Result[0]={"name":"A","age":18}$..[?(@.name=="A")].["age","name"]// Result[0]=18$..[?(@.name=="A")].age效果展示
JMETER與它的組件們

文章插圖

JMETER與它的組件們

文章插圖
計數器
JMETER與它的組件們

文章插圖
然后我們設置不同的線程和循環次數來看看效果
設置線程1,循環3
JMETER與它的組件們

文章插圖
設置線程2,循環3
JMETER與它的組件們

文章插圖
設置線程2,循環3,勾選上方計數器中的與每用戶獨立的跟蹤計數器
JMETER與它的組件們

文章插圖
設置線程2,循環3,勾選上方計數器中的與每用戶獨立的跟蹤計數器 和 在每個線程組迭代上重置計數器
JMETER與它的組件們

文章插圖
while邏輯控制器、循環控制器、if邏輯控制器和測試活動這兩個我們放在一起,假設我們需要去判斷循環的次數大于5就自動跳出循環
while控制器
JMETER與它的組件們

文章插圖
填入 ${__jexl3("${num}" != "5",)}
JMETER與它的組件們

文章插圖
循環五次后退出,這里需要注意的是while條件中一般只會使用javaScript或者jexl3(這兩個都是在函數助手中查看,輔助編寫)
循環控制器+if控制器
JMETER與它的組件們

文章插圖
勾選上永遠,這樣就會一直循環(這里勾選上只要是為了和上面while控制器模擬同一個場景,一般不會勾選永遠 , 下面在做if判斷,這樣太麻煩了)
我們在for循環下面增加if控制器去判斷是否滿足我們需要的條件,if下面增加一個動作控制器,如果滿足if條件就Break,跳出循環
if條件填入 ${__jexl3("${num}" == "5",)}
【JMETER與它的組件們】
JMETER與它的組件們

文章插圖
這樣就達到和while相同的效果了
JMETER與它的組件們

文章插圖
斷言
JMETER與它的組件們

文章插圖
漢化過后斷言就很好理解,這里講一下模式匹配規則:
包括(contains):包含指定的某個或多個字符串,支持正則表達式
匹配(match):完全匹配指定的字符串,判斷為成功,支持正則表達式
相等(equals):響應需要完全匹配指定的字符串,不支持正則
字符串(Substring):響應中需要包含指定字符串 , 不支持正則
否(Not) 和 或者(or):就是對上述判斷做的邏輯運算
隨機變量在配置元件中有個隨機變量簡單好用
JMETER與它的組件們

文章插圖

JMETER與它的組件們

文章插圖
HTTP鏡像服務器可以理解做了一個擋板,把我們自己當做服務器,把我們自己收到的請求原封不動的顯示出來,方便調試請求

推薦閱讀