Jmeter-后置处理器-Json提取器(JSON Extractor)
JSON提取器的基本使用
JSON 提取器可以通过使用JSON-PATH语法从JSON类型得到响应中提取数据。主要用于关联接口或需要对响应数据进行处理;如果要使用JSON提取器,必须将其放到取样器的子集;
Names of created variables | 此处填写变量名,用于接收JSON-PATH提取出的数据,如果提取多个数据则通过分号将变量名分隔 |
JSON Path expressions | 此处填写JSON-PATH语法,提取多个数据时可通过分号将JSON-PATH 分隔(下面有JSON-PATH语法示例) |
Match No.(0 for Random) | 如果JSON-PATH提取到多个结果,则可以选择指定的作为变量值,0表示随机取值,-1表示提取所有结果值,他们将被命名为<变量名_N>N表示从1-结果数量 |
Compute concatenation var (suffix_ALL) | 勾选后,如果找到多个结果,将会通过逗号将多个结果串联保存到<变量名_ALL>中 |
Default Values | 如果JSON-PATH提取不到值将会使用,只提取一个数据可以不用填写,如果提取多个数据则必须设定与之对应数量的默认值,通过分号分隔 |
JSON-PATH语法
1.JSON-PATH的两种使用方式
$.store.book[0].title | 通过点寻找一下级 |
$['store']['book'][0]['title'] | 通过中括号寻找下一级 |
2.最常用的操作符
Operator | Description |
$ | 操作JSON数据的根元素,后面要匹配的路径都通过$开始 |
@ | 操作当前节点,一般用于过滤匹配到的数据 |
* | 通配符,可以匹配任何的数据 |
.. | 深圳扫描,一个点获取下一节点,两个点可以深层扫描所有节点 |
3.常用到的过滤运算符过滤操作
Operator | Description |
---|---|
== | 等值判断,注意:1 不等于 "1" |
!= | 不等值判断 |
< | 小于 |
<= | 小于等于 |
> | 大于 |
>= | 大于等于 |
=~ | 等号左边匹配波浪线右边的正则表达式 [?(@.name =~ /foo.*?/i)] |
in | 是否在其中 |
nin | 不在其中 |
4.操作示例
1 { 2 "store": { 3 "book": [ 4 { 5 "category": "reference", 6 "author": "Nigel Rees", 7 "title": "Sayings of the Century", 8 "price": 8.95 9 }, 10 { 11 "category": "fiction", 12 "author": "Evelyn Waugh", 13 "title": "Sword of Honour", 14 "price": 12.99 15 }, 16 { 17 "category": "fiction", 18 "author": "Herman Melville", 19 "title": "Moby Dick", 20 "isbn": "0-553-21311-3", 21 "price": 8.99 22 }, 23 { 24 "category": "fiction", 25 "author": "J. R. R. Tolkien", 26 "title": "The Lord of the Rings", 27 "isbn": "0-395-19395-8", 28 "price": 22.99 29 } 30 ], 31 "bicycle": { 32 "color": "red", 33 "price": 19.95 34 } 35 }, 36 "expensive": 10 37 }
JSON-PATH | Result |
---|---|
$.store.book[*].author | store下所有book的author |
$..author | 所有author |
$.store.* | store下的所有 |
$.store..price | store下所有的price |
$..book[2] | 从开始匹配到第三个book |
$..book[-2] | 匹配到倒数第二个book |
$..book[0,1] | 从开始匹配前两个book |
$..book[:2] | 从索引0开始匹配,匹配到索引2,注意左闭右开 |
$..book[1:2] | 从索引0开始匹配,匹配到索引2,注意左闭右开 |
$..book[-2:] | 匹配最后面的两个book |
$..book[2:] | 从第二个book开始匹配到结束 |
$..book[?(@.isbn)] | 当前节点所有带有isbn的book |
$.store.book[?(@.price < 10)] | 当前节点所有price小于10的book |
$..book[?(@.price <= $['expensive'])] | 所有price小于expensive的book |
$..book[?(@.author =~ /.*REES/i)] | 所有与正则相匹配的book |
$..* | 所有的所有 |
$..book.length() | book的数量 |