【问题标题】:Jmeter - how to properly send request name and reason on assertion failureJmeter - 如何在断言失败时正确发送请求名称和原因
【发布时间】:2018-01-16 16:17:02
【问题描述】:

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

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

所以我添加了 if 控制器 条件如下:

${JMeterThread.last_sample_ok}

使用此脚本的 beanshell 预处理:

以及带有此正文的 SMTP 采样器:

和一个响应断言:

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

我必须在这种情况下收到电子邮件,但正文实际上是这样的:

${正文}

这是断言结果:

我做错了什么?

如何获得我需要的东西?

谢谢

【问题讨论】:

  • 您的中频控制器背后的逻辑是什么?因为我看到它的方式,如果最后一个样本没问题,脚本只会发送一封电子邮件,因此断言中不会有数据将其添加到变量“body”中,因为采样器没有失败。

标签: java email jmeter automated-tests


【解决方案1】:

您的 prev 变量未在 Beanshell PreProcessor 中定义(它只存在于 PostProcessor 和 Listener,我建议使用 ctx.getPreviousResult() 而不是 ctx 代表 JMeterContextService 实例。

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


请注意,starting from JMeter 3.1 it is recommended to use Groovy 适用于任何形式的脚本,因此请考虑在下次有机会时迁移到 JSR223 PreProcessor 和 Groovy 语言。您甚至应该能够重用相同的代码,因为我没有在其中看到任何特定于 Beanshell 的功能。有关 JMeter 中 Groovy 脚本的更多信息,请参阅 Apache Groovy - Why and How You Should Use It 文章。

【讨论】:

  • 感谢 Dmitri,请问您使用 prev 变量是什么意思?
  • 您的prev.getAssertionResults() 应替换为ctx.getPreviousResult().getAssertionResults()
  • 我在电子邮件正文中得到一个空值
  • 您必须移动您的 post 请求并将其放在 if 控制器之前,并将 SMTP 采样器单独留在 if 控制器中
【解决方案2】:

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

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

如果采样器失败,这将使您的脚本发送一封电子邮件,并且您将拥有保存失败消息的 body 变量。

【讨论】:

  • 用这个条件调整脚本!${JMeterThread.last_sample_ok},脚本根本不运行
  • 为了清楚起见,如果 HTTP 请求 - get -post 失败,您希望脚本发送电子邮件,对吗?你启用了这个采样器吗?
  • 是的,我要实现,请看我下一次更新
  • 我仍然看到 HTTP 请求 - GET - 帖子采样器被禁用
  • 我认为这无关紧要,只要我想测试另一个请求(发布文章)
猜你喜欢
  • 2016-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多