Jmeter-仅在请求或断言失败时打印日志

时间:2018-10-25 16:24:39

标签: jmeter jsr223

以下是JSR223断言常规代码,我们仅在请求或断言失败或两者均失败时才尝试记录该代码。

import groovy.json.JsonSlurper

String jsonString = SampleResult.getResponseDataAsString();
String StartProcessResponseCode= SampleResult.getResponseCode();
def tokenJSON = new JsonSlurper().parseText(jsonString)

if (!SampleResult.isSuccessful()) {
 log.info("Failed Response Data---------"+SampleResult.getResponseDataAsString())
 }

String status= tokenJSON.status

assert StartProcessResponseCode.equals("200")
assert "SUCCESS".equals(status)

for (a in SampleResult.getAssertionResults()) {
  if (a.isError() || a.isFailure()) {
  //log.error(Thread.currentThread().getName()+": "+SampleLabel+": Assertion 
  failed for response: " + new String((byte[]) ResponseData));
  log.info("Failed Assertion Message---------------------"+AssertionResult.getFailureMessage());
  log.info("Failed Response Data---------------------"+SampleResult.getResponseDataAsString())
}

}

但是在这种情况下,错误不会记录任何断言失败

1 个答案:

答案 0 :(得分:1)

首先,如果要捕获有关断言的所有信息,则应改用JSR223 Listener,因为在断言后执行JMeter Test Elements Execution Order侦听器,这样可以保证您将应用所有断言在您的支票之前。

关于问题本身,我希望您的断言逻辑在未处理AssertionErrorassert语句上失败,并且测试根本无法进行

请参见以下示例:

log.info('Assertion Start')
assert 'foo'.equals('bar')
log.info('Assertion Ended')

根据您实现的内容,您应该在 jmeter.log 文件中看到Assertion Ended消息,但是不会发生,因为assert失败

enter image description here

如果您修改代码以捕获AssertionError,例如:

log.info('Assertion Start')
try {
    assert 'foo'.equals('bar') : "Failure here"
}
catch (AssertionError e) {
    log.info(e.getMessage())
}
log.info('Assertion Ended')

您将同时看到AssertionError messageAssertion Ended声明

JMeter Assertion Groovy

有关在JMeter中使用JSR223断言的更多信息,请参见Scripting JMeter Assertions in Groovy - A Tutorial