一、 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}

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