即使 fail-on-end 设置为 true,当达到测试超时时,Maven 肯定会失败构建

Maven sure fail build when a test timeout is reached even when fail-on-end set to true

在多模块 Maven 项目中,我想在达到测试超时时打印线程转储并使测试失败。所以为了实现这一点,我使用了 TimedoutTestsListener and surefire listener property.

的组合

我正在使用 Jenkins,因此 fail-on-end 设置为 true,以便所有未受影响的测试继续 运行,如前所述 here

那么,是否有可能只有在达到超时时才立即失败构建,而在其他失败情况下最终失败?

这已在 maven email group

中得到解答

to fail the build immediately when timeout is reached

此功能存在多年: http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#forkedProcessTimeoutInSeconds http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#forkedProcessTimeoutInSeconds

to fail the ... when someone presses abort button on the jenkins

这也存在几个替代方案(在 版本)。查看详细页面 http://maven.apache.org/surefire/maven-failsafe-plugin/examples/shutdown.html

如果您的 Jenkins 将 SIGTERM 信号发送到 Maven 进程(相同 如 CTRL+C) 那么流程管道中的标准输入流变为 关闭并且 EOFException 被分叉的 JVM 捕获并关闭 叫做: http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#shutdown maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#shutdown 如果你想杀死 JVM,你可以重新配置默认行为。

如果您的 Jenkins 将 SIGTERM 发送到 Maven 进程,则启用 进程检查器,请参阅文档中的更多详细信息: http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html#enableProcessChecker http://maven.apache.org/surefire/maven-failsafe-plugin/integration-test-mojo.html#enableProcessChecker

有帮助吗?

常见问题解答如下: http://maven.apache.org/surefire/maven-failsafe-plugin/faq.html

如果您对此主题有疑问,请随时提出任何问题。

如果您使用的是 surefire 3.0.0-M4,则可以在 target/surefire-reports 中找到线程转储,如 here 所述。