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

如何使用Groovy Script断言被调用TestCase中所有TestStep是否失败

问题解决方案

核心原因

  • Groovy Script类型的TestStep本身没有assertionStatus属性,原有逻辑直接跳过了对这类步骤的校验
  • 原有代码each循环内的return仅能终止当前次遍历,无法提前终止整体循环,会出现后续步骤执行状态覆盖前面失败状态的逻辑漏洞
  • Groovy Script步骤内部断言失败时,其status属性会自动标记为FAILED,可以通过该属性判断执行结果

修正后代码

// 获取被调用项目的测试步骤列表
def assertFinishedStatus = testRunner.testCase.testSuite.project.workspace.getProjectByName(projectName).getTestSuiteByName(testSuitetName).getTestCaseByName(testCaseName).getTestStepList()
def moduleStatus = true;

// 遍历所有测试步骤校验状态
assertFinishedStatus.each { step ->
    // 先校验步骤本身的执行状态,只要执行失败直接标记
    if (step.status == com.eviware.soapui.model.testsuite.TestStepStatus.FAILED) {
        log.info "TestStep: ${step.name}   - - - - - - - - - - - -   Status: FAILED"
        moduleStatus = false
        // 终止循环,无需继续校验后续步骤
        return
    }
    // 针对带assertionStatus属性的步骤,额外校验断言状态
    else if(step.metaClass.hasProperty(step,'assertionStatus')){
        if(step.assertionStatus == com.eviware.soapui.model.testsuite.AssertionStatus.FAILED){
            log.info "TestStep: ${step.name}   - - - - - - - - - - - -   Status: FAILED"
            moduleStatus = false
            return
        }
    }
    // 所有校验通过的步骤打印正常日志
    log.info "TestStep: ${step.name}   - - - - - - - - - - - -   Status: OK!"
}

assert moduleStatus : "被调用测试用例存在执行失败的步骤,请检查上述日志"

逻辑说明

  • 优先校验所有测试步骤的基础执行状态,覆盖Groovy Script类步骤内部断言失败的场景
  • 保留原有对assertionStatus属性的校验逻辑,兼容接口请求类步骤的断言校验需求
  • 只要检测到任意步骤失败,立刻终止遍历并标记整体状态为失败,避免状态被后续步骤覆盖
  • 最终断言增加失败提示信息,方便快速定位问题

内容的提问来源于stack exchange,提问作者Arah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:42:02