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

在Katalon中使用Extent Reports时,如何在测试失败后继续执行

Katalon中Extent Reports标记失败后测试停止执行的解决办法

在Katalon中使用Extent Reports时,调用test.fail()标记测试失败后,代码中剩余的测试步骤会停止运行,当前每个测试用例包含6个测试步骤。

相关代码

switch (query) {
    Case 'Y':
        def ret2 = WebUI.getAttribute(findTestObject('...'), '...')
        def som = ret2.contains('...')
        println som

        if (som == true) {
            test.pass('...')} 
                else {
            String base64Code = CustomKeywords.'(...).screenshot.takeScreenshotBase64'()    
    test.fail(MediaEntityBuilder.createScreenCaptureFromBase64String(base64Code).build())
.info('...')}

break
    Case 'N':
        def ret3 = WebUI.getAttribute(findTestObject('...']), 'class')
        def som3 = ret3.contains('column-checkbox-disabled')
        print som3

        if (som3 == true) {
            test.pass('...')} 
                else {
                String base64Code = CustomKeywords.'(...).screenshot.takeScreenshotBase64'()        
    test.fail(MediaEntityBuilder.createScreenCaptureFromBase64String(base64Code).build()) .info('...')}

break

}

注:代码整体被try块包裹,外层还有for循环,extent.flush()是代码的最后一行(在两者之外),该逻辑针对每个要测试的权限重复了5次

问题原因

默认情况下test.fail()不会直接终止测试执行,但以下情况会导致后续步骤停止:

  1. 代码中存在未捕获的异常(比如截图方法抛出异常、语法错误)
  2. Katalon的测试执行上下文因断言失败被中断
  3. test.fail()后的链式调用(如.info())出现异常未处理

解决办法

1. 修复语法错误

原代码中存在括号不匹配问题:findTestObject('...']应改为findTestObject('...'),这类语法错误会直接抛出异常终止执行。

2. 捕获报告逻辑中的异常

将test.fail()及相关操作放在try-catch块中,避免报告过程中的异常阻断测试流程:

switch (query) {
    case 'Y': // Groovy中case需小写,大小写敏感
        def ret2 = WebUI.getAttribute(findTestObject('...'), '...')
        def som = ret2.contains('...')
        println som

        if (som) { // 简化判断,无需写som == true
            test.pass('测试通过描述')
        } else {
            try {
                String base64Code = CustomKeywords.'(...).screenshot.takeScreenshotBase64'()    
                // 明确传递失败描述和截图媒体
                test.fail('权限验证失败', MediaEntityBuilder.createScreenCaptureFromBase64String(base64Code).build())
                test.info('继续执行后续测试步骤')
            } catch (Exception e) {
                // 捕获异常并记录,不终止执行
                test.warning('生成失败报告时出错: ' + e.getMessage())
            }
        }
        break
    case 'N':
        def ret3 = WebUI.getAttribute(findTestObject('...'), 'class')
        def som3 = ret3.contains('column-checkbox-disabled')
        print som3

        if (som3) {
            test.pass('测试通过描述')
        } else {
            try {
                String base64Code = CustomKeywords.'(...).screenshot.takeScreenshotBase64'()        
                test.fail('权限验证失败', MediaEntityBuilder.createScreenCaptureFromBase64String(base64Code).build())
                test.info('继续执行后续测试步骤')
            } catch (Exception e) {
                test.warning('生成失败报告时出错: ' + e.getMessage())
            }
        }
        break
}

3. 确保外层循环不受单个失败影响

外层的for循环和try块要确保单个权限测试失败后,不会中断整个循环。可以在外层try块中添加catch逻辑,捕获单个迭代的异常,继续执行下一个权限测试:

for (def permission : permissionList) {
    try {
        // 你的switch逻辑代码
    } catch (Exception e) {
        test.warning('权限【' + permission + '】测试出现异常: ' + e.getMessage())
        // 不抛出异常,继续下一个循环
    }
}
extent.flush()

4. 分离测试执行与报告逻辑

先完成所有测试步骤的断言,收集所有失败信息,最后统一生成报告,避免报告操作影响测试流程:

def failures = []
// 执行所有测试步骤
switch (query) {
    case 'Y':
        def ret2 = WebUI.getAttribute(findTestObject('...'), '...')
        def som = ret2.contains('...')
        if (!som) {
            failures.add(['type': 'Y', 'msg': '权限验证失败'])
        }
        break
    case 'N':
        def ret3 = WebUI.getAttribute(findTestObject('...'), 'class')
        def som3 = ret3.contains('column-checkbox-disabled')
        if (!som3) {
            failures.add(['type': 'N', 'msg': '权限验证失败'])
        }
        break
}
// 统一生成报告
failures.each { fail ->
    String base64Code = CustomKeywords.'(...).screenshot.takeScreenshotBase64'()
    test.fail(fail.msg, MediaEntityBuilder.createScreenCaptureFromBase64String(base64Code).build())
    test.info('已记录失败,继续执行')
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 21:53:15