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

Running multiple test classes with maven surefire plugin

我正在尝试使用 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>

它很明显是在进行并行测试 类 但它所做的远远超出我的预期。尽管 threadCountClasses 被设置为 5,但我看到它一次执行了大约 40 个测试 类。我是否误解了这些选项的工作原理?我希望在任何时候只执行五个测试 类。事实上,它用 40 个让我的系统窒息。

我目前是 运行ning 插件版本 2.17

编辑:CPU 核心的数量是否有可能在这里发挥作用?经过更仔细的核算,我意识到我 运行ning 恰好 40 次测试 类 使用此配置并且我有 8 个内核。如果 CPU 核心没有发挥作用,这似乎是一个巧合。

根据 threadCountClasses 配置条目的官方文档

This attribute allows you to specify the concurrency in test classes, i.e.:

  • number of concurrent classes if threadCount is 0 or unspecified
  • limited classes concurrency if useUnlimitedThreads is set to true
  • if threadCount and certain thread-count parameters are > 0 for parallel, the concurrency is computed from ratio. For instance parallel=all and the ratio between threadCountSuites:threadCountClasses:threadCountMethods is 2:3:5, there is 30% of threadCount in concurrent classes.
  • as in the previous case but without this leaf thread-count. Example: parallel=suitesAndClasses, threadCount=16, threadCountSuites=5, threadCountClasses is unspecified leaf, the number of concurrent classes is varying from >= 11 to 14 or 15. The threadCountSuites become number of threads.

Only makes sense to use in conjunction with the parallel parameter. The default value 0 behaves same as unspecified one.

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

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

但是,perCoreThreadCount 配置条目:

Indicates that threadCount, threadCountSuites, threadCountClasses, threadCountMethods are per cpu core.

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

因此,建议将其设置为 false