Debugging 使用BeanShell断言保存失败的响应

Debugging 使用BeanShell断言保存失败的响应,debugging,jmeter,load,load-testing,Debugging,Jmeter,Load,Load Testing,我试图将失败请求的响应保存到日志中,但未成功。 我有HTTP请求,每个请求都有自己的响应断言,有时通过负载测试,响应不符合响应断言的要求,所以我希望失败。 我尝试在下面的BeanShell断言中添加此代码: 测试计划本身如下所示: 在用户定义的变量中,我添加了以下内容: 名称:调试 价值:(无) 我通过非GUI模式-cmd运行这个程序,故意使响应失败(响应断言失败),但我没有将任何错误响应记录到日志文件中。 我做错了什么? 首先,如果您的目标是只保存失败的响应以及断言结果,那么您不需要任何自定

我试图将失败请求的响应保存到日志中,但未成功。 我有HTTP请求,每个请求都有自己的响应断言,有时通过负载测试,响应不符合响应断言的要求,所以我希望失败。 我尝试在下面的
BeanShell断言中添加此代码:

测试计划本身如下所示:

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

我通过非GUI模式-cmd运行这个程序,故意使响应失败(响应断言失败),但我没有将任何错误响应记录到日志文件中。 我做错了什么?
首先,如果您的目标是只保存失败的响应以及断言结果,那么您不需要任何自定义代码。您可以按如下方式添加配置:

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

同样根据您的脚本,
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:如果要将响应写入日志文件,则需要自定义脚本。但在这种情况下,我建议使用(与断言和其他对象不同,所有线程只有一个侦听器实例,因此更经济,在日志写入时造成瓶颈的机会也更少)

同样根据您的脚本,
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是保留原始解决方案,然后需要修复变量赋值(正如我前面提到的)

我宁愿让JMeter自动完成这项工作,这是一个两个属性的问题,即:

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

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

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

    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配置的各个方面的更多信息,请参阅。我宁愿让JMeter自动完成这项工作,这是几个属性的问题,即:

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

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

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

    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配置的各个方面的更多信息,请参见

    谢谢,我如何保存请求而不仅仅是响应?谢谢,我如何保存请求而不仅仅是响应?