JMeter的JSON提取器一次性提取多个值的方法

JMeter调用接口时,可能需要上个接口的多个响应值,难道我们要在jmeter中添加多个提取器吗?那么我们今天来了解下如何使用json提取器一次性提取多个参数值。

还有一种情况是接口返回了一个数组,我们需要提取数组中多个实例的id等信息

如下面接口返回示例,我需要提取每个数组里的vpc_idvpc_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},下面看后面接口的引用情况:

posted @ 2023-12-01 09:44  明月,  阅读(2365)  评论(0编辑  收藏  举报