测试需求:相信大家在进行接口测试时,经常会遇到需要前一个接口的返回结果的某个出参作为下一个请求的某个入参。
实践目的:使用jmeter的后置处理器中的正则表达式提取器完成提取接口1返回值,并在接口2中进行引用
接口1出参:
接口2的入参:
其中接口2中的sn 和timestamp字段需要提取接口1的remote_control_sn,remote_control_timestamp字段
步骤1:
先新建两个http 请求-》用于测试接口1和接口2
新建查看结果树-》用于查看结果
新建debug sampler -》用于观察参数值
新建正则表达式提取器-》用于提取接口1的返回值
步骤2:简单认识一下正则表达式Regular Expression Extractor元件的配置
Name of created variable:引用名称,如接口2中要引用到变量名,如sn,那么引用就是$
Regular Expression:正则表达式,注意这里都是用集合形式来提取的,也就是括号()括起来的内容就代表要提取的数据
Template:模板,格式类似于$1$,$2$,如有多个匹配规则,也即有多个(),$0$表示随机匹配一个内容项,$-1$表示取所有值,$1$就表示第一个匹配的内容项,$2$代表第二个内容项,以此类推。
Match No.:匹配编号,0代表随机取值,1代表取全部值
Default Value:缺省值,如果参数没有取到值,提供一个默认值,如error
步骤3:方式1:单个值提取
新建第一个提取器,提取sn
新建第二个提取器,提取timestamp
接口2中进行参数引用
运行结果,观察结果1的返回值和接口2的请求值
再来看看debug sampler记录的值
步骤4:上面是新建了两个提取器,一个提取器可不可以了?答案是可以的呢。也就是方式2:多模板单数据
新建提取器,提取规则里面两个()代表两个模板
接口2引用
运行结果:
步骤5:类型引申,假设有多个模板,每个模板有多个值返回桌面办呢?
其实表达式规则和多模板单数据即步骤4是一样的,只是引用那里稍微调整一下,如:
info_1_g1,表示第一个模板的第一个参数
info_1_g2,表示第一个模板的第二个参数
info_2_g1,表示第二个模板的第一个参数
info_2_g2,表示第二个模板的第二个参数
接下来回顾一下正则表达式的常用语法
匹配内容
.匹配除换行符以外的任意字符
\w匹配字母或数字或下划线或汉字
\s匹配任意的空白符
\d匹配数字
\b匹配单词的开始或结束(如果需要更精确的说法,\b匹配这样的位置:它的前一个字符和后一个字符不全是\w)
^匹配字符串的开始
$匹配字符串的结束
反义内容匹配:
\W匹配任意不是字母,数字,下划线,汉字的字符
\S匹配任意不是空白符的字符
\D匹配任意非数字的字符
\B匹配不是单词开头或结束的位置
[^x]匹配除了x以外的任意字符
[^aeiou]匹配除了aeiou这几个字母以外的任意字符
次数匹配:
*重复零次或更多次
+重复一次或更多次
?重复零次或一次
重复n次
重复n次或更多次
重复n到m次
推荐可以网上下载正则表达式匹配工具
领取专属 10元无门槛券
私享最新 技术干货