7

我有一个多模块 maven 项目,其中模块之间有很多依赖关系。我曾尝试并行运行我的测试,但由于模块没有经过深思熟虑并且彼此高度依赖,我基本上没有时间获得,因为它们最终仍然按顺序执行。

现在,在完全运行测试之前,我有一个构建项目的阶段,以便我可以将其他静态分析工具并行应用于我的测试。

我的问题是:鉴于我的模块已经编译,我可以不告诉 maven 使用这些预编译的类并行运行测试,而不是等待依赖模块先运行它们的测试吗?例如,目前如果我有一个依赖于模块 B 的模块 A,模块 B 将在 A 启动之前先执行其所有测试。由于我已经构建了 A 和 B,因此我无需保留此限制。

我目前运行测试的方式类似于: mvn -f project-parent/pom.xml surefire:test其中项目父级是一个模块,它是我所有其他模块的父级。为简洁起见,我省略了配置文件和其他参数。

谢谢!

编辑:此时我试图避免使用junit或surefire来避免类/套件级别的并行化,并且只想以并行方式测试模块。

4

2 回答 2

4

Child测试可以通过,但Parent测试失败。这可能是因为Child需要Parent,但它的大多数测试都是在假设它有效的情况下模拟的! Parent如果这种情况并行发生并且不按顺序发生,我认为 Maven 不知道该怎么做。您希望 Maven 可以成为一个完整的 CI 管道,而实际上它只是一个构建工具。

然而:

如果您的测试速度慢到足以让您提出这个 SO 问题,那么它们可能是可以提取到新模块中的集成测试 ( <module>-tests)。

A -> A-tests
A -> B
     B -> B-tests
     B -> C
          C -> C-tests

这意味着 A、B 和 Csrc/test/*快速完成并且可以“正常”运行,而较慢的<module>-tests不相互依赖,这意味着 Maven 可以将它们并行化,只需mvn test -TC.

于 2020-08-03T13:04:23.433 回答
0

如果您绝对必须,您也可以使用该maven.test.skip属性来跳过编译测试。maven.test.skipSurefire,FailsafeCompilerPlugin 授予荣誉。

   mvn -T 8 -f project-parent/pom.xml surefire:test -Dmaven.test.skip=true
于 2020-07-30T21:54:44.750 回答