-
jmeter正则表达式
-
包含意味着正则表达式与目标的至少部分匹配,因此"alphabet""包含“"ph.b." 因为正则表达式与子string"phabe"匹配。
-
匹配意味着正则表达式匹配整个目标。因此,"字母"与"al。* t"匹配。
-
(和) - 这些包含要返回的匹配字符string的部分
-
。 - 匹配任何字符
-
+ - 一次或多次
-
? - 第一次匹配成功时停止
-
name - 管理
-
服务器名称或IP - localhost
-
港口号 - 8080
-
协议 - 我们将保持空白,这意味着我们希望HTTP作为协议。
-
Path - jmeter / index.html
正则表达式用于根据模式搜索和操作文本。JMeter通过包含模式匹配软件Apache Jakarta ORO来解释在JMeter测试计划中使用的正则表达式或模式的形式。
通过使用正则表达式,我们可以节省大量时间,并在创建或增强测试计划时实现更大的灵活性。正则表达式提供了一种简单的方法来从页面获取信息,当不可能或很难预测结果时。
使用表达式的标准使用示例是从服务器响应获取会话ID。如果服务器返回唯一的会话密钥,我们可以使用我们的加载脚本中的表达式轻松获取它。
要在测试计划中使用正则表达式,您需要使用JMeter的正则表达式提取器。您可以在测试计划中的任何组件中放置正则表达式。
值得强调的是包含和匹配之间的差异,如Response Assertion测试元素所使用的 -
假设您要匹配网页的以下部分 -
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服务器上时,此页面将如下图所示:
在我们的测试计划中,我们将在上面的人员列表页面中选择人员表的第一行中的人员。要捕获此人的ID,请先确定我们将在第二行找到该人的模式。
从下面的快照中可以看出,第二个人的ID由<td id =“ID”>和</ td>包围,它是具有此模式的第二行数据。我们可以使用它来匹配我们要从中提取信息的确切模式。当我们要从该页面中提取两条信息时,人员ID和个人姓名,字段定义如下:
启动JMeter,添加线程组测试计划>添加>线程(用户)>线程组。
下一步添加一个采样器HTTP请求,选择测试计划,右键单击Add> Sampler> HTTP Request,输入详细信息如下图所示:
接下来,添加一个正则表达式提取器。选择HTTP请求采样器(管理),右键单击添加>后处理器>正则表达式提取器。
下表提供了上述截图中使用的字段的描述 -
范围 | 描述 |
---|---|
参考名称 | 提取的测试将被存储的变量的名称(refname)。 |
正则表达式 | 要提取的文本将匹配的模式。将提取的文本组由字符"("和")"包围。我们使用"。+?" 以表示由<td ..> .. </ td>标签包围的文本的单个实例。在我们的示例中,表达式是 - <td id =“ID”>(+?)</ td> s * <td id =“Name”>(+?)</ td> s * |
模板 | 每组提取的文本按照“("和")"所包含的每个模式组的顺序放置为变量Person的成员。每个组存储为refname_g#,其中refname是您输入的字符string作为参考名称,#是组号。$ 1 $表示组1,$ 2 $表示组2等。$ 0 $表示整个表达式匹配的任何值。在这个例子中,我们提取的ID保存在Person_g1中,而Name值存储在Person_g2中。 |
比赛号 | 因为我们只计算出第二次出现这种模式,与第二个志愿者匹配,所以我们使用值2.值0将进行随机匹配,而负值必须与ForEach控制器一起使用。 |
default | 如果没有找到该项,这将是默认值。这是一个可选字段。你可以把它留空。 |
添加一个监听器来捕获此测试计划的结果。右键单击线程组,然后选择添加>侦听器>查看结果树选项以添加侦听器。
将测试计划保存为reg_express_test.jmx并运行测试。输出将成功,如下面的屏幕截图所示 -