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.常用到的过滤运算符过滤操作

OperatorDescription
== 等值判断,注意: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-PATHResult
$.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的数量
posted @ 2020-10-31 15:42  不休不止  阅读(443)  评论(0编辑  收藏  举报