jMeter-正则表达式

Python/Java学习交流群:369606713


jMeter-正则表达式

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

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

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

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

值得强调的是包含和匹配之间的区别,如在“响应声明”测试元素上使用的

  • contains 意味着正则表达式至少匹配目标的某些部分,因此“字母”“包含”“ ph.b”。因为正则表达式与子字符串“ phabe”匹配。

  • match 表示正则表达式匹配整个目标。因此,“字母”与“ al。* t”“匹配”。

假设您要匹配网页的以下部分

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

并且您要提取readme.txt。合适的正则表达式为

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

上面的特殊字符是

  • ( and ) − these enclose the portion of the match string to be returned

    • . − match any character
  • + − one or more times

  • ? − stop when first match succeeds

创建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服务器上时,此页面将类似于以下屏幕截图所示

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

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

启动JMeter,添加线程组Test Plan→添加→线程(用户)→线程组

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

  • 名称 -管理

  • 服务器名称或IP-本地主机

  • 端口号 -8080

  • 协议 -我们将其保留为空白,这意味着我们希望使用HTTP作为协议。

  • 路径 -jmeter / index.html

接下来,添加一个正则表达式提取器。选择HTTP请求采样器(管理),右键单击添加→后处理器→正则表达式提取器。

下表提供了上述屏幕快照中使用的字段的描述

序号 栏位说明
1

参考名称

提取的测试将存储在其中的变量的名称(refname)。

2

正则表达式

要提取的文本所匹配的模式。将提取的文本组用字符“(”和“)”括起来。我们使用'。+?' 表示由<td ..> .. </ td>标记括起来的单个文本实例。在我们的示例中,表达式为-<td id =“ ID”>(+?)</ td> \ s * <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

默认

如果找不到该项目,则它将是默认值。这是个可选的选项。您可以将其留空。

添加一个侦听器以捕获此测试计划的结果。右键单击线程组,然后选择添加→侦听器→查看结果树选项以添加侦听器。

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