application/json標識Json資料格式,是Http請求常見的一種Content-Type。我們經常也會看到介面返回資料型別為json格式。功能測試/自動化指令碼里,經常會需要提取json資料,用作上下文使用或者用作斷言校驗。使用JsonPath可以很好的完成對Json的提取使用
Jmeter的JsonPath提取器
JSON提取器說明
Apply to:應用範圍
Names of created variables :接收值的變數名,自定義,多個變數用分號分隔
JSON Path expression: json path表示式,也是用分號分隔
Match No.(0 for Random):0表示隨機;n取第幾個匹配值;-1匹配所有。若只要獲取到匹配的第一個值,則填寫1
Compute concatenation var(suffix_ALL):如果找到許多結果,則外掛將使用' , '分隔符將它們連線起來,並將其儲存在名為<variable name> _ALL的var中
Default Values: 預設值,匹配不到值的時候取該值,可寫error。
如何編寫JsonPath
-
基本語法
-
使用示例
$.store.book[*].author 獲取json中store下book下的所有author值
$..author 獲取所有json中所有author的值
$.store.* 所有的東西,書籍和自行車
$.store..price 獲取json中store下所有price的值
$..book[2] 獲取json中book陣列的第3個值
$..book[-2] 倒數的第二本書
$..book[0,1] 前兩本書
$..book[:2] 從索引0(包括)到索引2(排除)的所有圖書
$..book[1:2] 從索引1(包括)到索引2(排除)的所有圖書
$..book[-2:] 獲取json中book陣列的最後兩個值
$..book[2:] 獲取json中book陣列的第3個到最後一個的區間值
$..book[?(@.isbn)] 獲取json中book陣列中包含isbn的所有值
$.store.book[?(@.price < 10)] 獲取json中book陣列中price<10的所有值
$..book[?(@.price <= $['expensive'])] 獲取json中book陣列中price<=expensive的所有值
$..book[?(@.author =~ /.*REES/i)] 獲取json中book陣列中的作者以REES結尾的所有值(REES不區分大小寫)
$..* 逐層列出json中的所有值,層級由外到內
$..book.length() 獲取json中book陣列的長度
官網給出的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
}
Java的JsonPath工具包
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
<version>2.4.0</version>
</dependency>
類似Jar不僅僅這一個
Python的JsonPath工具包
import jsonpath
掃一掃,關注我