jMeter正则表达式
使用正则表达式搜索和操纵文本,基于模式。 JMeter 解释正则表达式的形式或模式被用于整个JMeter 测试计划,包括模式匹配软件 Apache Jakarta ORO.
使用正则表达式,我们当然可以节省大量的时间,并实现更大的灵活性,因为我们建立或加强一个测试计划。正则表达式提供了一种简单的方法来获取信息页面时,它是不可能或很难预测结果。
使用表达式的标准用法的例子是从服务器响应得到一个会话ID。如果服务器返回一个唯一的会话密钥,我们可以很容易地得到我们的负载脚本中使用表达式。
要使用正则表达式在测试计划,需要使用正则表达式提取在JMeter。可以将正则表达式在测试计划中的任何组件使用。
这是值得强调的包含和比赛之间的差异,如用于响应断言测试元件:
-
包含表示正则表达式匹配至少有一些目标的一部分,所以'字母'“包含”'ph.b.因为正则表达式匹配'phabe“。
-
匹配正则表达式匹配整个目标。因此,“alphabet”是“匹配”'*t'。
假设想匹配一个Web页的以下部分:
name="file" value="readme.txt"
要提取readme.txt。一个合适的正则表达式如:
name="file" value="(.+?)">
上述的特殊字符是:
-
( and ) - 这些匹配字符串括起来的部分要返回
-
. - 匹配任何字符
-
+ - 一次或更多次
-
? - 停止在第一个匹配成功时
CREATE JMeter测试计划
让我们了解在正则表达式中使用正则表达式提取后处理器的元素,编写一个测试计划。此元素会从当前页面使用正则表达式识别文字图案所需的元素,符合提取文本。
首先,我们将写人名单和他们的电子邮件ID是一个HTML页面。它部署到 tomcat 服务器。 HTML(index.htmll)上的内容如下:
<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 > Add> Threads(Users)> Thread Group.
接下来,添加一个采样器的HTTP请求,右键单击选择的测试计划 Add > Sampler > HTTP Request 并进入详情如下:
-
Name: Manage
-
Server Name or IP: localhost
-
Port Number: 8080
-
Protocol: We will keep this blank, which means we want HTTP as the protocol.
-
Path: jmeter/index.htmll
接下来,添加一个正则表达式提取。选择HTTP请求采样器(管理),右键点击 Add > Post Processor > Regular Expression Extractor.
上述快照详情如下:
Field | 描述 |
---|---|
Reference Name | 所提取的测试将被存储在其中的变量的名称(refname)。 |
Regular Expression | 对文本提取模式将匹配。文字组,将提取的字符'('和')'所包围。我们使用'+?'由<td..>..</ TD>标签包围的文本来表示一个单一实例。在我们的例子中的表达式为:<td id="ID">(+)</ TD> S*<td id="Name">(+)</ TD> S* |
Template | 提取的文本的每个组将被放置作为成员变量person,“(”和“)”括起来的模式各组的顺序之后。每个组存储为refname_g#,其中refname是你输入的字符串作为参考名称,#是组号。 $1$指组1,$2$是指第2组,$0$是指无论整个表达式匹配。在这个例子中,我们所提取的ID将被保持于Person_g1,而“名称”的值将被存储在Person_g2。 |
Match No. | 既然我们打算只提取第二次出现的这种模式,相匹配的第二项,我们使用值2。值0将随机匹配,而在foreach控制器需要使用负值。 |
Default | 如果该项目没有找到,这将是默认值。这是一个可选字段。可能会让它空白。 |
添加一个监听器来捕捉这个测试计划的结果。右键单击线程组选择 Add > Listener > View Results Tree 选项添加监听器。
保存测试计划为reg_express_test.jmx和运行测试。输出将是一个成功,因为在下面的快照: