Jmeter正则表达式提取器

发布时间 2023-11-14 15:15:50作者: Mio21

Jmeter正则表达式提取器

在jmeter里正则表达式用的位置比较多。

一、正则表达式

功能是从请求的响应结果中取到需要的内容,作为下一个接口的入参从而实现关联。正则表达式提取器可配合Debug Sampler来查看各变量取值。

img

要关联这个

user_id":"10145"

说明:

简单介绍一下Jmeter正则表达式提取器的使用方法。

1、添加Jmeter正则表达式提取器

在具体的Request下添加Jmeter正则表达式提取器(Jmeter正则表达式在“后置处理器”下面)

2、Jmeter正则表达式提取器控制面板,截图如下:

img

位置****1:名称及注释

位置****2:正则表达式提取内容的范围。(关于各字段的详细说明请查阅协议的相关说明)

位置****3:正则表达式提取的相关设置

    • 引用名称:自己定义的变量名称,后续请求将要引用到的变量名,如填写的是: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:一个表达式匹配多个参数

img

调用方法${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

3、一种不是很常见的情况是有若干个匹配数据,使用正则表达式测试器测试的结果如下:

img

若希望取到17这个值,则对应的是第二列第二行($2$, ${javawd_g2}),如果是第三列第四行的数据,则对应的是($3$,${javawd_g4})

这种情况在Jmeter正则表达式提取器和HTTP请求中的设置如下:

img