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

posted @ 2021-08-23 11:59  jxial  阅读(11070)  评论(0编辑  收藏  举报