如何通过Groovy记录SoapUI测试用例非断言失败的错误信息?
获取SoapUI测试用例非断言失败的错误信息
嘿,你已经搞定了断言失败的日志记录,接下来针对主动调用testRunner.fail()和脚本抛出异常这两种非断言失败场景,我们可以这样处理:
1. 捕获testRunner.fail()设置的失败信息
当你在脚本里调用testRunner.fail("自定义错误信息")时,这个错误内容会被存在测试用例的failedReason属性里,直接读取就能拿到:
// 获取当前测试用例的主动失败原因(来自testRunner.fail()) def caseFailedReason = testRunner.testCase.failedReason if (caseFailedReason) { log.info "测试用例主动失败原因: $caseFailedReason" }
2. 捕获脚本抛出的异常
如果脚本执行中抛出异常(比如空指针、文件读取失败等),需要用try-catch块包裹风险代码,在catch块里捕获完整的异常详情:
try { // 这里放可能抛出异常的代码,比如读取空文件、调用外部服务等 def emptyFile = new File("empty.txt").text if (emptyFile.isEmpty()) { testRunner.fail("Request File is empty") } } catch (Exception e) { // 记录异常的简短信息 log.error "脚本执行异常: ${e.message}" // 可选:记录完整的堆栈轨迹,方便排查问题 log.error "异常堆栈详情:\n${e.stackTrace.join('\n')}" // 也可以把异常信息设置为测试用例的失败原因 testRunner.testCase.setFailedReason("脚本执行异常: ${e.message}") }
3. 整合所有失败场景的日志
把上面的逻辑和你原来的断言日志代码结合,就能完整覆盖所有失败场景的信息记录:
// 1. 记录断言失败信息(你的原有代码) def soapStep = testRunner.testCase.testSteps["SoapRequestStep"] for( assertion in soapStep.assertionList ) { if(assertion.errors != null) { for( e in assertion.errors ) { log.info "断言失败: ${e.message}" } } } // 2. 记录testRunner.fail()的主动失败信息 def caseFailedReason = testRunner.testCase.failedReason if (caseFailedReason) { log.info "测试用例主动失败: $caseFailedReason" } // 3. 捕获并记录脚本异常(建议放在可能出错的脚本逻辑块中) try { // 示例:执行可能触发异常的操作 def someData = null someData.toString() // 此处会抛出空指针异常 } catch (Exception e) { log.error "脚本异常详情: ${e.message}" // 可选:将异常信息同步到测试用例的失败原因中 testRunner.testCase.setFailedReason("脚本异常: ${e.message}") }
小提醒:
testCase.failedReason仅存储通过testRunner.fail()设置的信息,或是SoapUI内部抛出的核心错误- 自定义脚本的异常必须显式用
try-catch捕获,否则异常会直接终止脚本,你可能来不及记录信息
内容的提问来源于stack exchange,提问作者Satya
相关产品推荐
相关产品推荐

