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

3

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

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

它很明显正在执行并行测试类,但它做的远远超出了我的预期。我看到它一次跳到大约40个测试类被执行,尽管设置了threadCountClasses为5。我是否误解了这些选项的工作方式?我的愿望是任何时候只有五个测试类在执行。目前,它用40个测试类阻塞了我的系统。
我当前正在运行插件版本2.17
编辑:这里有没有可能涉及CPU核心数?经过更仔细的计算,我意识到我正在使用此配置运行确切的40个测试类,并且我有8个核心。如果CPU核心不参与其中,那么这似乎是一个巧合。

如果您使用1个线程运行测试,是否会启动确切的8个测试类?这可能明确指出CPU核心数量是一个因素。 - NealSr
1个回答

2
根据官方文档关于 threadCountClasses 配置项的说明:

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

  • 如果未设置 threadCount 或未指定,则是并发类的数量
  • 如果将 useUnlimitedThreads 设置为 true,则是有限的类并发性
  • 如果 parallel 和某些线程计数参数均大于 0,则并发性将根据比率计算。例如:parallel=all,且 threadCountSuitesthreadCountClassesthreadCountMethods 的比率为 2:3:5,则在并发类中使用 30% 的线程计数。
  • 与前一种情况类似,但不包括此叶子线程计数。例如:parallel=suitesAndClassesthreadCount=16、threadCountSuites=5、未指定 threadCountClasses,则并发类的数量从 >=11 变化到 14 或 15。因此,threadCountSuites 成为了线程数。

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

在您的情况下,您未指定 threadCount 元素,因此应该符合第一种情况(并发类数),但似乎不是这种情况。
相反,第三和第四种情况定义了一个比率(而不是具体数字),而在您的情况中似乎出现了具体数字。但是,比率取决于您的测试类(套件、类和方法),而不是 CPU 核心。
然而,perCoreThreadCount 配置项:

表示 threadCountthreadCountSuitesthreadCountClassesthreadCountMethods 每个 CPU 核心都会应用。

默认设置为 true,实际上影响了上述动态并匹配您所描述的行为(根据上述第一种选项)。
因此,建议将其设置为 false

很好的解释。我确实错过了关于每个CPU核心的那一部分。 - AHungerArtist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接