使用BeanShell Assertion保存失败的响应

时间:2016-12-18 07:39:23

标签: debugging jmeter load load-testing

我尝试将失败请求的响应保存到日志中但未成功。 我有HTTP请求,每个请求都有自己的响应断言,并且偶尔通过我的负载测试,响应不满足响应断言的要求,所以我想失败它。 我尝试将此代码添加到此post后的BeanShell Assertion

if (Boolean.valueOf(vars.get("DEBUG"))) {
  for (a: SampleResult.getAssertionResults()) {
    if (a.isError() || a.isFailure()) {
      log.error(Thread.currentThread().getName()+": "+SampleLabel+": Assertion failed for response: " + new String((byte[]) ResponseData));
    }
  }
}

测试计划本身如下:

enter image description here

在用户定义的变量中,我添加了以下内容: 姓名:DEBUG 价值:(无)

我通过非GUI模式运行此程序 - cmd并且故意使响应失败(响应断言失败)但我没有将任何错误响应记录到我的日志文件中。 我究竟做错了什么? 感谢

2 个答案:

答案 0 :(得分:2)

首先,如果你的目标只是保存失败的回复,再加上断言结果,你就不需要任何自定义代码。您可以添加Simple Data Writer配置如下:

enter image description here

选项2:如果要将响应写入日志文件,则需要自定义脚本。但在这种情况下,我建议使用BeanShell Listener(与断言和其他对象不同,所有线程只有1个侦听器实例,所以它更经济,更少机会在日志写作中制造瓶颈。)

同样根据您的脚本,DEBUG的值必须为true,但正如您所提到的,您没有将其设置为true(空字符串将被解析为{{ 1}}由Java' s false)完成。所以把它改成

valueOf

以下是BeanShell Listener脚本的外观:

Name: DEBUG 
Value: true

选项3是保留原始解决方案,然后您需要修复变量赋值(如前所述)。

答案 1 :(得分:1)

我宁愿让JMeter自动执行此操作,这是几个属性的问题,即:

  1. 首先,您需要告诉JMeter以XML格式存储其结果:

    jmeter.save.saveservice.output_format=xml
    
  2. 其次,您可以修改以下属性值以配置JMeter将断言失败消息和数据存储到.jtl结果文件中

    jmeter.save.saveservice.assertion_results_failure_message=true
    jmeter.save.saveservice.assertion_results=all
    
  3. 可能是最有用的选项:只需保存失败采样器的响应数据:

    jmeter.save.saveservice.response_data.on_error=true
    
  4. 上述属性可以放入 user.properties 文件(位于JMeter的“bin”文件夹中,需要重新启动JMeter才能选择更改)或者您可以通过{{1命令行参数如:

    -J

    有关使用JMeter属性调整JMeter配置的各个方面的更多信息,请参阅Apache JMeter Properties Customization Guide