川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > 常见问题

接口性能测试—深入分析正则表达式提取器

作者:川石学院 日期:2021-07-29 14:34:41 点击数:

  接口性能测试JMeter正则表达式提取器的配置项中,"RegularExpression","Template"与"Match No."这三个配置项是比较难以理解的,本文针对这三个配置项设置进行深入分析,以便大家能够游刃有余的使用其功能.

  一、JMeter使用的正则表达式

  JMeter包含模式匹配工具Apache Jakarta ORO,对应的jar包在JMeter安装目录下的lib\oro-2.0.8.jar.

  Jakarta项目是在Apache软件基金会营运的开放源代码开发项目之一.开发着面向对象编程语言Java的程序库,框架等.其中的ORO是一组用于处理文本的Java类库,提供了与Perl5兼容的正则表达式功能.

接口性能测试—深入分析正则表达式提取器(图1)

  二、正则表达式提取器中的Regular Expression

  该配置项填写提取响应数据的正则表达式.

  JMeter匹配文本时可以选择不分组捕获与分组捕获两种方式.

  1、不分组捕获

  当"Template"配置相中填写的是"$0$"时,"Regular Expression"配置项中可以没有(),表示不分组,返回整个匹配项.

  如图所示:

  接口性能测试—深入分析正则表达式提取器(图2)

  2、分组捕获

  该配置项填写提取响应数据的正则表达式.

  JMeter匹配文本时可以选择不分组捕获与分组捕获两种方式.

  当"Template"配置相中填写的是"$0$"时,"Regular Expression"配置项中可以没有(),表示不分组,返回整个匹配项.

  当使用分组捕获时,"Regular Expression"配置项中则必须至少包含一组(),用以捕获一个或多个字符串.

  一组()称为一个捕获组,并且捕获组可以嵌套.

  每个捕获组都有一个编号与之对应,以方便引用捕获组匹配的内容.若有多个捕获组,编号规则为:

  按照"("从左至右出现的先后顺序,从1开始依次递增进行编号: 1,2,3, ...,n

  还有一个额外编号为0的捕获组,用于表示匹配到的整个正则表达式字符串.

  比如:

  •   正则表达式: ((\d{4})-(\d{2})-(\d{2}))\s((\d{2}):(\d{2}):(\d{2}))

  •   捕获组编号: 1 2 3 4 5 6 7 8

  •   响应文本: Today is 2019-06-25 14:29:30,Tuesday

  匹配后各捕获组对应的内容如下:

  •   g1:2019-06-25

  •   g2:2019

  •   g3:06

  •   g4:25

  •   g5:14:29:30

  •   g6:14

  •   g7:29

  •   g8:30

  •   g0:2019-06-25 14:29:30

  接口性能测试—深入分析正则表达式提取器(图3)

  三、正则表达式提取器中的Template

  "Template"用以设置捕获到的字符串以怎样的格式保存到JMeter变量中.

  可以原样保存,也可以格式化保存,下面讨论这两种情况.

  1、原样保存捕获组字符串

  在此项中,可以用$1$表示引用捕获组1中的内容,$2$表示引用捕获组2中的内容, ... ,$n$表示引用捕获组n中的内容,$0$表示引用正则表达式匹配后的整个字符串.

  接口性能测试—深入分析正则表达式提取器(图4)

  2、格式化保存捕获组字符串

  除了使用$n$引用捕获组的内容外,还可以加入需要的字符,将匹配的内容按照某种格式保存.  

接口性能测试—深入分析正则表达式提取器(图5)

  四、正则表达式提取器中的Match No.

  当正则表达式的捕获组匹配到多个满足条件的字符串时,会按照捕获的先后顺序依次对其进行编号:1,2,3,...,n

  可以使用编号来选择需要的字符串,1表示第一个匹配的字符串,2表示第二个匹配的字符串,...,依次类推.

  可以根据实际需要从中选择某个匹配项,所有匹配项或随机选择某个匹配项.

  1、选择某个匹配项

  设置"Match No."为i(i=1,2,3,...,n),i不能超过匹配的最大次数.

  比如,设置为2,表示取捕获组获取的第二个匹配项.

  接口性能测试—深入分析正则表达式提取器(图6)

  为了方便引用捕获的内容,JMeter提供了丰富的变量,可以根据实际情况选择所需的变量.

  假设:

  •   "Name of created variable"设置为refName

  •   "Match No."设置为i

  •   捕获组的个数为m

  各变量的具体含义如下:

  •   refName: 按照"Template"设置保存的模板值;

  •   refName_g: 捕获组的个数

  •   refName_g0: 正则表达式的值

  •   refName_gN: 捕获组N的第i个匹配项(N=1,2,3,...,m)

  下面是一个例子:

  接口性能测试—深入分析正则表达式提取器(图7)

  2、选择所有匹配项

  设置"Match No."为-I(I=1,2,3,...).

  JMeter只要检测到是负整数时则输出所有匹配项.

  接口性能测试—深入分析正则表达式提取器(图8)

  假设:

  •   "Name of created variable"设置为refName

  •   "Match No."设置为-I

  •   捕获组的个数为m

  •   捕获组匹配项的个数为n

  各变量的具体含义如下:

  •   refName: 在此种情况下始终显示为默认值(Default Value设置的值)

  •   refName_i: 捕获组第i个匹配项对应的模板值(i=1,2,3,...,n)

  •   refName_i_g: 捕获组第i个匹配项个数(i=1,2,3,...,n)

  •   refName_i_g0: 捕获组取第i个匹配项时正则表达式的值(i=1,2,3,...,n)

  •   refName_i_gj: 捕获组j(j=1,2,3,...,m)的第i(i=1,2,3,...,n)个匹

  配项

  下面是一个例子:

  接口性能测试—深入分析正则表达式提取器(图9)

  3、随机选择某个匹配项

  设置"Match No."为0.

  接口性能测试—深入分析正则表达式提取器(图10)

  此种情况下,各变量的具体含义与"14.4.1 选择某个匹配项"相同,不再说明.

       本章节讲解的“接口性能测试—深入分析正则表达式提取器”的内容就学习到这里,大家觉得文章有用的话记得每天来这里和小编一起学习涨薪技能哦。


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2021-07-29 14:34:41
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2021-07-29 14:34:41
  • 国外的月亮也不一定比国内测试猿的年薪美~2021-07-29 14:34:41
  • 建筑工程专业朱同学成功转行为软件测试人!2021-07-29 14:34:41
  • 财务管理专业转行软件测试月薪甩会计几条街!2021-07-29 14:34:41
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2021-07-29 14:34:41
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2021-07-29 14:34:41
  • 文科生转行软件测试照样拿下高薪15K!2021-07-29 14:34:41
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2021-07-29 14:34:41
  • 毕业1年,迷茫的他最终选择转行软件测试2021-07-29 14:34:41