运行 使用 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
。
我正在尝试使用 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 totrue
- if
threadCount
and certain thread-count parameters are > 0 for parallel, the concurrency is computed from ratio. For instanceparallel
=all
and the ratio betweenthreadCountSuites
: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. ThethreadCountSuites
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
。