Maven Surefire插件+并行构建

马克·布拉姆尼克

在我们相当大的项目(大约600个maven模块)中,我们决定尝试使用maven的并行构建功能。因此,我已经安装了maven 3.3并尝试运行单元测试。

我发现有时候我们的单元测试会失败。如果我“单独”运行模块,则可以使用,当然,如果我们“顺序”运行maven(无-T选项),则也可以使用。

因此,我认为这是由于有时测试会干扰,可能是某些静态代码或共享实例导致了这些失败。

我的问题是,运行项目的单元测试的最佳方法是什么?我知道可以在每次测试运行时生成JVM的选项,但是由于我们有成千上万的单元测试,所以我担心这样的构建将永远持续下去:)

AFAIK有3种可能的解决方案:

  1. 只需跳过测试,并行编译/打包/安装所有内容。然后分别运行测试。这种方法对于jenkins来说是可行的,但是对于那些习惯于运行mvn install的开发人员来说,我可能会很麻烦。

  2. 以某种方式扩展了surefire插件,如果它失败,它将自动重新运行N次单元测试。如果测试失败,请说50%的次数-它确实不稳定,应该会导致整个构建失败。由于两个原因,我不想使用@RunWith注释:仅有很多测试可以使用此批注进行更新,而我们没有基类或其他东西。b。一些测试已经包含此注释(例如,用于电源模拟或junit规则)

  3. 以某种方式扩展surefire插件以在不同的类加载器中运行测试。由于Maven似乎使用同一个类加载器运行多个模块,所以我想到了这个解决方案(我刚刚在两个不同的子模块中进行了两个打印类加载器地址的测试,并确保类加载器是相同的,地址相同)。该解决方案看起来很有趣,但是相对复杂。

在深入探讨这些解决方案中的任何一种并与我的经理交谈之前,我希望能有人对这些解决方案之一发表评论/提供另一种解决方案。我只是不想重新发明轮子,希望节省一些时间:)

在此先多谢

斯蒂芬·瓦夫拉(Stepan Vavra)

如何在单独的JVM中运行每个测试类?(并可能在其他测试中重用分叉的JVM)。

老实说,您似乎没有为此付出努力。查看文档https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html

只是示例的复制粘贴:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-surefire-plugin</artifactId>
  <version>2.19</version>
  <configuration>
    <forkCount>3</forkCount>
    <reuseForks>true</reuseForks>
    <argLine>-Xmx1024m -XX:MaxPermSize=256m</argLine>
    <systemPropertyVariables>
        <databaseSchema>MY_TEST_SCHEMA_${surefire.forkNumber}</databaseSchema>
    </systemPropertyVariables>
    <workingDirectory>FORK_DIRECTORY_${surefire.forkNumber}</workingDirectory>
  </configuration>
</plugin>

顺便说一下,surefire可以重新运行失败的测试:https : //maven.apache.org/surefire/maven-surefire-plugin/examples/rerun-failing-tests.html我只是怕您无法设置阈值。

同样不是说分叉会使调试(例如,附加调试器)变得非常困难。

根据我的经验,并不是所有的surefire设置都与fork兼容,因此您可能需要逐步调整配置以查看实际的工作方式和无效的工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Maven Surefire插件+并行构建

来自分类Dev

难以理解Maven Surefire插件的并行参数

来自分类Dev

Maven不在Pom中使用surefire插件构建项目

来自分类Dev

缺少 Maven Surefire 插件?

来自分类Dev

Groovy源的Maven Surefire插件“包含”选项

来自分类Dev

包括新的测试目录maven surefire插件

来自分类Dev

为什么在Maven中需要Surefire插件?

来自分类Dev

Maven surefire插件输出测试摘要xml?

来自分类Dev

Maven插件Surefire不接受outputDirectory

来自分类Dev

Maven surefire插件多次触发测试套件

来自分类Dev

使用 maven-surefire-plugin 管理 Maven 插件的奇怪行为

来自分类Dev

Maven surefire 插件 2.22.2 构建失败,用于 Junit 5 测试用例,错误不支持 Spring Boot 中的类文件主要版本 56

来自分类Dev

Surefire Maven插件中的分叉:使用分叉是否安全?

来自分类Dev

使用Maven surefire插件运行多个测试类

来自分类Dev

Maven(surefire)测试插件排除无法正常工作

来自分类Dev

Surefire Maven插件不执行测试之一

来自分类Dev

maven surefire报告插件未运行测试用例

来自分类Dev

Maven前端插件构建错误

来自分类Dev

Maven前端插件构建错误

来自分类Dev

Eclipse Maven 构建/插件问题

来自分类Dev

如何获得并行构建的Maven反应堆构建顺序?

来自分类Dev

如果surefire:test目标失败,如何使Maven构建失败?

来自分类Dev

使用Lambda时,Maven插件构建失败

来自分类Dev

如何使用Maven构建Gradle插件

来自分类Dev

无法在Maven版本插件上构建

来自分类Dev

在Maven中继承构建插件/扩展/ ...

来自分类Dev

Maven并行构建-对一些模块进行排序

来自分类Dev

Maven构建中的tomcat和jar并行执行

来自分类Dev

执行Maven并行构建时的线程安全警告

Related 相关文章

热门标签

归档