首页 > 解决方案 > 与 TestNG 依赖项冲突并有条件地跳过测试

问题描述

我正在尝试在我的 XML 中实现 TestNG 依赖项(其中一个 ~50 个测试块依赖于另一个 ~30 个测试块通过),但是遇到了我之前实现的跳过注释的问题。似乎在跳过测试时也会触发依赖关系,而不仅仅是在测试失败时。有解决方法吗?我想忽略跳过的测试结果并继续运行依赖测试,并且只有在测试显式失败时才调用依赖。

来自 TestNG 文档:

硬依赖。您所依赖的所有方法都必须已运行并成功才能运行。如果您的依赖项中至少发生一次故障,您将不会被调用并在报告中标记为 SKIP。

标签: testng

解决方案


固定的,有点。将以下代码添加到 afterInvocation 方法会将测试结果从 SKIP 更改为 PASS。这允许相关测试运行,但从您的测试结果中隐藏任何跳过的测试。在我们的例子中,这是更可取的。如果有更好的解决方案不能掩盖跳过的测试,我会很高兴听到它!

if (method.getTestMethod().getRetryAnalyzer() != null && Retry.getRetryCount() == 0) { // check if the method was skipped without retries (due to skip annotation)
        
        ITestContext tc = Reporter.getCurrentTestResult().getTestContext();

        tc.getSkippedTests().addResult(method.getTestResult(), Reporter.getCurrentTestResult().getMethod());
        tc.getSkippedTests().getAllMethods().remove(Reporter.getCurrentTestResult().getMethod());

        SMAPLogger.Info("Test result: Test Skipped -- marking test as passed to avoid dependency issues");
        Reporter.getCurrentTestResult().setStatus(ITestResult.SUCCESS);

        tc.getPassedTests().addResult(method.getTestResult(), Reporter.getCurrentTestResult().getMethod());
        tc.getPassedTests().getAllMethods().remove(Reporter.getCurrentTestResult().getMethod());
    }

推荐阅读