【问题标题】:How to force maven to execute next goals after tests failures测试失败后如何强制Maven执行下一个目标
【发布时间】:2018-02-13 14:22:55
【问题描述】:

我正在使用 surefire 插件对项目运行测试,然后需要使用“站点”目标生成报告,即使测试失败。

问题是,在默认情况下,如果测试失败,surefire 会强制构建失败,并且不会执行进一步的目标。 所以我将以下配置设置为万无一失:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>${surefire.version}</version>
        <configuration>
            <testFailureIgnore>true</testFailureIgnore>
        </configuration>
</plugin>

这很好用,“站点”目标总是被执行,但在这种情况下,构建的状态总是“成功”,所以我无法设置电子邮件通知。

在“测试”目标之后是否有适当的方法来执行下一个目标,而不会忽略 surefire 插件中的失败?

【问题讨论】:

  • 你可以在没有测试的情况下运行。

标签: java maven testing pom.xml


【解决方案1】:

你可以使用:

  • -DskipTests=true 完全跳过测试执行
  • -Dmaven.test.failure.ignore=true 忽略测试失败
  • --fail-at-end 让构建测试阶段之后继续,并且只有在整个构建周期完成时才会失败(如果有测试失败)

鉴于此声明...

这很好用,“站点”目标总是被执行,但在这种情况下,构建的状态总是“成功”,所以我无法设置电子邮件通知。

...我想你想使用--fail-at-end。根据文档,它的行为是:

--fail-at-end - 如果特定模块构建失败,则继续反应堆的其余部分并在最后报告所有失败的模块

【讨论】:

  • --fail-at-end 正是我所需要的。
  • 看来--fail-at-end 不会为出现故障的模块执行下一阶段?
【解决方案2】:

我正在使用 surefire 插件对项目进行测试,然后需要使用“站点”目标生成报告,即使测试失败。

如果我理解你的问题,你所做的就相当于简单地运行mvn site(或mvn site:stage)目标!它将在运行测试后生成站点,并且(如果已配置)包含一个失败的报告,哪些没有。它不会失败,因为您没有请求“测试项目”,而是“使用测试结果构建项目站点”,它成功了。

...构建的状态始终为“成功”,因此我无法设置电子邮件通知。

根据您的描述,我假设发送通知是基于构建状态,并且通知具有指向生成站点的链接。如果是这种情况,我能想到的 3 个选项可能会满足您的需求:

  • 更改通知由surefire插件的输出(通常在${basedir}/target/surefire-reports)而不是构建状态触发。然后你可以简单地运行mvn site
  • 以某种方式发布/共享安全输出文件(如果需要,转换它们)并使通知指向它们而不是指向站点。然后你可以简单地运行mvn test
  • 运行mvn site test,它将首先生成站点(运行测试并忽略构建失败的报告),然后运行测试(再次)使您​​的构建失败

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多