无法从jMeter中的Mail Reader中使用RegEx提取变量

时间:2017-01-27 08:14:50

标签: regex jmeter

我有以下设置:

  • 螺纹
    • 邮件阅读器采样器
      • 正则表达式提取器
      • 查看器
    • HTTP Sampler
    • 查看器

我尝试做的是检索电子邮件,从中提取一个值,然后在下一个请求中将其作为变量传递。

问题是检索到的电子邮件的格式如下:

  • 邮件阅读器采样器
    • 消息1
      • 第0部分
      • 第1部分

我瞄准的信息位于"第1部分"。这导致我的问题... jMeter无法提取它,因为它是一个子子样本。 如果所需的变量位于"消息1"部分,然后jMeter正在提取值而没有任何问题,然后将其传递给下一个请求。

我的RegEx设置是"适用于主样本和子样本",所以从理论上讲,这不应该是一个问题..但显然是。

当检索到的电子邮件包含多个子部分时,如何让jMeter提取所需值?

1 个答案:

答案 0 :(得分:0)

不幸的是,正则表达式提取器仅处理直接子样本,因此在多部分电子邮件的情况下,您将只能提取This is a multipart message in MIME format.行,这不是很有用。

我建议您添加Beanshell PostProcessor作为Mail Reader Sampler的子项,但之前使用正则表达式提取器并使用以下代码:

import org.apache.jmeter.samplers.SampleResult;

StringBuilder response = new StringBuilder();

for (SampleResult message : prev.getSubResults()) {
    response.append(message.getResponseDataAsString());
    for (SampleResult part : message.getSubResults()) {
         response.append(part.getResponseDataAsString());
    }
}

prev.setResponseData(response.toString(), "UTF-8");

上面的代码将遍历所有消息及其部分,提取响应数据并用这些消息的实际内容替换Mail Reader Sampler的默认响应数据X messages found,这样您就可以了能够使用正则表达式提取器进行关联。

有关在JMeter测试中使用脚本的全面信息,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component文章。