You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:09:41