jmeter的json提取器(包括提取多个参数,提取一个参数的所有值)
在工作中经常遇到这种情况,就是下一个接口需要引用上一个接口返回的值,普遍的方法就是运用后置提取器
常用的就是 json提取器,边界提取器,正则表达式提取器这三种,不能满足时还可以用xpath提取器,Bean Shell后置处理器等等,一般来说这三个就够用了
下面简单使用一下这三种提取器:
1)json提取器:
请求右键添加-后置处理器-json提取器
看下字段含义:
绝对路径提取:
相对路径提取:--上级直接用.代替
提取出来后在后续的接口可以通过${变量名}调用,此处的变量名填写提取器中的Names of created variables中的值
不确定Json表达式是否正确的情况下,可以在查看结果集中进行调试,如下,切换JSON Path Tester,在表达式输入框中输入json提取表达式,点击test,下方显示提取的结果:
验证提取器是否成功提取到数据,还可以在请求右键-添加-后置处理器-调试后置处理器,然后执行,在查看结果集会发现请求多了个子集,点击后响应数据拖到最后可看到提取到的变量值
如果是下一个请求需要关联上一个请求的多个字段,那么可以添加多个提取器,但是jmeter也支持一个提取器提取多个字段的值,只需要原来变量的地方填写多个,中间用分号隔开即可,如下:
如果想匹配到一个字段所有的值(返回结果有多个子集的时候),可以通过配置Match No.(0 for Random)为-1,代表匹配全部
配置完成之后其他接口要提取里面的内容,可以通过${fh_id_0}获取第一个值------规则和python的切片类似
$.data.recordList[*].code[0]----第一个code
$.data.recordList[*].code[0]----倒数第二个code
$.data.recordList[*].code[0,1]----前两个code
注意:提取多个值,提取器的 Match No.(0 for Random)必须是-1
工作中还会遇到需要按照条件取值的情况-----表达式:[?(expression)]
$.data.recordList[*].code[?(@.test)]------提取code中包含test的记录
$.data.recordList[*].code[?(@.voucher_time>'2021-08-01')]------提取reg_time字段大于2021-08-01的记录
$.data.recordList[*].code[?(@.desc=~/.*测试.*?/i)]------提取desc字段中包含测试的记录
$.data.recordList[*].code[?(@.sex)]------提取sex字段为0的记录
得到的值为result={"id":"2391771870614016","code":"66BG-0000000000-20210817-000000"}
勾选compute concatenation var和不勾选的区别:
1、引用变量值的时候,下标从1开始标识提取第一个,不勾选时下标为0表示第一个
2、可以通过变量名_ALL得到全部的值
参考文章:https://www.cnblogs.com/poloyy/p/13177102.html