Maven 故障安全插件
要求:Maven 3.x 和 JDK 1.7 或更高版本。由于 3.1.0 之前的 Maven 版本中控制台文本消息的格式错误,强烈建议使用 Maven 3.1.0 或更高版本。
这是发展的路线图,见GH。
版本 | 发布目标 |
---|---|
3.0.0-M1 | Maven API 3.0 和 Java 1.7 Maven 插件 API 3.0 Java 1.7 至少 @Component 已弃用。应该使用 @Parameter 代替 Surefire manifest jar 类加载在最新的 Debian/Ubuntu Java8 上损坏 请参阅版本 3.0.0-M1 的发行说明 |
3.0.0-M2 | 已修复:JDK9 和 Windows 类路径问题、3.0 和 Legacy Report XSD、3.0.0-M2 shadefire 修复了文件系统上有空格的 JDK9+ (Jigsaw) 模块化路径 (module-info.java) Windows 斜杠出现在类的相对路径中-MANIFEST.MF (Boot Manifest-JAR) 中的路径使用子目录 pom 文件时,Surefire 无法加载类 ForkedBooter 如果将工具链与 JDK9+ 和(Jigsaw)模块化路径(module-info.java) 3.0 和旧版报告一起使用,插件将失败XSD 3.0.0-M2 shadefire 功能:关闭 Java 9 模块的 选项关闭 Java 9 模块的选项 请参阅版本 3.0.0-M2 的发行说明 |
3.0.0-M3 | 已修复:maven-surefire-report-plugin 支持 JDK11、JUnit5 问题、Failsafe 插件中不推荐使用的 skipTests、使用 ShadeFire 3.0.0-M2 maven-surefire-report-plugin 在写入 System.out 的 JDK 11 JUnit Runner 上失败会损坏 Surefire 的 STDOUT 当在测试摘要中使用 JUnit 的 Vintage Engine 智能堆栈跟踪时,不应打印 JUnit5 断言异常类型 在故障安全插件中弃用 skipTests 请参阅版本 3.0.0-M3 的发行说明 |
3.0.0-M4 | 提供了 3 个报告器扩展,可用于自定义 XML 报告、控制台和文件报告器。它对 JUnit5 用户非常有用。 我们重新设计了内部实现,以便可以轻松添加新命令和事件。impl 位于中心点,它是下一个版本的先决条件。 为 Docker Alpine/BusyBox Linux、JUnit5 和 43 提供了错误修复。 ForkClient 尝试使用不相关的行 |
3.0.0-M5 | 测试报告任务(先决条件:3.0.0-M4 中的 SUREFIRE-1222) 与 TCP/IP 的新进程间通信,修复了当前的阻止程序和严重错误。 提供的扩展可用于在插件配置中自定义此进程间通信。它在内部用于切换管道和 TCP 连接器。 用于分叉的 Surefire JVM 的 TCP/IP 通道。扩展 API 和 SPI。用于远程和本地进程通信的多态性。 |
3.0.0-M6 | (1) 我们将通过 SimpleReportEntry 中的 UniqueId 而不是传统的类/方法名组合来识别测试。(准备进行参数化测试和连贯的重新运行) (2) TestSetRunListener 不应缓存测试事件并对 StatelessXmlReporter 中的 impl 进行任何猜测。TestSetRunListener 应该只将事件转发给多个报告者。 (3) 触发和消费更多事件(正常运行开始/结束,重新运行开始/结束) (4) StatelessXmlReporter 重复生成 XML 报告。它是有状态的报告,如果重新运行或并行执行无序发送测试事件,它将不起作用。先决条件:1-3 并行执行模式下的 JUnit 5 混淆 Surefire 报告 ConsoleOutputFileReporter 应支持测试集的并行执行 |
3.0.0-M7 | Providers implementation 和 API 更多测试事件用于协商测试以在特定的 fork JVM 上运行。当测试通过组/类别或使用文件 过滤器的类路径扫描过滤(fork JVM 优于 Maven JVM)并在测试列表处理器 (3.0.0-M8) 中使用时,它很有用。我们将为扩展“测试列表处理器”保留隔离类加载器,以便用户 可以决定将在哪里搜索测试的 JVM。可能 JUnit5 提供者将能够通过注释扫描类,请参阅 launcher.discover(),并通过分叉进行协商。 Surefire 无法并行运行 testng 套件 |
3.0.0-M8 | 使用测试列表处理器自定义测试集的扩展 API(先决条件:3.0.0-M7) (可能是基于注释的类路径扫描,目前扫描是基于文件名模式完成的,例如 -Dtest=MyTest) 测试列表预处理器支持要运行的测试 |
3.0.0-M9 | 在配置参数中打破与系统属性的向后兼容性,删除不推荐使用的配置参数和删除不推荐使用的代码等。 |
Failsafe 插件旨在运行集成测试,而 Surefire 插件旨在运行单元测试。选择名称 (failsafe) 既是因为它是万能的同义词,也是因为它暗示当它失败时,它会以一种安全的方式进行。
Maven 生命周期有四个运行集成测试的阶段:
pre-integration-test
用于设置集成测试环境。integration-test
用于运行集成测试。post-integration-test
用于拆除集成测试环境。verify
用于检查集成测试的结果。
如果您使用 Surefire 插件运行测试,那么当您遇到测试失败时,构建将在该integration-test
阶段停止,并且您的集成测试环境不会被正确拆除。
Failsafe Plugin 用于构建生命周期的各个阶段integration-test
,verify
以执行应用程序的集成测试。Failsafe Plugin 不会在integration-test
阶段期间使构建失败,从而使post-integration-test
阶段能够执行。
注意:在运行集成测试时,您应该使用(也更短的类型)调用 Maven
mvn verify
而不是试图integration-test
直接调用阶段,否则post-integration-test
阶段将不会被执行。
Failsafe 插件以两种不同的文件格式生成报告:
- 纯文本文件 (
*.txt
) - XML 文件 (
*.xml
)
默认情况下,这些文件在${basedir}/target/failsafe-reports/TEST-*.xml
.
Failsafe XML Report Schema提供了Failsafe XML Report Schema的架构。
旧插件(最高 2.22.0 的版本)生成的 XML 报告应由Legacy Failsafe XML Report Schema验证。
然而,两个插件版本(2.22.1 和 3.0.0-M1)生成 3.0 XML 报告,它们仍然引用旧模式(参见noNamespaceSchemaLocation
XML 报告)。期望通过 XSD Schema 验证的 XML 报告的项目,例如 xUnit 工具,不应使用 Failsafe 插件的 2.22.1 和 3.0.0-M1 版本。
有关报告的 HTML 格式,请参阅Maven Surefire 报告插件。
默认情况下,此插件在Failsafe XML Summary Schema${basedir}/target/failsafe-reports/failsafe-summary.xml
处生成摘要 XML 文件,并且该架构可用。
目标概述
Failsafe 插件只有两个目标:
- failsafe:integration-test运行应用程序的集成测试。
- failsafe:verify验证应用程序的集成测试是否通过。
用法
有关如何使用 Failsafe 插件的一般说明可以在使用页面上找到。下面列出的示例中描述了一些更具体的用例。此外,用户可以为GitHub 项目做出贡献。
如果您对插件的使用仍有疑问,请查看常见问题解答并随时联系用户邮件列表。邮件列表中的帖子已存档,并且可能已经包含您问题的答案,作为旧线程的一部分。因此,也值得浏览/搜索邮件存档。
如果您觉得插件缺少功能或存在缺陷,您可以在我们的问题跟踪器中提交功能请求或错误报告。创建新问题时,请提供您所关注问题的全面描述。特别是对于修复错误,开发人员可以重现您的问题至关重要。出于这个原因,非常感谢附在问题上的整个调试日志、POM 或最好的小演示项目。当然,补丁也是受欢迎的。贡献者可以从我们的源代码库中查看该项目,并将在帮助使用 Maven 的指南中找到补充信息。
例子
以下示例展示了如何在更高级的用例中使用故障安全插件: