首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven Surefire插件+并行构建

Maven Surefire插件+并行构建
EN

Stack Overflow用户
提问于 2015-11-18 16:59:20
回答 1查看 1.6K关注 0票数 2

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

我发现我们的单元测试有时会失败。如果我运行模块“单独”,它可以工作,当然,如果我们运行maven‘顺序’(没有-T选项),它也能工作。

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

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

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

  1. 只需跳过测试,并行编译/包/安装所有东西即可。然后分别运行测试。对于jenkins来说,这种方法是可行的,但是对于那些习惯于运行mvn安装的开发人员来说,我可能是个麻烦。
  2. 在某种程度上,扩展了一个确保插件,如果它失败了,它会自动重新运行N次单元测试。如果测试失败,比如50%的测试失败--它确实不稳定,应该会导致整个构建失败。我不想使用@RunWith注释,因为有两个原因: a。只有许多测试需要用这个注释来更新,而且我们没有基类或其他什么东西。一些测试已经包含了这个注释(例如,对于power模拟或junit规则)。
  3. 在不同的类加载程序中以某种方式扩展了万无一失插件以运行测试。由于maven似乎使用相同的类加载器运行多个模块(我刚刚在两个不同的子模块中打印了类加载器的地址,并确保类加载器相同,地址是相同的),所以我想到了这个解决方案。这个解决方案看起来很有趣,但相对比较复杂。

在深入研究这些解决方案并与我的经理交谈之前,如果有人能对其中一种/提供另一种解决方案进行评论,我将不胜感激。我只是不想重新发明轮子,希望能节省一些时间:)

提前谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-18 21:13:23

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

老实说,看起来你没给它一次机会。检查一下https://maven.apache.org/surefire/maven-surefire-plugin/examples/fork-options-and-parallel-execution.html文档

只是示例的副本粘贴:

代码语言:javascript
复制
<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>

顺便说一下,“万无一失”可以重新运行失败的测试:https://maven.apache.org/surefire/maven-surefire-plugin/examples/rerun-failing-tests.html。我只是担心你不能设定一个门槛。

而且,分叉并不能使调试(例如,附加调试器)相当困难。

根据我的经验,并不是所有的安全设置都与分叉兼容,因此您可能需要一步一步地调整配置,以查看哪些是实际工作的,哪些是不工作的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33785968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档