一、使用場景
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);
