jmeter参数化-6、上个接口返回的值作为下一个接口的参数(json extrator、正则提取器、beanshell)
对请求添加后置处理器,从前面的响应数据中提取参数。
一般使用json提取器、正则提取器、beanshell。三者用法都一样,都是在待提取的请求下面添加一个提取器就可以了。
6.1、后置处理器json extrator
6.1.1、注意事项
注意需添加到请求内,否则下一个请求可能获取不到值
错误写法:
正确写法:
6.1.2、举例中的测试数据
6.1.3、各字段含义
Apply to:指作用范围,通常发出一个请求只触发一个请求,所以勾选“main sample only”就可以;若发一个请求可以触发多个服务器请求,就有main sample 和sub-sample之分了。
Variable names:参数名称,多个参数之间用英文分号分隔
Json path expression:提取方式的表达式
Match no:需要与json path expression搭配使用,当表达式为$.data.data..title时,取到的是列表,此处填入数字,则表示取第几个值,从1开始数。不填时,默认为0,表示从title列表中随机取一个title。填入-1时,返回每一个值。
compute concatenation var:在match no为-1的情况下,勾选后,会多生成一个“变量名_ALL”的参数,将所有匹配值用,连接起来。
Default values:当参数取不到对应值时的默认值
6.1.4、Json path expression 详细说明
(1)常规情况
$..title 相对路径,取任一层级下的title,有多个时默认随机取值,或者搭配match no返回多个值
$.data.total 绝对路径下的total
$.data.data[0].title
*(2)按条件提取值,对列表中的元素进行筛选
语法格式
[?(expression)]
$..users[?(@.uuid)] 提取 users 里面包含 uuid 字段的记录
$..users[?(@.reg_time > '2020-06-01')] 提取 reg_time 字段大于 2020-06-01 的记录
$..users[?(@.role_desc =~ /.*会员.*?/i)] 提取 role_desc 字段包含会员的记录
$..users[?(@.status == 0)] 提取 status 字段等于 0 的记录
@
代表当前节点,像上面的四个栗子,@代表 users 这个列表字段
=~
后面跟正则表达式,如果想提取包含指定字符的值,可以使用此正则: /.*指定字符串.*?/i
i 代表大小写不敏感
*(3)提取数据指定字段的值的例子
提取 users 第一条记录的 uuid、username 字段的值
$..users[0].['uuid','username']
测试结果
new_1={"uuid":"6D5EDCB459F0917A98106E07D5438C58","username":"luojunjiessb"}
6.1.5、match no为-1的情况
从列表中循环取值
搭配for each控制器,就可以遍历每一个返回值:
运行结果:
6.2、正则提取器
JSON 提取器只针对接口返回的响应内容,如果想提取的是响应头、请求头的值,这个时候正则提取器的作用就出来了,它可以提取请求任一部分的值。
测试数据与6.1中的相同。
6.2.1、各字段含义
Apply to:同json处理器
Field to check:需要匹配的字段范围,即从哪里匹配
Body 响应体,不包括响应头;最常用
Body (unescaped) 响应体,替换了所有HTML转义符,因为转义处理时不考虑上下文,所以不建议使用
*Body as a Document 从不同类型的文件中提取文本;影响性能
Names of created variables:接收提取值的变量名
Regular Expression:正则表达式
( ) 里面写匹配规则,用于解析正则表达式
.*? 表示匹配任意长度的任意字符,这也是最常用的正则表达式
Template:从找到的匹配项中创建字符串的模板
Match No.(0 for Random):同json提取器
Default Value:同json提取器
Use empty default value :勾选后,提取不到值时,则返回空字符串
6.2.2、仅有一个返回值的情况
正则表达式只有一个(),且匹配数字不为-1
模板为空时,参数值返回为空
模板为$0$时,返回完整的正则表达式
模板为$1$时,返回正则表达式中,第一个括号里匹配到的内容
模板为$2$时,返回正则表达式中,第二个括号里匹配到的内容,没有则返回null
模板为$3$时,返回正则表达式中,第三个括号里匹配到的内容,没有则返回null
6.2.3、有多个返回值的情况
(1)一个(),匹配到多个值
一个 ( ) 匹配到多个值,且 Match No 填了 -1
同理json提取器,可以使用for each依次取值,参考6.1.5
(2)多个(),匹配到多个值
一个表达式有多个()的情况
6.3、后置处理器 BeanShell PostProcessor
解析并提取响应结果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南