【问题标题】:regex using dynamic input in Jmeter(regex extractor)在 Jmeter 中使用动态输入的正则表达式(正则表达式提取器)
【发布时间】:2018-10-23 11:44:22
【问题描述】:

我对 Jmeter 正则表达式提取器有疑问。我正在尝试实现 1 个场景,但无法做到这一点。详情如下:

要求:

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

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

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

以下是 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


    【解决方案1】:

    Using regular expressions for parsing HTML 不是最好的主意:

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

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

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

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

    当然你可以用 JMeter 变量引用替换KZ,即

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

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

    查看 XPath TutorialUsing the XPath Extractor in JMeter 指南以熟悉 XPath 语言。


    还要注意根据JMeter project main page

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

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

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

    【讨论】:

    • 嗨 Dmitri,上述解决方案对我有用。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多