Jmeter-json提取器

一、JsonPath简介

JsonPath 表达式总是以与 XPath 表达式与 XML 文档结合使用的相同方式引用 JSON 结构。JsonPath 中的“根成员对象”总是被引用,$无论它是对象还是数组。
JsonPath 表达式可以使用点符号

$.store.book[0].title

或括号符号

$['store']['book'][0]['title']
Operator描述
$要查询的根元素。这将启动所有路径表达式。
@过滤谓词正在处理的当前节点。
*通配符。可在任何需要名称或数字的地方使用。
深层扫描。可在任何需要名称的地方使用。
.<name>带点符号的孩子
[’<name>’ (, ‘<name>’)]括号标记的孩子或孩子
[<number> (, <number>)]数组索引或索引
[start:end]数组切片运算符
[?(<expression>)]过滤表达式。表达式必须计算为布尔值。
  • 功能
    函数可以在路径的尾端调用——函数的输入是路径表达式的输出。函数输出由函数本身决定。
Function描述输出类型
min()提供数字数组的最小值Double
max()提供数字数组的最大值Double
avg()提供一组数字的平均值Double
stddev()提供数字数组的标准偏差值Double
length()提供数组的长度Integer
sum()提供数字数组的总和值Double
keys()提供属性键(终端波浪号的替代方案~Set<E>
concat(X)提供带有新项目的路径输出的连接版本like input
append(X)向 json 路径输出数组添加一个项目like input
  • 过滤器运算符
    过滤器是用于过滤数组的逻辑表达式。典型的过滤器将是[?(@.age > 18)]其中@代表正在处理的当前项目。可以使用逻辑运算符&&和来创建更复杂的过滤器||。字符串文字必须用单引号或双引号 ([?(@.color == 'blue')][?(@.color == "blue")])括起来。
操作符描述
==左等于右(注意1不等于’1’)
!=左不等于右
<左边小于右边
<=左小于或等于右
>左大于右
>=左大于或等于右
=~left 匹配正则表达式 [?(@.name =~ /foo.*?/i)]
in左边存在于右边 [?(@.size in [‘S’, ‘M’])]
nin左边不存在于右边
subsetofleft 是 right [?(@.sizes subnetof [‘S’, ‘M’, ‘L’])] 的子集
anyof左边与右边有交集 [?(@.sizes anyof [‘M’, ‘L’])]
noneof左边与右边没有交集 [?(@.sizes noneof [‘M’, ‘L’])]
size左侧(数组或字符串)的大小应与右侧匹配
empty左(数组或字符串)应为空
  • 路径示例
    鉴于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
}
JsonPath结果
$.store.book[*].author]所有书籍的作者
$…author所有作者
$.store.*所有的东西,包括书籍和自行车
$.store…price所有的价格
$…book[2]第三本书
$…book[-2]倒数第二本书
$…book[0,1]前两本书
$…book[:2]从索引 0(包含)到索引 2(不包含)的所有书籍
$…book[1:2]从索引 1(包括)到索引 2(不包括)的所有书籍
$…book[-2:]最后两本书
$…book[2:]从索引 2(包括)到最后的所有书籍
$…book[?(@.isbn)]所有有isbn 属性的书
$.store.book[?(@.price < 10)]price小于10的所有书
$…book[?(@.price <= $[‘expensive’])]price的值小于等于expensive的值(10)的所有书
$…book[?(@.author =~ /.*REES/i)]所有匹配正则表达式的书籍(忽略大小写)
$…*]所有的
$…book.length()图书属性(数组)值的长度

完整的语法说明请见https://github.com/json-path/JsonPath

二、Jmeter中json提取器参数说明

1.添加后置处理器→json提取器
在这里插入图片描述

  1. 参数说明:
