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

测试失败时donut-maven-plugin无法生成聚合报告求助

问题分析与解决方案

你遇到的核心问题是:测试失败时Maven构建提前终止,导致Donut报告插件绑定的构建阶段从未执行,所以看不到任何生成报告的日志,而测试全通过时构建能顺利走到报告生成阶段。

为什么会这样?

从你的Maven日志能看到,失败来自maven-surefire-plugin:2.19:test目标,这个目标属于Maven的test阶段。Maven默认规则是:如果某个阶段的目标执行失败,会立即终止后续所有阶段的运行。而你的Donut插件绑定在post-integration-test阶段(在test阶段之后),所以当test阶段因为测试失败报错时,后续的报告生成步骤直接被跳过了。

另外还有一个小问题:你用maven-surefire-plugin运行集成测试类(Parallel*IT.class),但按照Maven规范,surefire是专门处理单元测试(命名为*Test.class)的插件,集成测试(命名为*IT.class)应该用maven-failsafe-plugin——这个插件的特性就是即使集成测试失败,也会继续执行后续构建阶段,刚好能解决你的报告生成问题。


具体解决方案

方案1:改用maven-failsafe-plugin运行集成测试(推荐)

把原来的maven-surefire-plugin配置替换为maven-failsafe-plugin,让它来处理你的Parallel*IT.class测试:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-failsafe-plugin</artifactId>
    <version>2.20</version>
    <configuration>
        <forkCount>5</forkCount>
        <reuseForks>true</reuseForks>
        <includes>
            <include>**/Parallel*IT.class</include>
        </includes>
        <systemPropertyVariables>
            <deviceName>${device.name}</deviceName>
            <targetEnv>${target.env}</targetEnv>
        </systemPropertyVariables>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>integration-test</goal>
                <goal>verify</goal>
            </goals>
        </execution>
    </executions>
</plugin>

如果项目里没有单元测试,可以直接移除原来的maven-surefire-plugin配置;如果有单元测试,保留surefire处理*Test.class即可。

这样配置后,即使集成测试失败,Maven也会继续执行到post-integration-test阶段,Donut插件就能正常生成聚合报告了。

方案2:让Maven忽略测试失败(临时应急)

如果你暂时不想更换插件,可以在运行命令时添加参数,让Maven忽略测试失败、继续执行后续阶段:

mvn clean verify -Dmaven.test.failure.ignore=true

⚠️ 注意:这种方式会让Maven最终显示BUILD SUCCESS,可能掩盖测试失败的事实,需要你自行查看测试报告确认结果。

方案3:调整Donut插件的绑定阶段

把Donut插件的绑定阶段从post-integration-test改为verify(这个阶段在测试失败前会执行):

<plugin>
    <groupId>report.donut</groupId>
    <artifactId>donut-maven-plugin</artifactId>
    <version>0.0.6</version>
    <executions>
        <execution>
            <id>execution</id>
            <phase>verify</phase> <!-- 修改绑定阶段 -->
            <goals>
                <goal>generate</goal>
            </goals>
            <!-- 其他配置保持不变 -->
        </execution>
    </executions>
</plugin>

不过这种方式存在风险:如果测试报告还没完全生成就执行Donut,可能会导致报告不完整,所以还是优先推荐方案1。


额外验证点

  • 确认测试失败时,target/cucumber-parallel目录下确实生成了所有Cucumber JSON报告(你提到普通报告能正常生成,这一步应该没问题)。
  • 检查Donut插件的sourceDirectory配置是否正确,确保指向了包含所有JSON报告的目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:18:45