Regex 无法从jMeter中的邮件读取器中提取带有正则表达式的变量

Regex 无法从jMeter中的邮件读取器中提取带有正则表达式的变量,regex,jmeter,Regex,Jmeter,我有以下设置: 线 邮件阅读器采样器 正则表达式提取器 观众 HTTP采样器 观众 我试图做的是检索一封电子邮件,从中提取一个值,然后在下一个请求中将其作为变量传递 问题是检索到的电子邮件采用以下格式: 邮件阅读器采样器 信息1 第0部分 第一部分 我的目标信息位于“第1部分”。这导致了我的问题…jMeter无法提取它,因为它是一个子样本。 如果所需变量位于“message1”部分,那么jMeter将毫无问题地提取该值,然后将其传递给下一个请求 我的正则表达式设置是“应用

我有以下设置:

  • 线
    • 邮件阅读器采样器
      • 正则表达式提取器
      • 观众
    • HTTP采样器
    • 观众
我试图做的是检索一封电子邮件,从中提取一个值,然后在下一个请求中将其作为变量传递

问题是检索到的电子邮件采用以下格式:

  • 邮件阅读器采样器
    • 信息1
      • 第0部分
      • 第一部分
我的目标信息位于“第1部分”。这导致了我的问题…jMeter无法提取它,因为它是一个子样本。 如果所需变量位于“message1”部分,那么jMeter将毫无问题地提取该值,然后将其传递给下一个请求

我的正则表达式设置是“应用于主样本和子样本”,所以理论上,这不应该是个问题,但显然是个问题


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

不幸的是,正则表达式提取器只处理直接的子样本,因此在多部分电子邮件消息的情况下,您只能提取
这是MIME格式的多部分消息。
行这不是很好有帮助

我建议在正则表达式提取器之前添加一个作为邮件阅读器采样器的子级,但要使用以下代码:

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测试中使用脚本的全面信息,请参阅本文

谢谢,我已经按照你描述的方式解决了我的问题