参数说明是否必填
Names of created variables保存的变量名称,多个变量用分号分隔
JSON Path Expressionsjson path表达式,多个时也是用分号分隔
Match No. (0 for Random)0表示随机;-1匹配所有;n取第几个匹配值;。
若只要获取到匹配的第一个值,则填写1;
必须匹配变量数 ,如果此 n大于匹配数,则不返回任何内容。将使用默认值
Compute concatenation var如果找到许多结果,则插件将使用’ , '分隔符将它们连接起来,并将其存储在名为 _ALL的var中
Default Values缺省值,匹配不到值的时候取该值;多个值时用分号分隔,必须匹配变量数

三、Jmeter中json提取器使用

  1. json提取器提取单个变量的值

示例:提取登录后返回的ticket认证信息
在这里插入图片描述
添加后置处理器→json提取器
在这里插入图片描述
这里ticket的值只有一个,Match No. (0 for Random) 填不填写都可以

下个接口引用变量:

在这里插入图片描述

  1. json提取器提取多个变量的值
    示例:提取登录响应信息中的userId和ticket
    在这里插入图片描述
    运行结果:
    在这里插入图片描述

  2. json提取器设置1个变量获取多个数据
    示例:

  • 例如先获取所有的一级菜单ID,再根据一级菜单ID去查询获取所有的子菜单
    响应信息:
    在这里插入图片描述

  • 添加json提取器,获取所有的一级菜单id信息
    在这里插入图片描述
    在这里插入图片描述

  • 将获取到的每一个一级菜单id循环进行获取子菜单的信息
    1)添加循环控制器,设置循环次数。
    在这里插入图片描述
    2)在请求中添加json提取器每次提取到的id
    在这里插入图片描述
    因为要把JSON提取器中匹配到的muenid_1,…muenid_35循环传递给查询菜单,

__counter为jmeter自带的一个计数函数,KaTeX parse error: Expected group after '_' at position 2: {_̲_counter(,)}引用这…{__counter(,)}运行第1次muenid_1,运行第2次muenid_2,以此类推,直到运行到循环次数muenid_22
_V为jmeter自带的一个嵌套变量函数,运行第1次muenid${__counter(,)}为muenid_1,${_V(muenid${__counter(,)},)}则为${muenid_1};以此类推,一直循环到${muenid_22}
在这里插入图片描述
3) 运行结果:
在这里插入图片描述

四、json提取器注意点

  1. Match No填写-1,获取所有时
    在这里插入图片描述
    在引用时,需使用${参数名_n}否则直接使用${参数名}会无法引用,匹配结果确定是唯一匹配时不建议使用-1,建议不填写或1
    示例:
    在这里插入图片描述
    在这里插入图片描述
    结果变量引用失败
    在这里插入图片描述
    正确写法:
    在这里插入图片描述
    可以正常获取值
    在这里插入图片描述
    建议:
    匹配结果为多个值时Match No填写-1,否则匹配结果唯一值时,建议不填写或1.

  2. JsonPath结合正则表达式

{
    "list":[
        {
            "id":1803168517610080,
            "code":"jd1",
            "shortName":"jd1",
            "fullName":"jd1",
            "users":[
                {
                    "userName":"jd1",
                    "userType":1,
                    "threeRoleType":null
                }
            ],
            "fullPath":"/默认公司/jd1",
            "layNo":1,
            "sort":0,
            "parentId":1000,
            "description":null,
            "tags":[

            ],
            "layRec":"1000-1803168517610080",
            "valid":true
        },
        {
            "id":1445827415104496,
            "code":"ceshi",
            "shortName":"测试公司",
            "fullName":"测试公司",
            "users":[
                {
                    "userName":"ceshi",
                    "userType":1,
                    "threeRoleType":null
                }
            ],
            "fullPath":"/默认公司/测试公司",
            "layNo":1,
            "sort":0,
            "parentId":1000,
            "description":null,
            "tags":[

            ],
            "layRec":"1000-1445827415104496",
            "valid":true
        }
    ]
}

获取code以jd开头的id

$.list[?(@.code =~/^Jd.*$/i)].id  //不区分大小写
$.list[?(@.code =~/^jd.*$/)].id  //区分大小写

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凡晨丹心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值