Java Jmeter-如何在断言失败时正确发送请求名称和原因

Java Jmeter-如何在断言失败时正确发送请求名称和原因,java,email,jmeter,automated-tests,Java,Email,Jmeter,Automated Tests,我是jmeter的新手(我使用的是3.3版),我创建了一个测试计划,目标是在断言失败时发送一封电子邮件 在这封电子邮件中,我想添加一些关于请求名称及其原因的信息 因此,我在以下条件下添加了和if controller: ${JMeterThread.last_sample_ok} 使用此脚本的beanshell预处理: 以及具有此主体的SMTP采样器: 和响应断言: 我想在任何时候收到一封电子邮件,只要它符合响应代码=500的条件和上述信息 我在这种情况下收到了电子邮件,但身体信息是这

我是jmeter的新手(我使用的是3.3版),我创建了一个测试计划,目标是在断言失败时发送一封电子邮件

在这封电子邮件中,我想添加一些关于请求名称及其原因的信息

因此,我在以下条件下添加了和if controller

${JMeterThread.last_sample_ok}

使用此脚本的beanshell预处理:

以及具有此主体的SMTP采样器:

和响应断言:

我想在任何时候收到一封电子邮件,只要它符合响应代码=500的条件和上述信息

我在这种情况下收到了电子邮件,但身体信息是这样的:

${body}

这是断言结果:

我做错了什么

如何得到我需要的


谢谢

如果最后一个采样器正常,脚本将发送一封电子邮件,因此断言也正常,因此
body
变量将不包含任何值

只需将if语句调整为
${JMeterThread.last_sample_ok}
,然后将HTTP采样器
HTTP请求-POST/articles
移到if控制器上方


这将使您的脚本在采样器失败时发送一封电子邮件,您的
正文将包含失败消息。

您的
prev
变量未在Beanshell预处理器中定义(它仅存在于后处理器和侦听器中,我建议使用
ctx.getPreviousResult()
而不是
ctx
代表的位置

您还需要启用
HTTP请求GET-posts
,因为这将是您感兴趣的“以前的结果”



请注意,对于任何形式的脚本,请考虑在下一个可用的机会迁移到Groovy语言。您甚至应该能够重新使用相同的代码,因为我在其中没有看到任何BeeS壳特定的特性。请参阅文章以了解JMt.中的Groovy脚本编写的更多信息。

您的IF控制器背后的逻辑是什么?因为在我看来,脚本只会在最后一个示例正常的情况下发送电子邮件,因此断言中不会有数据将其添加到变量“body”,因为采样器没有失败。使用此条件调整脚本!${JMeterThread.last_sample_ok},该脚本根本没有运行只是为了澄清,如果HTTP请求-获取-发布失败,您希望该脚本发送电子邮件,对吗?您启用了该采样器吗?是的,我想实现它,请参阅我的下一次更新。我仍然看到HTTP请求-获取-发布采样器是禁用的。我认为这与我要测试其他请求无关uest(博文)谢谢Dmitri,请问你对prev变量的意思是什么?你的
prev.getAssertionResults()
应该替换为
ctx.getPreviousResult().getAssertionResults())
我在电子邮件正文中得到一个空值。您必须移动post请求并将其放在if控制器之前,并将SMTP采样器单独留在if控制器中