目标:
将请求A响应数据的部分内容提取出来,保存成变量供后续请求使用(用在返回格式为json的HTTP请求中)
步骤:
1. 添加JSON Extractor后置处理器 add --> post processors --> JSON Extractor
2. 在监听器查看结果树中,选择JSON Path Tester,下图红框中填写JSON提取表达式,可以点击TEST按钮测试表达式是否正确
3. 将步骤2的表达式,填写进步骤1创建的JSON提取器中
参数说明:
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:默认值
如果要提取多个值,中间用分号隔开,如下:
也可以设置两个JSON Extractor,但位置需要在Debug PostProcessor之前(不然Debug PostProcessor打印不出json提取的内容,但debug Sampler可以打印出来,不影响变量引用)
PS:为了检查json提取器是否正常获取到值,可添加 Debug PostProcessor来检查,注意正常跑用例时删除或禁用它
也可以添加sampler-->debug sampler查看提取到的内容
添加以上任意一种后,可在观察结果树中查看结果
第三个参数选-1,第四个参数勾选效果如下:
第三个参数选-1,第四个参数不勾选效果如下:
第三个参数选0,第四个参数不管是否勾选:
第三个参数选1,第四个参数不管是否勾选:
目标2:
json提取器,1个变量获取多个数据
例如:
1. 查询用户信息,会返回多个用户的信息,我们想要获取所有用户的id,json path如下:$.result.content[*].id
json提取器如下:
执行后,debug sampler结果如下:
doctor_id_matchNr=10表示获取了10个医生的id
2. 按用户id循环查询医生详情
1)添加循环控制器,设置循环次数
2)在循环控制器之下添加请求,查询医生详情,医生id以下两种方式均可
a. 直接写在url中
b. 写在用户自定义变量中,然后在url中调用
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}
${__V(doctor_id_${__counter(,)})} 获取doctor_id的值
${__V(,doctor_id_${__counter(,)})} 获取doctor_id本身
5. 断言中,也可以使用函数助手生成的函数
用${__V(doctor_id_${__counter(,)})}或引用用户自定义变量中的${doctor_id}均可