JMeter的JSON提取器一次性提取多个值的方法
JMeter调用接口时,可能需要上个接口的多个响应值,难道我们要在jmeter中添加多个提取器吗?那么我们今天来了解下如何使用json提取器一次性提取多个参数值。
还有一种情况是接口返回了一个数组,我们需要提取数组中多个实例的id等信息
如下面接口返回示例,我需要提取每个数组里的vpc_id
和vpc_name
,后面接口需要用到
{
"vpcs": [
{
"vpc_name": "az2",
"vpc_id": "1712289779223859200"
},
{
"vpc_name": "mysql",
"vpc_id": "1700012025846124544"
},
{
"vpc_name": "sdf",
"vpc_id": "1699042214764826624"
},
...
]
}
关于json提取器参数介绍:
- names of created variables :接收值的变量名,多个变量时用分号分隔
- json path:json path表达式,也是用分号分隔
- match no:0随机;n取第几个匹配值;-1匹配所有,后续引用用 变量名_N 取第N个值。
- default values:缺省值,匹配不到值的时候取该值。如果前面设置多个变量名时这里必须设置对应个数的默认值,用分号分隔
方法一:不固定个数提取
如果是返回的列表,并且不固定个数,可以用这种方式提取
JMeter中的JSON提取器表达式可以设置为(这个Match No设置为-1了就是取所有):
变量名 | JSON表达式 | Match No. | Default Values |
---|---|---|---|
vpcId | $.vpcs[*].vpc_id |
-1 | 只有一个变量名时可以为空 |
后面需要调用时的用法:${vpcId_1}
、${vpcId_2}
、${vpcId_3}
···
我这里调用了vpc列表接口,并且用json提取器提取了变量名为vpcId
,后面随便写了两个接口,接口名直接用${vpcId_1}
和${vpcId_2}
,用来验证是否提取成功
在结果树中通过JSON Path Tester可以验证表达式是否正确
通过报告可以看到应用成功了
多个变量名同时提取
如果只创建一个JSON提取器,可以通过逗号分割的方式同时创建多个变量
如上面的接口返回示例,需要同时提取第一个VPC的vpcId和vpcName,可以在json提取器中添加多个
变量名 | JSON表达式 | Match No. | Default Values |
---|---|---|---|
vpcId0;vpcName0 | $.vpcs[0].vpc_id;$.vpcs[0].vpc_name |
0;0 | 0;0 |
如上图,我同时提取第一个的vpcId和vpcName,命名为vpcId0和vpcName0,下面查看实际接口引用情况:
混合使用
前面分享了一次性提取多个列表,和一个提取器中设置多个变量,这里可以尝试混合使用,同时提取所有的vpcId和vpcName
变量名 | JSON表达式 | Match No. | Default Values |
---|---|---|---|
vpcId0;vpcName0 | $.vpcs[*].vpc_id;$.vpcs[*].vpc_name |
-1;-1 | 0;0 |
如上图,我同时提取所有的vpcId和vpcName,后面引用了${vpcId_1}
、${vpcId_2}
、${vpcId_3}
、${vpcName_1}
、${vpcName_2}
、${vpcName_3}
,下面看后面接口的引用情况: