jmeter中的正则表达式

本文介绍了Jmeter中正则表达式的书写及使用方式。说明了正则表达式用于获取变量值,包括应用范围、引用名称等参数含义。还介绍了RegexTester验证工具。通过多种示例展示不同括号数量、模板和匹配数字组合下的使用情况,并总结了模板和匹配数字的对应规则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 Jmeter中怎么书写正则表达式以及正则表达式的使用方式

正则表达式一般用于获取某个变量值

Apply to:正则表达式应用范围,一般默认为Main sample only、主体

引用名称:自己定义的变量名称,后续请求将要引用到的变量名,如填写的是:token,后面的引用方式是${token}

正则表达式:提取内容的正则表达式

  ()  ----   括起来的部分就是需要提取内容

   .   ----   点号表示匹配除换行符 \n 之外的任何字符串

  +   ----   匹配一次或多次

  ? ----  在找到第一个匹配项后停止

模板:用$$引用起来,匹配正则表达式中有()的值,就匹配如果在正则表达式中有多个正则表达式,则可以是$1$$2$

          $0$:表示取所有值,取正则表达式中所有的值,也就是非括号与括号中所有的值

          $1$:表示取第一个()中的值

          $2$:表示只取第二个()中的值

          $n$:表示取第n个()中的值

          $1$,$2$:表示取第一个()与第二个()中的值,注意:第一个括号中的值与第二个括号中的值连接方式就依赖于它们之间是用什么分隔符,如$1$,$2$,它们之间是用逗号来分隔的,那么取到的第一个值与第二个值连接方式就是逗号分隔,这个下面举例会说明的

匹配数字:根据正则表达式所能匹配到的值

   0 ----  代表随机取一个值

   -1 ---- 代表取出所有值,但是这种情况下引用变量时,就必须要指名引用哪个变量值,如引用名称是token,那么后续引用此变量时,就需要用${token_1}或${token_n}来匹配对应的值

   1 ----  代表取第一个值

   2 ----  代表取第二个值

   n ---- 代表取n个值

缺省值:如果正则表达式没有搜找到值,则使用此缺省值

 

二、正则表达式验证工具

RegexTester工具可以用来验证所写的正则表达式是否有误

1、下载地址:https://sourceforge.net/projects/regextester/

2、下载后解压,不需要安装,直接点击应用程序

3、然后打开页面,如下图页面

    (1)RegEx Expression:输入正则表达式

    (2)Test Text:需要提取的返回数据

    (3)按Test[F5]键,生成对应的值,验证生成的值是否是自己所需要的值

 

三、正则表达式的使用方式:

1、正则表达式的匹配值只取一个值,也就是正则表达式中只有一个(),所以模板输入为$1$,匹配数字也输入为1

(1)下图中是http1请求返回的值,如果http2请求需要用到token值,那么用正则表达式来提取

(2)线程组---添加 ---后置处理理---正则表达式提取器,输入引用名称、正则表达式、模板、匹配数字以及缺省值

   (3)、http2请求中需要token值

2、正则表达式有两个(),模板输入为$1$,匹配数字输入为1

 (1)提取下图中的https的链接地址

   (2)正则表达式书写如下图,一定要注意<>中字符串的书写规范必须跟上图中的<>字符串的书写规范一致,该空格的地方要空格,否则会匹配不到数据;

  •      当然正则表达式也可以写成:<a href="https://(.+?)" target="_blank" class="overshopadv".+   但是为了在http2请求中引用变量值时,将服务器名称与路径分别引用变量值,所以建议如果获取的链接地址带路径名,最好用两个()来分别获取数据,如果获取的链接地址不带路径名,那就不需要用两个()了;
  •     正则表达式还可以写成:<a href="https://(.+?)(.+?)" target="_blank" class="overshopadv".+    那么模板在输入时就不需要输入$1$/$2$了,只要输入$1$$2$;

   (3)运行后,在察看结果树中可以看到所取到的数据,只取到了第一个括号中的值

  (4)虽然http2请求没有标红,但是显示请求的链接地址不是我们所需要的链接地址

 

3、正则表达式有两个(),模板输入为$1$/$2$,匹配数字输入为1

   (1)模板一定要输入$1$/$2$,否则获取到的字符串就无法以/连接了

 

(2)下图中可以看到调试取样器中所取到的数据正是我们所需要的数据

 

(3)为什么此时http2请求标红呢,下图中可以看到虽然获取的数据正是我们所需要的链接地址,但是这个链接地址引用到http2请求中,在请求时自动加上了一个/号,而我们所需要的链接地址不需要加上这个/号。查看http2请求中所引用的变量(上上图),发现在服务器名称上引用了变量,而获取的链接地址cuxiao.suning.com/hwgzpbz.html是服务器名+路径名组成的,显示将路(/hwgzpbz.html)写在服务器名称上是不对的;

 

(4)在察看结果树---调试取样器中可以看到获取的数据有一个ABCDEF_g1、ABCDEF_g2的值,分别是服务器名与路径名;

ABCDEF=cuxiao.suning.com/hwgzpbz.html  ------ ${ABCDEF}引用的是这个里面的数据

ABCDEF_g=2  ----- 表示正则表达式中需获取2个值,正则表达式中有几个(),这边就显示几个数字

ABCDEF_g0=<a href="https://cuxiao.suning.com/hwgzpbz.html" target="_blank" class="overshopadv"  ---- 获取正则表达式中所有的数据

ABCDEF_g1=cuxiao.suning.com ----  获取正则表达式中第一个()中的值

ABCDEF_g2=hwgzpbz.html  ----  获取正则表达式中第二个()中的值

 

(5)所以我们在http2请求中,分别引用ABCDEF_g1、ABCDEF_g2变量的值

(6)运行后在察看结果树中看到http2请求成功了,请求中的链接地址正是我们所需要的链接地址

 

4、正则表达式有两个(),模板输入为$0$,匹配数字输入为1,解释一下当模板输入为$0$时,获取是什么数据,很显然模板输入为$0$时,获取的是正则表达式中所有的数据<a href="https://cuxiao.suning.com/hwgzpbz.html" target="_blank" class="overshopadv",包括括号与非括号中的数据

 

5、正则表达式有两个(),模板输入为$3$,匹配数字输入为1,将获取不到数据,这个时候取的是缺省值中输入的数据

 

6、正则表达式有两个()模板输入为$1$/$2$,匹配数字输入为-1,获取的是所有能满足正则表达式的数据,那么在引用变量时,首先需要调试程序,然后查找所需要的数据,最后引用变量时,格式是${变量名_n},这种方式一般用在变量名相同但有n种不同的值,而我们只需要其中某一个值

 (1)匹配数字输入为-1

 (2)调试取样器中可以查看到,获取的是所有能满足正则表达式的数据,而我们所需要的数据是ABCDEF_4的数据

  (3)http2请求中服务器名称分别输入${ABCDEF_4_g1}和${ABCDEF_4_g2}

 

7、正则表达式有两个(),模板输入为$1$/$2$,匹配数字输入为0,当匹配数字输入为0时,获取的是满足正则表达中某一个随机数据,这种方法不适合于变量名相同但有n种值的情况,否则所获取的就不是自己所需要的数据,而且每次运行时,所获取的数据都不一样

 

8、当获取的数据,变量名对应唯一的值,那么匹配数字无论是输入0还是1都可以,但不要输入-1,因为一旦输入了-1,就算此时一个变量名对应唯一一个值,但是获取的数据格式还是变为变量名_n的形式,那么引用变量时,同样也需要用${变量名_ n}的格式

总结:1、模板对应正则表达式,正则表达式中有几个(),一般情况下就需要写几个$$,注意$$与$$之间的连接符号;

           2、匹配数字对应满足正则表达式所获取的数据,当变量名对应唯一值,输入0或1都可以,当变量名对应n值,那么就需要用-1,此时引用变量时,格式就变为${变量名_n}

### JMeter正则表达式的使用 #### 定义与功能 JMeter正则表达式提取器用于从服务器响应数据中抽取特定的信息。这使得测试人员可以动态获取并利用这些信息来构建后续请求,从而实现更灵活的功能测试和性能评估[^1]。 #### 配置方法 为了配置正则表达式提取器,在线程组下选择要应用此组件的采样器(Sampler),右键点击并添加“Post Processors -> Regular Expression Extractor”。在此处设置参数如下: - **名称**: 提取器的名字。 - **应用于**: 可选范围包括主样本、子样本或两者皆可。 - **字段到检查**: 响应体或其他部分如头部等。 - **正则表达式**: 编写匹配模式以定位所需的数据片段。 - **模板**: 指定如何处理捕获群组;默认为 `$` 表示第一个括号内的内容。 - **匹配编号 (0=随机)**: 当存在多个匹配项时指定哪一个被采用; `0` 则意味着任意一个都会被选取。 - **默认值**: 如果没有任何匹配,则返回该预设字符串作为变量的结果。 #### 实际案例分析 假设目标是从 HTML 页面中的链接标签 `<a href="...">...</a>` 抽取出 URL 地址。此时使用的正则表达式可能是这样的形式: ```regex <a\s+href=(['"])(.*?)\1.*?> ``` 这里的关键在于第二对圆括号 `(.*?)` ,它用来捕捉实际的URL路径而不含引号。因此,“模板”应该保持不变即 `$2$` 来指向第二个分组的内容[^2]。 ```python import re html_content = '<div><a href="/example-page.html">Example Page</a></div>' pattern = r'<a\s+href=(["\'])(.*?)\1.*?>' matches = re.findall(pattern, html_content) for match in matches: print(match[1]) # 输出 /example-page.html ``` #### 参数化后的重用 一旦成功设置了上述提取逻辑之后,就可以通过 `${variable_name}` 这样的方式在整个脚本里调用所获得的值了。比如如果定义了一个名为 `urlPath` 的变量存储抓取来的链接地址,那么可以在 HTTP 请求中这样引用 `${urlPath}` 就能自动填充之前解析出来的具体网址[^3]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值