1. 程式人生 > 其它 >Jmeter JSON提取器

Jmeter JSON提取器

此提取器用於提取請求返回結果中的某個值或者某一組值,標準寫法為$.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}