Jmeter之JSON提取器應用
- 2020 年 3 月 27 日
- 筆記
在介面測試中有一個這樣的場景:登錄之後,需要進行昵稱修改,怎麼實現?
首先我們分別看下登錄、昵稱修改的介面說明:
以上業務中補充一點,昵稱修改,還需要添加請求頭Authorization傳登錄獲取的token值。
分析:登錄之後的響應結果中會返回用戶id、token資訊; 而更新昵稱需要傳參member_id、且需要請求頭傳token;也就是我們要想辦法從“登錄”的響應結果中獲取到id、token資訊,再去傳給“更新昵稱”請求。因為返回數據格式是json,所以我們用JSON提取器來實現。用正則表達式提取器也可以,大家可參見我之前寫的文章。
一、json提取器設置多個變數獲取多個數據
1、先添加好登錄請求,運行下查看登錄的響應結果
調整下查看結果方式,可較清晰看到響應結果中的id、token資訊
JSON path表達式怎麼寫?例如我要獲取id,可寫$.data.id,$表示根元素,然後一級級屬性往下去找,先找到data,再往下子節點找到id;也可寫$..id,直接從根元素去遞歸查找到id;獲取token同理。詳細的可查看這篇文章http://www.lemfix.com/topics/63。
2、右鍵登錄請求–>後置處理器–>添加“JSON提取器”。
JSON提取器說明:
Apply to:應用範圍
Names of created variables :接收值的變數名,自定義,多個變數用分號分隔
JSON Path expression: json path表達式,也是用分號分隔
Match No.(0 for Random):0表示隨機;n取第幾個匹配值;-1匹配所有。若只要獲取到匹配的第一個值,則填寫1
Compute concatenation var(suffix_ALL):如果找到許多結果,則插件將使用’ , ‘分隔符將它們連接起來,並將其存儲在名為<variable name> _ALL的var中
Default Values: 預設值,匹配不到值的時候取該值,可寫error。
為了檢查通過json提取器是否正常獲取到值,可添加Debug PostProcessor來檢查,注意正常跑用例時刪除或禁用它。
對比登錄返回的結果,能看到已經正常獲取到id,token。
3、添加“修改昵稱”請求,將json提取器獲取到的值,進行變數引用。運行腳本,更改昵稱成功。
二、json提取器設置1個變數獲取多個數據
我們也會碰到獲取一個變數,但結果是多個數據的情況。
1、例如“獲取用戶列表”,先來看下“獲取用戶列表”的響應結果。
如果想要獲取到這裡所有的用戶id,json路徑表達式怎麼寫呢?$..id或者$.data[*].id
2、添加JSON提取器,獲取所有用戶id資訊。
添加Debug PostProcessor來調試用,正常跑用例刪除或禁用它。可查看到獲取到了所有用戶id值。通過id_1,….id_22可得到每一個id。
3、將獲取到每一個用戶id循環進行“用戶流水記錄”查看結果。
1)添加循環控制器,設置循環次數。
2)在循環控制器之下添加“用戶流水記錄”請求,並做以下設置。
因為要把JSON提取器中匹配到的id_1,….id_22循環傳遞給“用戶流水記錄”,
${__counter(,)}為一個計數函數,每運行1次+1,從1開始;
id_${__counter(,)}運行第1次id_1,運行第2次id_2,以此類推,直到運行到循環次數id_22
__V為一個嵌套變數函數,運行第1次id_${__counter(,)}為id_1,${__V(id_${__counter(,)},)}則為${id_1},值80
3)運行後,可查看到結果