我正在尝试使用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内核不起作用,那似乎是巧合。
答案 0 :(得分:2)
根据threadCountClasses
配置条目
此属性允许您指定测试类中的并发性,即:
threadCount
为0或未指定时的并发类数- 如果
,则限制类并发useUnlimitedThreads
设置为true
- 如果
threadCount
和某些线程计数参数是&gt; 0表示并行,并发是根据比率计算的。例如parallel
=all
且threadCountSuites
:threadCountClasses
:threadCountMethods
之间的比例为2:3:5,并发类中有30%的threadCount- 与前一种情况一样,但没有此叶子线程计数。示例:
parallel
=suitesAndClasses
,threadCount
= 16,threadCountSuites
= 5,threadCountClasses是未指定的叶,并发类的数量从&gt; = 11到14或15.threadCountSuites
成为线程数。仅与并行参数一起使用才有意义。默认值0的行为与未指定的值相同。
在你的情况下,你没有指定threadCount
元素,因此你应该属于第一种情况(并发类的数量)但是它似乎并非如此。
第三种情况和第四种情况确定了一个比率(而不是一个特定的数字),因为它似乎恰好发生在你的情况下。但是,比率取决于您的测试类(套件,如果有的话,类和方法),而不取决于您的CPU内核。
但是,perCoreThreadCount
配置条目:
表示每个cpu核心
threadCount
,threadCountSuites
,threadCountClasses
,threadCountMethods
。
默认设置为true
,有效地影响上述动态并匹配您描述的行为(根据上面的选项1)。
因此,建议将其设置为false
。