Jmeter後置處理器之JSON Extractor
一、使用場景
json extractor後置處理器用在返回格式為json的HTTP請求中,用來獲取返回的json中的某個值。並儲存成變數供後面的請求進行呼叫或斷言等。
二、使用方法
步驟一:選擇HTTP請求—>後置處理器—>JSON Extractor
步驟二:在檢視結果樹中,通過json path expression找到需要的json值
步驟三:設定JSON Extractor
名稱:json後置表示式的名稱,標識作用,建議使用有意義的名字
Variable names:儲存的變數名,後面使用${Variable names}引用
JSON Path expressions:上一步中除錯通過的json path表示式
Match Numbers:匹配數字(0代表隨機,1代表第一個,-1代表所有)
Default Values:找不到時預設值,一般設定為NOT FOUND
Compute concatenation var(suffix_ALL):是否統計所有,即將匹配到的所有值儲存,名為“變數名_ALL”,使用場景需要獲取的值有多個,後面需要對這一組資料進行操作,如:
三、關鍵點
Json Path expression的使用
語法:
JsonPath |
描述 |
$ |
根節點 |
@ |
當前節點 |
.or[] |
子節點 |
.. |
選擇所有符合條件的節點 |
* |
所有節點 |
[] |
迭代器標示,如陣列下標 |
[,] |
支援迭代器中做多選 |
[start:end:step] |
陣列切片運算子 |
?() |
支援過濾操作 |
() |
支援表示式計算 |
四、實戰
需求:實現一個業務場景,同步患者,首次同步時同步所有患者,第二次同步時同步比base_version大的患者。
分析:根據輸入的引數base_version,同步不同的資料,base_version=1111111111111時同步所有,響應資料中返回所有患者的base_version。下一次同步時傳入當前最大的base_version,只同步比這個base_version大的患者的。
關鍵點:第一次同步後獲取最大的base_version,作為下一次同步的引數,關鍵是如何獲取最大值
解決方案:
1、使用json後置處理器獲取所有的base_version
2、通過前置處理器JSR223 PreProcessor對返回的base_version進行處理,找出最大值(發現是列表最後一個)
3、第二次同步介面中,傳入計算後的最大的base_version
或使用如下指令碼,計算最大值
var base_versions=vars.get("base_versions_ALL"); var version_list=base_versions.split(","); var maxInNumbers = Math.max.apply(Math, version_list); vars.put("max_version",maxInNumbers);