Maven Surefire插件重复显示重试测试及Zephyr集成问题
问题背景与需求
我们项目中,跳过或失败的测试会被重试两次。为避免测试结果重复,我们通过TestNG的监听器实现了逻辑,将首次跳过/失败的测试从结果集中移除,具体实现代码如下:
public void onFinish(ISuite suite) { Map<String, ISuiteResult> passedTests = suite.getResults(); //remove passed tests from failed tests and skipped tests for (ISuiteResult r : passedTests.values()) { ITestContext context = r.getTestContext(); context.getPassedTests().getAllResults().forEach(i -> { if (context.getFailedTests().getAllMethods().contains(i.getMethod())) { context.getFailedTests().removeResult(i.getMethod()); } if (context.getSkippedTests().getAllMethods().contains(i.getMethod())) { context.getSkippedTests().removeResult(i.getMethod()); } }); //remove skipped tests from failed tests context.getFailedTests().getAllResults().forEach(i -> { log.info("Going to remove test case: " + i.getMethod()); if (context.getSkippedTests().getAllMethods().contains(i.getMethod())) { context.getSkippedTests().removeResult(i.getMethod()); Reporter.log("Skipped tests for suite '" + suite.getName() + "' is:" + context.getSkippedTests().getAllResults().size(), true); } }); } }
目前TestNG自身能生成正确的测试结果(仅显示1条测试记录,而非重复的2条),但Maven Surefire插件仍会展示2条测试记录——一条标记为跳过、一条标记为失败。此外,由于我们需要通过仅支持JUnit格式的Zephyr Scale插件与Zephyr集成,testng-results.xml中的重复记录会导致重试后的测试在Zephyr中被错误标记为跳过,而非最终的失败状态。
现在需要以下两个解决方案:
- 如何配置Maven Surefire插件,使其仅显示测试的最后一次执行结果;
- 如何基于testng-results.xml文件,将TestNG的测试结果发布到Zephyr平台。
内容的提问来源于stack exchange,提问作者Yaryna
相关产品推荐
相关产品推荐

