类似于这里发布的解决方案TestNG 重试失败的测试不会输出正确的测试结果,我尝试在 onFinish(ITestContext context) 期间使用测试侦听器删除(重复的)测试结果。
尽管使用 context.getFailedTests().removeResult(result) 删除结果似乎工作正常(结果实际上已删除),但似乎有“其他地方”正在从中提取结果,导致构建仍然失败。
另请注意,当我运行上面文章中的示例测试(其中有一个重复的失败需要被删除并且一个通过测试)时,我得到了“测试结果”(未按预期清理)与“套件结果”的差异(重复的失败已按预期删除)。
并且,报告从哪里提取结果来决定构建是否失败?或者只是在我清理失败的测试之前它正在提取结果......?
===============================================
Default test
Tests run: 3, Failures: 2, Skips: 0
===============================================
===============================================
Default suite
Total tests run: 2, Failures: 1, Skips: 0
===============================================
EDIT:澄清一下,我们使用 Maven 运行这些测试,它们是 IT,所以我们使用故障安全插件运行它们。问题是,即使看起来测试已被删除,mvn verify 仍然会使构建失败,因为它认为无论如何都会发现构建失败。
而且,如果从 Eclipse 运行这样的测试,即使测试被删除,当套件完成时,失败仍然会打印在日志中。
关于重试分析器:我根本不认为使用 RetryAnalyzer 是好的/最佳实践,但如果您发现自己处于需要解决问题的情况,例如如果您继承了一个依赖于 RetryAnalyzer 的测试套件,您可能会发现这很有用。