Jmeter的json提取器(包括提取一个参数的所有值,提取多个参数

jmeter的json提取器(包括提取多个参数,提取一个参数的所有值)https://www.cnblogs.com/jxial/p/15175314.html

在工作中经常遇到这种情况,就是下一个接口需要引用上一个接口返回的值,普遍的方法就是运用后置提取器

常用的就是 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得到全部的值

相关推荐
Lyyaoo.几秒前
【JAVA基础面经】native方法
java·开发语言
a***72892 分钟前
SQL 注入漏洞原理以及修复方法
网络·数据库·sql
牛十二2 分钟前
nacos2.4连接出错源码分析
java·linux·开发语言
hERS EOUS4 分钟前
WebSpoon9.0(KETTLE的WEB版本)编译 + tomcatdocker部署 + 远程调试教程
前端
前端那点事8 分钟前
Vue3 Tree-Shaking 原理解析
前端·vue.js
qq_372906939 分钟前
Python最短路径怎么求_Dijkstra算法与优先队列结合
jvm·数据库·python
qq_330037999 分钟前
如何查看集群版本_crsctl query crs activeversion当前版本
jvm·数据库·python
阿巴斯甜10 分钟前
userList.stream().sorted((u1, u2) -> u2.getAge() - u1.getAge()); 怎么判断是升序还是降序?
java
小松加哲10 分钟前
AspectJ编译期织入实战
java·开发语言
贺小涛13 分钟前
python和golang进程、线程、协程区别
java·python·golang