【问题标题】:JMeter Mail Reader Sampler extract from SubsampleJMeter Mail Reader Sampler 从 Subsample 中提取
【发布时间】:2017-04-24 11:54:54
【问题描述】:

我试图通过Regular Expression ExtractorMail Reader Sampler 的子子样本中提取用户ID,但没有成功。

我不明白为什么Regular Expression Extractor 不会检查我的Mail Reader Sampler 的子样本。任何提示我如何提取用户 ID?

我的邮件阅读器采样器

我对邮件阅读器采样器的回应。 Sub-Sub-Sample 实际上包含 html 格式的电子邮件。

我的正则表达式提取器

电子邮件包含这样的部分,其中包含包含用户 ID 的激活链接:

<span class="link-ref"><a href="https://domain.local:443/account/activate?userId=La21BhmS&token=FefcOrcd7g">https://domain.local:443/account/activate?userId=La21BhmS&token=FefcOrcd7g</a></span>

【问题讨论】:

  • 试试userId=([^&amp;\n]+)
  • @WiktorStribiżew 感谢您的回复。您建议的正则表达式不起作用。正则表达式评估后仍未设置变量。在我看来,Regex Extractor 似乎更多地忽略了邮件阅读器的子样本。

标签: regex email jmeter


【解决方案1】:

正则表达式提取器不会比第一级子样本更深入(它只会查看Message 1),我建议使用JSR223 PostProcessor 迭代子结果并将结果附加到主采样器,以便您可以使用正则表达式提取器。

  1. 将 JSR223 PostProcessor 添加为 Mail Reader Sampler 的子项
  2. 确保将 JSR223 后处理器放在正则表达式提取器之前
  3. 确保您在“语言”下拉菜单中有groovy
  4. 将以下代码放入JSR223 PostProcessor“脚本”区域

    StringBuilder aggregateResult = new StringBuilder()
    prev.getSubResults().each {
        aggregateResult.append(it.getResponseDataAsString())
        it.getSubResults().each {
            aggregateResult.append(it.getResponseDataAsString())
            it.getSubResults().each {
                aggregateResult.append(it.getResponseDataAsString())        
            }   
        }
    }
    prev.setResponseData(aggregateResult.toString().getBytes())
    

    上面的代码会将最多 2 级的子采样器的结果附加到“Mail Reader Sampler”响应数据中,并且您的正则表达式将起作用。有关在 JMeter 中使用 Groovy 脚本的更多信息,请参阅 Groovy Is the New Black 文章。

【讨论】:

  • 效果很好。谢谢!我确实添加了另一层迭代,因为实际结果在第四个 subResults 内。我已更新您的答案以符合我的情况。
猜你喜欢
  • 1970-01-01
  • 2017-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 1970-01-01
相关资源
最近更新 更多