Jmeter----JSON提取器
1.说明
有时候需要将前一个请求返回的数据作为下一个请求的参数时,我们就需要 JSON提取器 / 正则表达式提取器。使用JSON提取器去提取我们想要的部分再传入后面的请求中。
2.步骤
第一步:添加JSON提取器
HTTP请求 鼠标右键 =>添加 后置处理器 =>JSON提取器
在察看结果树中选择JSON Path Tester,输入表达式即可拿来测试书写的Json提取器表达式是否正确,是否获取到了我们想要的数据
第二步:提取请求返回的我们需要的内容
返回数据(需要提取加粗的数据出来),可以使用 json.cn 方便查看格式
{"data":{"customer":{"cart":{"cartItems":[{"quantity":5,"lineId":"1502177237219287043","sku":{"product":{"extAttribute":[{"code":"logistics_description"}],"images":[{"images":null,"url":"x"}],"code":"AA9C08571T441_507","skus":[ |
标准写法为$.key
其中key
为返回结果map中的一个键,如果是多层则继续用.key
进行即可
如果遇到key的value值为一个List,则使用.key[n]
,其中n
为list中元素的编号
第三步:取值
取值使用 ${JSON提取器中的参数名称}
即${cart_skuCode_0}
第四步:更多取值用法
获取取得的值中的第一个:${cart_quantity_1} 值:5
获取取得的值中的第二个:${cart_quantity_2} 值:3
勾选compute concatenation var的情况下,可以使用${cart_skuCode_ALL}获得全部的值 值:5,3
JsonPath | 说明 |
$ | 根对象/元素 |
@ | 当前对象/元素 |
. or [] | 子操作符 |
.. | 递归下降 |
* | 通配符,代表所有对象/元素 |
[] | 下标运算,通过数组元素的下标访问数组元素 |
[,] | Union操作符,使用间隔的名字或数组下边生成子集 |
[start:end:step] | 数组切片 |
?() | 使用过滤表达式 |
() | 脚本表达式 |
举例说明:
{ "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 } } } |
|
$.store.book[*].author | 商店里所有书籍的作者 |
$..author | 商店里所有书籍的作者 |
$.store.* | 商店里的所有东西(包括一些书和一辆红色的自行车) |
$.store..price | 商店里的所有价格(包括每一本书的价格和自行车的价格) |
$..book[2] | 第三本书的所有信息 |
$..book[-1:] | 最后一本书的所有信息 |
$..book[0,1] | 前2本书的所有信息 |
$..book[:2] | 前2本书的所有信息 |
$..book[?(@.isbn)] | 找出所有有isbn编号的书籍信息 |
$..book[?(@.price<10)] | 找出所有价格小于10的书籍信息 |