Jmeter 使用Json提取请求数据-2

在接口测试中有一个这样的场景:业务接口需要用到登录token;下个接口需要用到前个接口返回值作为参数,该怎么实现?

首先先看下登录、业务接口,本文用的jmeter版本为5.4.1

 

一、json提取器设置变量获取数据

1、先添加登录接口,运行查看响应结果

 

 json path表达式怎么写?例如我要获取token,可写$data.token,$表示根元素,然后一级一级属性往下去找,先找到data,再往下子节点找到token;也可以写成$..token,直接从根元素去递归查找token。

 

 

 

 2、右键登录请求-->后置处理器-->添加“JSON提取器”

JSON提取器说明:

Apply to:应用范围

Names of created variables :接收值的变量名,自定义,多个变量用分号分隔 

JSON Path expression json path表达式,也是用分号分隔 

Match No.(0 for Random)0表示随机;n取第几个匹配值;-1匹配所有。若只要获取到匹配的第一个值,则填写1

Compute concatenation var(suffix_ALL):如果找到许多结果,则插件将使用' , '分隔符将它们连接起来,并将其存储在名为<variable name> _ALL的var中

Default Values: 缺省值,匹配不到值的时候取该值,可写error。

为了检查通过json提取器是否正常获取到值,可添加Debug PostProcessor来检查。

 

 3、添加查询接口,将json提取器获取到的值,进行变量引用

 

 点击运行接口,运行成功

 

 二、json提取器设置一个变量获取多个数据

1、例如从“默认页面查询接口”返回中获取所有name

 

 如果想要获取这里所有的name,json路径表达式怎么写?$..name或者$.data.records[*].orgName

 

 2、添加json提取器,获取所有name信息

 

 添加Debug PostProcessor来调试用,正常跑用例删除或禁用它。可查看到获取到了所有name值。通过name_1,....name_10可得到每一个name。

 

 3、将获取到的每一个name循环进行查询

1)添加循环控制器,设置循环次数

 

 2)在循环控制器之下添加“输入查询接口”,并做以下设置

因为也是业务接口,需要调用token,所以这里也加一下。

 

因为要把JSON提取器中匹配到的name_1,....name_10循环传递给“用户流水记录”,

__counter为jmeter自带的一个计数函数,${__counter(,)}引用这个函数,每运行1次+1,从1开始;

name_${__counter(,)}运行第1次name_1,运行第2次name_2,以此类推,直到运行到循环次数name_10

__V为jmeter自带的一个嵌套变量函数,运行第1次name_${__counter(,)}为name_1,${__V(name_${__counter(,)},)}则为${name_1},值10;以此类推,一直循环到${name_10}

 

 

3)运行结果查看

 

 原文:https://www.cnblogs.com/datacenter/p/15043104.html?share_token=7689bffe-9368-486e-a449-4c07451d64ce

posted @ 2022-04-10 13:28  少年Dev  阅读(924)  评论(0编辑  收藏  举报