Jmeter JSON提取器
阿新 • • 發佈:2021-06-16
此提取器用於提取請求返回結果中的某個值或者某一組值,標準寫法為$.key,其中key為返回結果map中的一個鍵,如果是多層則繼續用.key進行即可,如果遇到key的value值為一個List,則使用.key[n],其中n為list中元素的編號,如下使用例項來說明下如何使用;
Json提取器語法說明
完整的語法說明詳見JsonPath:
如有以下Json返回
{ "store": { "book": [ { "category": "reference", "author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 }, { "category": "fiction", "author": "Herman Melville", "title": "Moby Dick", "isbn": "0-553-21311-3", "price": 8.99 }, { "category": "fiction", "author": "J. R. R. Tolkien", "title": "The Lord of the Rings", "isbn": "0-395-19395-8", "price": 22.99 } ], "bicycle": { "color": "red", "price": 19.95 } }, "expensive": 10 }
JsonPath | 結果 |
$.store.book[*].author | 全部書的作者 |
$..author | 所有作者 |
$.store.* | 店裡所有,包括書和自行車 |
$.store..price | 所有價格 |
$..book[2] | 第三本書 |
$..book[-2] | 倒數第二本書 |
$..book[0,1] | 前兩本書 |
$..book[:2] | 從索引0(含)到索引2(不含)的所有書籍 |
$..book[1:2] | 從索引1(含)到索引2(不含)的所有書籍 |
$..book[-2:] | 最後兩本書 |
$..book[2:] | 從尾部到第二本書 |
$..book[?(@.isbn)] | 所有帶有ISBN編號的書籍 |
$.store.book[?(@.price < 10)] | 店裡所有標價低於10的書 |
$..book[?(@.price <= $['expensive'])] | 店內所有價格低於“expensive”的書 |
$..book[?(@.author =~ /.*REES/i)] | 與正則匹配的所有書籍(忽略大小寫) |
$..* | 返回Store的所有內容 |
$..book.length() | 書的數量 |
除錯方法:
在檢視結果樹(View Result Tree)中選擇JSON Path Tester,即可展開如下圖的右側內容,輸入表示式即可拿來測試書寫的Json提取器表示式是否能正常工作:
從上圖的輸出可見返回的陣列下標從0開始。
新增JSON提取器,獲取所有author
新增除錯取樣器除錯用,可看到獲取到了所有作者的值。通過author_1,....author_22可得到每一個author。
將獲取到每一個使用者author迴圈進行“http請求”檢視結果。
新增迴圈控制器,設定迴圈次數:author_matchNr從上面的JSON取樣器中匹配到,這裡進行變數引用
在迴圈控制器之下新增http請求,並做以下設定。
__counter為jmeter自帶的一個計數函式,${__counter(,)}引用這個函式,每執行1次+1,從1開始;
author_${__counter(,)}執行第1次author_1,執行第2次author_2,以此類推,直到執行到迴圈次數author_4
__V為jmeter自帶的一個巢狀變數函式,執行第1次author_${__counter(,)}為author_1,${__V(author_${__counter(,)},)}則為${author_1},值Nigel Rees;以此類推,一直迴圈到${author_4}