Maven FailSafe 插件的好处

Posted

技术标签:

【中文标题】Maven FailSafe 插件的好处【英文标题】:Benefits of Maven FailSafe Plugin 【发布时间】:2012-03-09 11:49:06 【问题描述】:

我读到Maven Failsafe plugin 是专门为运行集成测试而设计的。目前我正在开发一个多模块项目,集成测试在它自己的单独模块中,用 TestNg 编写并使用Surefire plugin 运行。我们与单元测试没有冲突,因为在该模块的测试阶段只运行集成测试。并且为了在测试之前设置环境,在测试运行之后清理它,使用@BeforeSuite @AfterSuiteTestNg 注释。所以Failsafe插件使用的pre-integration-test阶段,integration-test阶段,post-integration-test阶段就没有必要了。

如果不使用 Failsafe 插件,我还错过了什么好处吗? 有没有更好的方法来使用 Failsafe 插件来满足我当前的需求? 我可以在pre-integration-testpost-integration-test 阶段进行服务器启动、关闭、文件解压缩等操作,而无需编写 maven 插件吗?

【问题讨论】:

【参考方案1】:

如果您的套件中已经有自己的测试设置/拆卸,从外观上看,您可以从 FailSafe 插件中获得多少收益。

FailSafe 插件在您的被测系统的设置成本高昂或需要很长时间(例如启动 Servlet 或分布式系统)的情况下很有用。 FailSafe 插件在这些情况下派上用场的方式是您可以在pre-integration-test 阶段设置此环境。当测试失败时,此插件也不会停止执行 Maven 构建,它允许您在 post-integration-test 阶段清理所有工件,之后它会检查您的测试状态并通过或失败构建相应地在verify 阶段。

【讨论】:

什么意思?如果不使用 skipAfterFailureCount=1,whjch 不是默认选项,如果测试失败,imvn 测试不会中止【参考方案2】:

Failsafe 与 Surefire 相比有一个很大的特点:当测试失败时,它不会立即中止。相反,它让清理代码运行(这通常会关闭 Jetty 服务器)。

【讨论】:

什么意思?如果不使用skipAfterFailureCount=1,whjch不是默认选项,imvn测试直到结束才会中止 @Whimusical 当至少一个测试因万无一失而失败时,Maven 将默认在test 阶段之后停止构建。使用故障保护插件,integration-test 阶段将始终成功,然后post-Integration-test 将运行,然后在verify 阶段构建将失败【参考方案3】:

解决你的第三个问题,因为它没有真正得到回答,恕我直言。

我是否可以在不编写 maven 插件的情况下在预集成测试、后集成测试阶段进行服务器启动、关闭、文件解压缩等操作?

取自this answer 到“Maven Failsafe Plugin: how to use the pre- and post-integration-test phases”

归结为:pre-integration-testpost-integration-test 默认不执行任何操作。您可以将特定于您的任务的插件绑定到这些阶段。查找特定插件取决于您要执行的操作。

要指出的另一件重要事情是maven-failsafe-plugin 使用的默认命名约定:它运行名称以IT 开头或结尾的测试类(作为集成测试类)

【讨论】:

以上是关于Maven FailSafe 插件的好处的主要内容,如果未能解决你的问题,请参考以下文章

Maven Failsafe 插件 - SurefireBooterForkException: 分叉进程中出现错误 (TypeNotPresentExceptionProxy)

阻止单元测试,但允许在 Maven 中进行集成测试

maven插件编写

在多模块 Maven 项目中构建所有模块后,如何运行集成测试?

如何使用由 Maven 坐标定义的战争来运行 jetty:run-war?

集成测试无法启动(Failsafe,Maven)