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
本文来自博客园,作者:少年Dev,转载请注明原文链接:https://www.cnblogs.com/yaodun55/p/16125543.html