如何在测试失败后强制maven执行下一个目标

时间:2017-09-05 10:12:16

标签: java maven testing pom.xml

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

问题是默认情况下,在测试失败的情况下,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插件中的失败?

2 个答案:

答案 0 :(得分:2)

您可以使用:

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

鉴于此声明......

  

这很有效并且“网站”目标始终执行,但在这种情况下,构建的状态始终为“成功”,因此我无法设置电子邮件通知。

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

  

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

答案 1 :(得分:0)

  

我正在使用surefire插件对项目运行测试,然后需要使用&#34; site&#34;生成报告。目标,即使测试失败。

如果我理解你的问题,你所做的就等同于简单地运行mvn site(或mvn site:stage)目标!它将在运行测试后生成站点,并且(如果已配置)包括哪个报告失败,哪个报告失败。它不会失败,因为你没有要求测试项目&#39;但要用测试结果构建项目的网站&#39;它成功了。

  

......构建的状态始终是&#34;成功&#34;这样我就无法设置电子邮件通知。

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

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