通過JSON Extractor 插件來提取JSON響應結果
一.使用需求
在下一個接口調用上一個接口的數據,如:請求1返回的結果,處理以后作為請求2的參數使用。
二.首先需要下載JSON Extractor插件,下載地址為https://jmeter-plugins.org/wiki/JSONPathExtractor/,下載plugins-manager.jar並將其放入lib/ext目錄,然后重新啟動JMeter
三.操作方法
1.選擇該線程組中的HTTP請求--右鍵添加--后置處理器--JSON提取器
2.字段解釋
name of created variables:創建變量的名稱,該名稱后面調用時使用${變量名}引用,如:${live_id}
JSONPath Expression:JSON表達式
Match Numbers:匹配數字(0代表隨機,1代表第一個,-1代表所有),可為空即默認第一個
Default Value:未取到值的時候默認值
Compute concatenation var(suffix_ALL):是否統計所有,即將匹配到的所有值保存,名為“變量名_ALL”,使用場景需要獲取的值有多個,后面需要對這一組數據進行操作。
3.實例說明
示例一:第一層級內容獲取
我們使用JSON Extractor匹配第一層內容message等的值
使用jmeter的查看結構樹中的 json path expression可以測試自己所寫的JSON Extractor是否正常。測試結果如下
設置JSON表達式/使用請求參數
示例二:第二層級內容獲取
我們使用JSON Extractor匹配第二層級內容count的值
使用jmeter的查看結構樹中的 json path expression可以測試自己所寫的JSON Extractor是否正常。測試結果如下:
設置JSON表達式/使用請求參數
示例三:第三層級內容獲取
我們使用JSON Extractor匹配第三層級內容ID的值
使用jmeter的查看結構樹中的 json path expression可以測試自己所寫的JSON Extractor是否正常。測試結果如下:
其中json串 [ ]表示對象組成的數組,{ }表示對象。
list[0]的用法說明:[0] 表示匹配第一個值,[1] 表示匹配第二個值,[*] 表示匹配所有的值,如圖:
示例四:第四層級內容獲取
我們使用JSON Extractor匹配第四層級內容live_id的值
使用jmeter的查看結構樹中的 json path expression可以測試自己所寫的JSON Extractor是否正常。測試結果如下:
設置JSON表達式/使用請求參數
如果需要同時匹配多個值,可以如圖設置
live_titles
示例五:篩選出標題為測試的數據$..[?(@.live_titles=="測試后台")]
示例六:篩選前兩條數據$.data.list[:2].live_titles
示例7:提取所有data列表下,anchor=啊啊時的id,start_at和live_status。是不是聽起來就很復雜?如果按照傳統的正則表達式提取,那么 很難滿足這里的需求了。因此就需要用到jsonpath表達式。
$..[?(@.anchor[0]=="啊啊")].["id","start_at","live_status"]。anchor[0]因為這個字段是個數組。不是數組的字段則不需要[0]。
示例8:提取data列表下,name=123的id。name:如果是數值則不需要引號“”,如果是字符串則需要用引號把值引起來
數值:
$.data[?(@.pid==123)].id
或者$.data[?(@.pid==${pid})].id
字符串
$.data[?(@.name=="123")].id
或者$.data[?(@.name=="${name}")].id