如何使用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
相关产品推荐
相关产品推荐

