jmeter介面之json提取器應用
在介面測試中有一個這樣的場景:業務介面需要用到登入token;下個介面需要用到前個介面返回值作為引數,該怎麼實現?
首先先看下登入、業務介面,本文用的jmeter版本為5.4.1
一、json提取器設定變數獲取資料
1、先新增登入介面,執行檢視響應結果
json path表示式怎麼寫?例如我要獲取token,可寫$data.token,$表示根元素,然後一級一級屬性往下去找,先找到data,再往下子節點找到token;也可以寫成$..token,直接從根元素去遞迴查詢token。
2、右鍵登入請求-->後置處理器-->新增“JSON提取器”
JSON提取器說明:
Apply to:
Namesofcreatedvariables:接收值的變數名,自定義,多個變數用分號分隔
JSONPathexpression:json path表示式,也是用分號分隔
MatchNo.(0 for Random):0表示隨機;n取第幾個匹配值;-1匹配所有。若只要獲取到匹配的第一個值,則填寫1
Compute concatenation var(suffix_ALL):如果找到許多結果,則外掛將使用','分隔符將它們連線起來,並將其儲存在名為<variable name>_ALL的var中
DefaultValues:預設值,匹配不到值的時候取該值,可寫error。
為了檢查通過json提取器是否正常獲取到值,可新增Debug PostProcessor來檢查。
3、新增查詢介面,將json提取器獲取到的值,進行變數引用
點選執行介面,執行成功
二、json提取器設定一個變數獲取多個數據
1、例如從“預設頁面查詢介面”返回中獲取所有name
如果想要獲取這裡所有的name,json路徑表示式怎麼寫?$..name或者$.data.records[*].orgName
2、新增json提取器,獲取所有name資訊
新增Debug PostProcessor來除錯用,正常跑用例刪除或禁用它。可檢視到獲取到了所有name值。通過name_1,....name_10可得到每一個name。
3、將獲取到的每一個name迴圈進行查詢
1)新增迴圈控制器,設定迴圈次數
2)在迴圈控制器之下新增“輸入查詢介面”,並做以下設定
因為也是業務介面,需要呼叫token,所以這裡也加一下。
因為要把JSON提取器中匹配到的name_1,....name_10迴圈傳遞給“使用者流水記錄”,
__counter為jmeter自帶的一個計數函式,${__counter(,)}引用這個函式,每執行1次+1,從1開始;
name_${__counter(,)}執行第1次name_1,執行第2次name_2,以此類推,直到執行到迴圈次數name_10
__V為jmeter自帶的一個巢狀變數函式,執行第1次name_${__counter(,)}為name_1,${__V(name_${__counter(,)},)}則為${name_1},值10;以此類推,一直迴圈到${name_10}
3)執行結果檢視