Jmeter—正则表达式提取器使用
在jmeter里正则表达式用的位置比较多。
一、正则表达式
功能是从请求的响应结果中取到需要的内容,作为下一个接口的入参从而实现关联。正则表达式提取器可配合Debug Sampler来查看各变量取值。
要关联这个
user_id":"10145"
说明:
简单介绍一下Jmeter正则表达式提取器的使用方法。
1、添加Jmeter正则表达式提取器
在具体的Request下添加Jmeter正则表达式提取器(Jmeter正则表达式在“后置处理器”下面)
2、Jmeter正则表达式提取器控制面板,截图如下:
位置1:名称及注释
位置2:正则表达式提取内容的范围。(关于各字段的详细说明请查阅协议的相关说明)
位置3:正则表达式提取的相关设置
- 引用名称:自己定义的变量名称,后续请求将要引用到的变量名,如填写的是:user_id,后面的引用方式是${user_id}
- 正则表达式:提取内容的正则表达式,相当于lr中的关联函数
- 【() 括起来的部分就是需要提取的,对于你要提的内容需要用小括号括起来】
- 【. 点号表示匹配任何字符串】
- 【+ 一次或多次】
- 【? 在找到第一个匹配项后停止】
- 模板:用$$引用起来,如果在正则表达式中有多个正则表达式(多个括号括起来的东东),则可以是$2$,$3$等等,表示解析到的第几个值给user_id。例如:$1$表示匹配到的第一个值
- 匹配数字:0代表随机取值,-1代表所有值,此时提取结果是一个数组,其余正整数代表第几个匹配的内容提取出来。如果匹配数字选择的是-1,还可以通过${user_id_1}的方式来取第1个匹配的内容,${user_id_2}来取第2个匹配的内容。
- 缺省值:正则匹配失败时,取的值
问题1:(.+?) 与(.*?) 区别
(.+?) 匹配一个以上
(.*?) 匹配0个及以上,要取的值是空值的时候可以取到
比如labelId":""; 要取labelId的值,使用(.+?) 匹配不到值,使用(.*?) 就可以取到值为空对应写法为 labelId":"(.*?) ";
如果正则中有转义怎么办?
id?labelId":"1290" 正则写法 id\?labelId":"(.+?)"
labelId\":\"1290\" 正则写法 labelId\\":\\"(.+?)\\"
labelId":(1290), 正则写法 labelId":\((.+?)\),
问题2:一个表达式匹配多个参数
调用方法${list_g1} ${list_g2}
例如,假设:
引用名:RefName
正则表达式:name=”(.+?)” value=”(. + ?)”
模板:$1$$2$
以下的变量将被设置:
RefName:file.namereadme.txt
RefName_g:groups的数量(在此为2)
RefName_g0:name=”file.name” value=”readme.txt”
RefName_g1:file.name
RefName_g2: readme.txt
---------------------
作者:约会远行
来源:CSDN
原文:https://blog.csdn.net/yue530tomtom/article/details/76571632
版权声明:本文为博主原创文章,转载请附上博文链接!
3、一种不是很常见的情况是有若干个匹配数据,使用正则表达式测试器测试的结果如下:
若希望取到17这个值,则对应的是第二列第二行($2$, ${javawd_g2})
,如果是第三列第四行的数据,则对应的是($3$,${javawd_g4})
这种情况在Jmeter正则表达式提取器和HTTP请求中的设置如下: