【问题标题】:Using BeanShell Assertion for saving failed response使用 BeanShell 断言保存失败的响应
【发布时间】:2016-12-19 17:42:10
【问题描述】:

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

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));
    }
  }
}

测试计划本身如下所示:

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

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

【问题讨论】:

    标签: debugging jmeter load load-testing


    【解决方案1】:

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

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

    同样根据你的脚本,DEBUG 的值必须是true,但是正如你所说,你没有将它设置为true(空字符串将被Java的valueOf解析为false )。所以改成

    Name: DEBUG 
    Value: true
    

    BeanShell Listener 的脚本如下所示:

    if (Boolean.valueOf(vars.get("DEBUG"))) {
      for (a: sampleResult.getAssertionResults()) {
        if (a.isError() || a.isFailure()) {
          log.error(sampleResult.getThreadName() + ": " 
                    + sampleResult.getSampleLabel() + ": Assertion failed for response: " 
                    + sampleResult.getResponseDataAsString());
        }
      }
    }
    

    选项 3 是保留原始解决方案,然后您需要修复变量分配(正如我之前提到的)。

    【讨论】:

      【解决方案2】:

      我宁愿让 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
        

      上述属性可以放入user.properties文件(位于JMeter的“bin”文件夹中,需要重新启动JMeter才能获取更改)或者您可以通过-J传递它们命令行参数如:

      jmeter -Jjmeter.save.saveservice.output_format=xml -Jjmeter.save.saveservice.response_data.on_error=true ....
      

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

      【讨论】:

      • 谢谢,我怎样才能同时保存请求而不仅仅是响应?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-23
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      相关资源
      最近更新 更多