jMeter - 正则表达式

正则表达式用于根据模式搜索和操作文本. JMeter通过包含模式匹配软件来解释整个JMeter测试计划中使用的正则表达式或模式的形式 Apache Jakarta ORO .

通过使用正则表达式,我们可以在创建或增强测试计划时节省大量时间并获得更大的灵活性.正则表达式提供了一种在不可能或很难预测结果时从页面获取信息的简单方法.

使用表达式的标准用法示例是从服务器获取会话ID响应.如果服务器返回一个唯一的会话密钥,我们可以使用加载脚本中的表达式轻松获取它.

要在测试计划中使用正则表达式,需要使用JMeter的正则表达式提取器.您可以将正则表达式放在测试计划的任何组件中.

值得强调包含匹配之间的区别,如用于Response Assertion测试元素 :

  • 包含表示正则表达式匹配于至少是目标的一部分,所以'alphabet'"包含"'ph.b.',因为正则表达式匹配子串'phabe'.

  • 匹配表示正则表达式与整个目标匹配.因此''字母'与'al.* t'"匹配".

假设您想匹配以下部分web-page :

name ="file"value ="readme.txt"

你想提取readme.txt.一个合适的正则表达式是 :

name = "file" value = "(.+?)">

上面的特殊字符是 :

  • () : 这些包含了要返回的匹配字符串部分

  • . : 匹配任何字符

  • + : 一次或多次

  • : 第一次匹配成功时停止

创建JMeter测试计划

让我们了解常规的使用正则表达式提取器中的表达式 - 后处理器元素,通过编写测试计划.此元素使用正则表达式从当前页面中提取文本,以标识所需元素符合的文本模式.

首先,我们编写一个HTML页面,其中包含人员列表及其电子邮件ID .我们将它部署到我们的tomcat服务器. html(index.html)的内容如下 :

<html>
   <head>
   </head>
	
   <body>
      <table style = "border: 1px solid #000000;">
		
         <th style = "border: 1px solid #000000;">ID</th>
         <th style = "border: 1px solid #000000;">name</th>
         <th style = "border: 1px solid #000000;">Email</th>
			
         <tr>
            <td id = "ID" style = "border: 1px solid #000000;">3</td>
            <td id = "Name" style = "border: 1px solid #000000;">Manisha</td>
            <td id = "Email" style = "border: 1px solid #000000;">manisha@domain.com</td>
         </tr>
			
         <tr>
            <td id = "ID" style = "border: 1px solid #000000;">4</td>
            <td id = "Name" style = "border: 1px solid #000000;">joe</td>
            <td id = "Email" style = "border: 1px solid #000000;">joe@domain.com</td>
         </tr>
			
      </table>
   </body>
</html>

在tomcat服务器上部署它时,此页面如下图所示 :

HTML Page

在我们的测试计划中,我们将选择人员表中第一行中的人物.上面的人名单页面.要捕获此人的ID,让我们首先确定我们将在第二行中找到该人的模式.

从下面的快照中可以看出,第二个人的ID被< td id ="ID">包围.和</td>,它是具有这种模式的第二行数据.我们可以使用它来匹配我们想要从中提取信息的确切模式.由于我们想要从这个页面提取两条信息,人员ID和人名,这些字段定义如下 :

HTML页面源代码

启动JMeter,添加一个线程组测试计划 → 添加 → 螺纹(用户) → 线程组.

接下来添加一个采样器HTTP请求,选择测试计划,右键单击添加 → 采样器 →  HTTP请求并输入详细信息,如下所示 :

  • 名称 : 号;管理

  • 服务器名称或IP :  localhost

  • 端口号 :  8080

  • 协议 : 我们将此保留为空白,这意味着我们需要HTTP作为协议.

  • 路径 :  jmeter/index.html

HTTP Request Sampler

接下来,添加一个正则表达式提取器.选择HTTP Request Sampler(管理),右键单击 Add → 后处理器 → 正则表达式提取器.

正则表达式提取器

下表提供了上述截图中使用的字段的说明 :

Sr.NoField&说明
1

参考名称

将提取测试的变量名称(refname).

2

正则表达式

要提取的文本将与之匹配的模式.将提取的文本组由字符'('和')'括起来.我们使用'.+?'来表示< td ..> ..</td>所包含的文本的单个实例.标签.在我们的例子中,表达式是 :  < td id ="ID">(+?)</td> \ * *< td id ="Name">(+?)</td> \ s *

3

模板

每组提取的文本作为变量Person的成员放置,遵循由'('和')'包围的每组模式的顺序.每个组都存储为refname_g#,其中refname是您输入的字符串作为引用名称,#是组号. $ 1 $表示组1,$ 2 $表示组2等.$ 0 $表示整个表达式匹配的任何内容.在此示例中,我们提取的ID保留在Person_g1中,而Name值存储在Person_g2中.

4

匹配编号

因为我们计划为了仅提取第二次出现的这种模式,匹配第二个志愿者,我们使用值2.值0将进行随机匹配,而负值需要与ForEach控制器一起使用.

5

默认

如果找不到该项,则这将是默认值.这是个可选的选项.你可以把它留空.

添加一个监听器来捕获这个结果测试计划.右键单击Thread Group并选择Add → 听众 → 查看结果树选项以添加侦听器.

将测试计划保存为 reg_express_test.jmx 并运行测试.输出将成功,如以下屏幕截图所示 :

正则表达式输出