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

时间:2016-04-22 15:02:52

标签: java maven junit concurrency maven-surefire-plugin

我正在尝试使用maven-surefire-plugin中的parallel选项一次运行多个测试类。以下是我的配置:

<configuration>
    <argLine>-Xmx1024m -XX:MaxPermSize=1024m</argLine>
    <excludes>
        <exclude>**/Test*.java</exclude>
    </excludes>
    <runOrder>hourly</runOrder>
    <parallel>classes</parallel>
    <threadCountClasses>5</threadCountClasses>
</configuration>

很明显,它正在进行并行测试,但它的功能远远超出我的预期。尽管threadCountClasses设置为5,我看到它一下子跳到大约40个测试类,我误解了这些选项是如何工作的?我的愿望是在任何时候只执行五个测试类。事实上,它让我的系统窒息了40。

我目前正在运行该插件的 2.17 版本。

编辑:CPU内核的数量是否有可能在这里发挥作用?经过更仔细的计算,我意识到我正在运行这个配置的40个测试类,我有8个核心。如果CPU内核不起作用,那似乎是巧合。

1 个答案:

答案 0 :(得分:2)

根据threadCountClasses配置条目

上的官方文档
  

此属性允许您指定测试类中的并发性,即:

     
      
  • threadCount为0或未指定时的并发类数
  •   
  • 如果useUnlimitedThreads设置为true
  • ,则限制类并发   
  • 如果threadCount和某些线程计数参数是&gt; 0表示并行,并发是根据比率计算的。例如parallel = allthreadCountSuitesthreadCountClassesthreadCountMethods之间的比例为2:3:5,并发类中有30%的threadCount
  •   
  • 与前一种情况一样,但没有此叶子线程计数。示例:parallel = suitesAndClassesthreadCount = 16,threadCountSuites = 5,threadCountClasses是未指定的叶,并发类的数量从&gt; = 11到14或15. threadCountSuites成为线程数。
  •   
     

仅与并行参数一起使用才有意义。默认值0的行为与未指定的值相同。

在你的情况下,你没有指定threadCount元素,因此你应该属于第一种情况(并发类的数量)但是它似乎并非如此。

第三种情况和第四种情况确定了一个比率(而不是一个特定的数字),因为它似乎恰好发生在你的情况下。但是,比率取决于您的测试类(套件,如果有的话,类和方法),而不取决于您的CPU内核。

但是,perCoreThreadCount配置条目:

  

表示每个cpu核心threadCountthreadCountSuitesthreadCountClassesthreadCountMethods

默认设置为true,有效地影响上述动态并匹配您描述的行为(根据上面的选项1)。

因此,建议将其设置为false