1. JSON提取器设置多个变量获取多个数据

添加后置处理器-JSON提取器

JSON提取器说明

Apply to:应用范围;

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

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

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

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

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

 

为了检查通过json提取器是否正常获取到值,可添加Debug PostProcessor来检查,注意正常跑用例时删除或禁用它。(在结果树下查看提取的值)。通过json提取器获取到的值,我们可以进行变量引用。

 

JSON path表达式的写法,例如我要获取id:

  • 可写$.data.id,$表示根元素,然后一级级属性往下去找,先找到data,再往下子节点找到id;
  • 也可写$..id,直接从根元素去递归查找到id;JSON path表达式详细见下

 

 

  1. JSON提取器设置1个变量获取多个数据

我们也会碰到获取一个变量,但结果是多个数据的情况。

1、例如“获取用户列表”,先来看下“获取用户列表”的响应结果。

如果想要获取到这里所有的用户id,json路径表达式怎么写呢?

 

$..id或者$.data[*].id

2、添加JSON提取器,获取所有用户id信息。

 

 

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


presto提取json json提取器提取多个变量_presto提取json

3、将获取到每一个用户id循环进行“用户流水记录”查看结果

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

 

2)在循环控制器之下添加“用户流水记录”请求,并做以下设置。

 


presto提取json json提取器提取多个变量_presto提取json_02

因为要把JSON提取器中匹配到的id_1,....id_22循环传递给“用户流水记录”,__counter为jmeter自带的一个计数函数,${__counter(,)}引用这个函数,每运行1次+1,从1开始;

id_${__counter(,)}运行第1次id_1,运行第2次id_2,以此类推,直到运行到循环次数id_22;

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


presto提取json json提取器提取多个变量_json_03

以上为jmeter工具栏tools-->函数助手对话框界面,可以去选择帮助查看对应函数的功能说明。

3)运行后,可查看到结果

 


presto提取json json提取器提取多个变量_json_04

 

json path使用

通过JsonPath可以从多层嵌套的Json中解析出所需要的值。

JsonPath

JsonPath参照XPath解析xml的方式来解析Json

JsonPath用符号$表示最外层对象,类似于Xpath中的根元素

JsonPath可以通过点语法来检索数据,如: 

shell $.store.book[0].title

也可以使用中括号[]的形式,如

shell $['store']['book'][0]['title']

运算符(Operators)


presto提取json json提取器提取多个变量_数据_05

JsonPath案例

json


presto提取json json提取器提取多个变量_数据_06


presto提取json json提取器提取多个变量_JSON_07

JsonPath例子及说明


presto提取json json提取器提取多个变量_JSON_08