一、语法
正则表达式(Regular Expression,在代码中常简写为regex、regexp或RE)是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
表达式规则:元字符+限定符
二、正则表达式提取器
正则表达式提取器是 JMeter 的内置功能,用于从响应数据中提取特定模式的文本。
适用于响应数据的内容没有明确定义结构的情况。当响应数据是自由格式的文本、HTML、XML 或其他非结构化数据时,可以使用正则表达式提取器来捕获信息,编写适当的正则表达式来匹配并提取所需的内容。
JMeter正则表达式提取器常用于接口关联。在一个线程组中,如果需要将上一个请求响应的结果作为下一个请求的参数,则需要对上一个请求的响应结果使用后置处理器,此时就要用到正则表达式提取器。
2.1添加正则表达式提取器
添加线程组-添加HTTP请求-添加-后置处理器-正则表达式提取器
2.2设置正则表达式提取器
(1)引用名称:要引用的参数名称,如msg,则可用${msg}引用
(2)正则表达式:
()括起来的部分就是要提取的,在()里写匹配规则
表达式.*?表示匹配任意长度的任意字符
表达式.*?和.+?是最常用的规则表达式
注意:
表达式 .* 就是单个字符匹配任意次,即贪婪匹配。
表达式 .*? 是满足条件的情况只匹配一次,即最小匹配。
如匹配输入串101000000000100:
使用 1.*1 将会匹配到1010000000001, 匹配方法: 先匹配至输入串的最后, 然后向前匹配, 直到可以匹配到1。
使用 1.*?1 将会匹配到101, 匹配方法: 匹配下一个1之前的所有字符。
(3)模板:左右分别用$引用起来,$1$表示解析到的第1个值,如果有多个值,就添加多个,例如有3个值时,可以写为$1$ $2$ $3$,中间的空格起分隔的作用,可以不写,也可以用其他分隔符,如:$1$;$2$;$3$
(4)匹配数字:0代表随机取值,1代表取第一个值,-1代表取全部值,通常情况下填0
2.3验证正则表达式提取的值
方法一:在查看结果树中,选择RegExp Tester查看
方法二:添加调试取样器后,在查看结果树中,查看调试取样器(Debug Sampler)
线程组-右键-添加-取样器-调试取样器
在查看结果树中,查看调试取样器
2.4引用正则表达式提取的值
添加新的HTTP请求,引用正则表达式提取的值。
格式:${引用名称}
2.5一个正则表达式有多个(),提取多个结果
msg_g1 = 模板$1$的参数 即第一个()中的内容
msg_g2 = 模板$2$的参数 即第二个()中的内容
在后一个请求中引用时,可以通过msg_g1和msg_g2,获取到对应的值
2.6 一个()中的正则表达式匹配到多个值,提取数组
若一个()中的正则表达式匹配到多个值,正则表达式提取器中,匹配数字需要填写-1,才能提取到多个值。
提取到的多个值后,需要结合 ForEach控制器,迭代提取到值,然后将提取到的值赋予到 HTTP 请求中使用。
a.线程组-右键-添加-逻辑控制器-ForEach控制器,然后将ForEach控制器移动到前一个HTTP请求下方。
b.设置ForEach控制器
输入变量前缀:即正则表达式提取器中的应用名称
开始循环字段(不包含):因为是不包含,要想从1开始,需填写0
结束循环字段(含):填写需要的数字
输出变量名称:设置后,在新的HTTP请求中被引用
c.在ForEach控制器中,添加新的HTTP请求,引用提取到的值。