0
点赞
收藏
分享

微信扫一扫

Jmeter -- 上下文关联(JSON提取器)

目标:

将请求A响应数据的部分内容提取出来,保存成变量供后续请求使用(用在返回格式为json的HTTP请求中)

步骤:

1. 添加JSON Extractor后置处理器 add --> post processors --> JSON Extractor

Jmeter -- 上下文关联(JSON提取器)_json

2. 在监听器查看结果树中,选择JSON Path Tester,下图红框中填写JSON提取表达式,可以点击TEST按钮测试表达式是否正确

Jmeter -- 上下文关联(JSON提取器)_自定义_02

3. 将步骤2的表达式,填写进步骤1创建的JSON提取器中

Jmeter -- 上下文关联(JSON提取器)_自定义_03

 参数说明:

1) Name of created variables:变量名称,引用时格式:${token}

2) JSON path expressions:步骤2中获取的表达式

3) Match No:可以填三个值 (0:随机  1:第一个  -1:全部)(获取到的值有多个时,选择其中的某部分)

4) compute concatenation var(suffix_ALL): 是否统计所有,即将获取到的所有值都保存(目前用到的不勾选)

5) default values:默认值

 

 如果要提取多个值,中间用分号隔开,如下:

Jmeter -- 上下文关联(JSON提取器)_json_04

也可以设置两个JSON Extractor,但位置需要在Debug PostProcessor之前(不然Debug PostProcessor打印不出json提取的内容,但debug Sampler可以打印出来,不影响变量引用)

Jmeter -- 上下文关联(JSON提取器)_自定义_05

 

 

 

 

 

 

 

 

 PS:为了检查json提取器是否正常获取到值,可添加 Debug PostProcessor来检查,注意正常跑用例时删除或禁用它

        

Jmeter -- 上下文关联(JSON提取器)_数据_06

  

    也可以添加sampler-->debug sampler查看提取到的内容

        

Jmeter -- 上下文关联(JSON提取器)_自定义_07

 添加以上任意一种后,可在观察结果树中查看结果

Jmeter -- 上下文关联(JSON提取器)_json_08

 第三个参数选-1,第四个参数勾选效果如下: 

 

Jmeter -- 上下文关联(JSON提取器)_json_09

 第三个参数选-1,第四个参数不勾选效果如下: 

 

Jmeter -- 上下文关联(JSON提取器)_自定义_10

 第三个参数选0,第四个参数不管是否勾选:

 

Jmeter -- 上下文关联(JSON提取器)_数据_11

 第三个参数选1,第四个参数不管是否勾选:

 

Jmeter -- 上下文关联(JSON提取器)_自定义_12

 

 

 

 

 

 

 目标2:

    json提取器,1个变量获取多个数据

例如:

1. 查询用户信息,会返回多个用户的信息,我们想要获取所有用户的id,json path如下:$.result.content[*].id

Jmeter -- 上下文关联(JSON提取器)_json_13

json提取器如下:

Jmeter -- 上下文关联(JSON提取器)_json_14

 执行后,debug sampler结果如下:

doctor_id_matchNr=10表示获取了10个医生的id

Jmeter -- 上下文关联(JSON提取器)_数据_15

 2. 按用户id循环查询医生详情

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

Jmeter -- 上下文关联(JSON提取器)_json_16

 2)在循环控制器之下添加请求,查询医生详情,医生id以下两种方式均可

    a. 直接写在url中

Jmeter -- 上下文关联(JSON提取器)_json_17

    b. 写在用户自定义变量中,然后在url中调用

 

Jmeter -- 上下文关联(JSON提取器)_自定义_18

Jmeter -- 上下文关联(JSON提取器)_json_19

 3. 查看结果,请求体正确,响应体也返回了对应的数据,完美~

 4. 关于第2步中的函数说明

  因为要把JSON提取器中匹配到的doctor_id_1,....doctor_id_10循环传递给“查询医生详情”,

  __counter为jmeter自带的一个计数函数,${__counter(,)}引用这个函数,每运行1次+1,从1开始;doctor_id_${__counter(,)}运行第1次doctor_id_1,运行第2次doctor_id_2,以此类推,直到运行到循环次数doctor_id_10

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

      

Jmeter -- 上下文关联(JSON提取器)_数据_20

      

Jmeter -- 上下文关联(JSON提取器)_自定义_21

  ${__V(doctor_id_${__counter(,)})} 获取doctor_id的值
  ${__V(,doctor_id_${__counter(,)})} 获取doctor_id本身

 5. 断言中,也可以使用函数助手生成的函数

  用${__V(doctor_id_${__counter(,)})}或引用用户自定义变量中的${doctor_id}均可

      

Jmeter -- 上下文关联(JSON提取器)_数据_22

 

   




举报

相关推荐

0 条评论