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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:34:50