Jmeter - 如何在响应断言失败时输出额外信息(jmeter变量)

时间:2016-10-12 16:11:02

标签: jmeter

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

我已经通过以下方式创建用户后立即为所有请求输出user_id:

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

但我想为所有Response Assertion错误输出类似的东西:

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

也许是'BeanShell后处理器'但是真的不知道如何将其挂钩到1响应断言中,检查整个线程组,这样只有在断言失败的情况下它才会动态输出user_id。

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

1 个答案:

答案 0 :(得分: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") );
    }
    
  3. 其中sampleResult是保持父前一个采样结果的SampleResult类实例的简写。有关所有可用的方法和字段,请参阅JavaDoc。

    根据您放置Beanshell Listener的位置,其范围将有所不同。

    • 如果你把它放在与你的采样器相同的水平上 - 它将在每个采样器之后执行,即Sampler1和Sampler 2

      Sampler1 and Sampler2

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

      Sampler1

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