【问题标题】:Jmeter - how to output extra info (jmeter variable(s)) on Response Assertion failureJmeter - 如何在响应断言失败时输出额外信息(jmeter 变量)
【发布时间】:2016-10-12 16:11:02
【问题描述】:

所以我在主样本上添加了一个响应断言并将其应用于该样本和所有子样本。我断言它是一个好的响应代码,因此断言将失败响应代码,如 4xx 和 5xx 错误。 我很好奇,当在我的加载脚本中创建新用户时,我将 user_id 存储在 jmeter 变量中(在 jmeter 中可用于整个线程/采样器/会话)...无论如何我可以通过输出该变量所有采样器请求的 Beanshell仅当出现错误时。

在创建用户后,我已经为所有请求输出了 user_id,如下所示:

log.info("user_id:"+ vars.get("user_id") ); //gotten via JSON Path PostProcessor earlier when creating User.

但我想为所有响应断言错误输出类似的内容:

log.info("Response Assertion failure for user_id:"+ vars.get("user_id") );

也许是一个“BeanShell 后处理器”,但真的不知道如何将它挂钩到 1 响应断言中,它会检查整个线程组,因此它只会在断言失败时动态地将 user_id 输出到日志中。

是否存在最坏的情况,我无法为线程组“顶级”的所有请求执行此操作...但也许我必须在每个请求上添加响应断言,只有这样我才能以某种方式动态添加输出? (但如果有一种方法可以为所有请求执行一次会很酷/更好) 欢迎任何想法,谢谢!

【问题讨论】:

    标签: jmeter


    【解决方案1】:
    1. 您不需要响应断言来检查 4xx 和 5xx HTTP 响应代码,JMeter 足够智能,可以自动将代码高于 400 的 HTTP 响应标记为失败。
    2. 您可以添加Beanshell Listener 以使用以下代码在采样器故障日志中打印一些内容:

      if (!sampleResult.isSuccessful()) {
          log.info("Response Assertion failure for user_id:"+ vars.get("user_id") );
      }
      

    其中sampleResult 是SampleResult 类实例的简写,该类实例包含父级先前的采样器结果。有关所有可用的方法和字段,请参阅 JavaDoc。

    根据您放置 Beanshell 侦听器的位置,其范围会有所不同。

    • 如果你把它和你的采样器放在同一级别 - 它将在 每个 采样器之后执行,即 Sampler1 和 Sampler 2

    • 如果您将其作为 Sampler1 的子级 - 它将仅应用于 Sampler1

    查看How to Use BeanShell: JMeter's Favorite Built-in Component 文章,了解有关在 JMeter 测试中使用 Beanshell 测试元素的更多信息。

    【讨论】:

    • 感谢您的照片,这是一个很好的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多