首页 > 解决方案 > 在 Jmeter 中使用动态输入的正则表达式(正则表达式提取器)

问题描述

我有一个关于 Jmeter 正则表达式提取器的查询。我正在尝试实现 1 个场景,但无法做到这一点。以下是详细信息:

要求 :

在 Jmeter 中,我定义了用户定义的变量:String VAR = KZ

现在我正在尝试使用正则表达式提取器,以便从 HTML 响应中,正则表达式将匹配 HTML 中的 VAR 值(定义如下)并将获取跨度类名称,因为我需要为 KZ 设置复选框。

要求是通过用户定义的变量来处理复选框 ON 功能,这意味着我不想基于用户定义的变量硬编码类名(这将是 td 值,即在本例中 KZ)我必须使用 Regex Extractor 获取类名. 有人可以帮助如何进行吗?

下面是 HTML 代码:

<tr class="trClass">
<td style="width: 13.5%;">
<span class="checkbox"><input id="ctl00ctl94" type="checkbox" name="$ctl95$" 
 onclick="return validatecheck();" /></span>
</td>
<td style="width: 41.2%;"> KZ </td>
<td style="width: 0%; display: none;"> 5581357 </td>
<td style="width: 32%;"> 06/03/2018 2:22:38 PM </td>
</tr>
<tr class="trClass">
<td style="width: 13.5%;">
<span class="checkbox"><input id="ctl00ctl95" type="checkbox" name="$ctl95$" 
onclick="return validatecheck();" /></span>
</td>
<td style="width: 41.2%;"> TM </td>
<td style="width: 0%; display: none;"> 5581358 </td>
<td style="width: 32%;"> 06/03/2018 2:22:38 PM </td>
</tr>
<tr class="trClass">
<td style="width: 13.5%;">
<span class="checkbox"><input id="ctl00ctl96" type="checkbox" name="$ctl96$" 
onclick="return validatecheck();" /></span> </td>
<td style="width: 41.2%;">TR </td>
<td style="width: 0%; display: none;"> 5581359  </td>
<td style="width: 32%;"> 06/03/2018 2:22:38 PM  </td>
</tr>

标签: jmeter

解决方案


使用正则表达式解析 HTML并不是最好的主意,因为:

  • 它们很难开发和/或维护
  • 它们对标记更改非常敏感,因此很脆弱,即如果属性的顺序发生更改或某些内容将进入新行 - 它只会破坏您的正则表达式

所以我建议使用另一个可以直接使用 DOM 的后处理器,例如XPath Extractor

将获取KZ文本上方 span 的类名的相关 XPath 查询将类似于:

//td[contains(text(),'KZ')]/preceding::*/span/@class

JMeter 查看结果树

当然你可以KZ用 JMeter 变量参考代替,即

//td[contains(text(),'${VAR}')]/preceding::*/span/@class

但是,您将无法使用View Results Tree侦听器的 XPath Tester 模式测试您的查询,您将不得不使用Debug Sampler来可视化结果变量。

查看XPath 教程在 JMeter 中使用 XPath 提取器指南以熟悉 XPath 语言。


另请注意,根据JMeter 项目主页

JMeter 不是浏览器,它在协议级别工作。就 Web 服务和远程服务而言,JMeter 看起来像一个浏览器(或者更确切地说,是多个浏览器);但是 JMeter 并不执行浏览器支持的所有操作。特别是,JMeter 不执行HTML 页面中的 Javascript。

所以我不相信获取跨度类名会解决你的问题,很可能你需要发送底层输入名称作为参数,所以你应该寻找

//td[contains(text(),'KZ')]/preceding::*/span/input/@name 

推荐阅读