Maven FailSafe插件的好处

35

据我了解,Maven Failsafe插件是专门设计用于运行集成测试的。目前我正在一个多模块项目上工作,集成测试是在其自己的单独模块中编写的,使用TestNG并使用Surefire插件运行。由于只有集成测试在该模块的测试阶段运行,因此我们不会与单元测试发生冲突。为了在测试之前设置环境并在测试运行后进行清理,使用了@BeforeSuite @AfterSuite TestNG注释。因此,无需使用Failsafe插件利用的pre-integration-test阶段、integration-test阶段和post-integration-test阶段。

  • 如果不使用Failsafe插件,我是否错过了其他好处?
  • 是否有更好的方法可以使用Failsafe插件来满足我的当前需求?
  • 在不编写Maven插件的情况下,我可以在pre-integration-testpost-integration-test阶段中启动、关闭服务器、解压文件等吗?
回答:
  • 未使用Failsafe插件是否错过其他好处没有明确提到,因此无法回答。
  • 在当前情况下,已经使用了Surefire插件和TestNG注释进行集成测试,因此不需要使用Failsafe插件。如果需要执行更复杂的集成测试,Failsafe插件可能会更适合。
  • 可以通过在pre-integration-testpost-integration-test阶段中使用shell命令或Ant任务等来处理这些操作,而不必编写Maven插件。
3个回答

34

如果您已经在测试套件中拥有自己的测试设置/拆卸,看起来确实如此,那么从FailSafe插件中可以获得的收益不多。

在系统测试环境的设置成本很高或需要很长时间(例如启动Servlet或分布式系统)的情况下,FailSafe插件非常有用。 FailSafe插件有用之处在于,您可以在阶段建立此环境。该插件还不会在测试失败时停止Maven构建的执行,这使您可以在阶段清除所有工件,之后它会检查测试的状态并在阶段相应地通过或失败构建。


你的意思是什么?如果你不使用skipAfterFailureCount=1,这不是默认选项,那么imvn测试在失败时不会中止。 - Whimusical

31

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


你的意思是什么?如果你不使用skipAfterFailureCount=1,这不是默认选项,那么imvn测试不会在结束之前中止。 - Whimusical
6
使用Surefire插件运行测试时,如果其中至少一个测试失败,Maven默认会在test阶段后停止构建。而使用Failsafe插件时,integration-test阶段总是会成功执行,然后运行post-Integration-test阶段,最后在verify阶段构建将会失败。 - Cephalopod
1
我也曾经有同样的困惑。真正的区别在于,failsafe会继续执行失败的测试(这并不是什么大问题,因为surefire也可以配置成这样),但是failsafe还有一个名为“verify”的附加目标,它会在“verify”阶段后触发,如果之前的任何测试失败,它将使构建失败。这允许您在“post-integration-test”阶段撤消/拆除测试开始之前所做的所有设置。 - Sony Antony

2

针对你的第三个问题,我认为并没有得到很好的回答。

在不编写Maven插件的情况下,我能否在pre-integration-test、post-integration-test阶段进行服务器启动、关闭、文件解压缩等操作?

摘自这篇答案,回答了"Maven Failsafe Plugin: how to use the pre- and post-integration-test phases"这个问题。

总之,pre-integration-testpost-integration-test默认情况下什么都不做。您可以将特定于任务的插件绑定到这些阶段。找到特定的插件取决于您要执行的任务。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接