surefire 并行 threadCount 被忽略(JUnit 4)
surefire parallel threadCount is ignored (JUnit 4)
我已经看到很多关于 运行 与 maven surefire 并行进行 JUnit 测试的主题,但我还没有看到处理这个特定问题的答案。
简而言之:测试方法是并行执行的(这是个好消息),但该道具不会限制我的线程。最终目标是并行化我的网络驱动程序和 appium 运行s,但我希望能够首先控制所有可能的线程。
下面的代码片段来自一个虚拟项目,仅供演示之用。在 apache documentation 之后,看起来并没有比下面的更多。
pom.xml
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<parallel>methods</parallel>
<threadCountMethods>2</threadCountMethods>
</configuration>
</plugin>
</plugins>
</build>
ExampleTest.class
public class ExampleTest {
@Test
public void one() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void two() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void three() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void four() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void five() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void six() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void seven() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void eight() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void nine() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void ten() throws InterruptedException {
Thread.sleep(5000);
}
}
我希望使用提供的 pom 配置完整 运行 这个 class 需要多于 25 秒(10 睡 5 秒 运行宁两个在一次)。实际运行时间是5秒多一点:
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.022 sec - in ExampleTest
更改 threadCountMethods 道具对 运行time 没有影响(看起来所有方法都在并行进行,而不考虑 threadCount 道具)。
如有任何意见,我们将不胜感激;谢谢!
所以在进一步挖掘之后,我发现了一个名为 perCoreThreadCount
的小 属性,找到了 here。如果未指定,该道具默认为 true
。我的机器上总共有 8 个内核,每个内核 2 个线程(来自问题中的原始 pom 配置)意味着最多 16 个样本测试可以在 5 秒内 运行。将该道具和设置值添加到 pom 中的 false
解决了所有问题!
我已经看到很多关于 运行 与 maven surefire 并行进行 JUnit 测试的主题,但我还没有看到处理这个特定问题的答案。
简而言之:测试方法是并行执行的(这是个好消息),但该道具不会限制我的线程。最终目标是并行化我的网络驱动程序和 appium 运行s,但我希望能够首先控制所有可能的线程。
下面的代码片段来自一个虚拟项目,仅供演示之用。在 apache documentation 之后,看起来并没有比下面的更多。
pom.xml
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.19.1</version>
<configuration>
<parallel>methods</parallel>
<threadCountMethods>2</threadCountMethods>
</configuration>
</plugin>
</plugins>
</build>
ExampleTest.class
public class ExampleTest {
@Test
public void one() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void two() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void three() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void four() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void five() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void six() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void seven() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void eight() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void nine() throws InterruptedException {
Thread.sleep(5000);
}
@Test
public void ten() throws InterruptedException {
Thread.sleep(5000);
}
}
我希望使用提供的 pom 配置完整 运行 这个 class 需要多于 25 秒(10 睡 5 秒 运行宁两个在一次)。实际运行时间是5秒多一点:
Tests run: 10, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 5.022 sec - in ExampleTest
更改 threadCountMethods 道具对 运行time 没有影响(看起来所有方法都在并行进行,而不考虑 threadCount 道具)。
如有任何意见,我们将不胜感激;谢谢!
所以在进一步挖掘之后,我发现了一个名为 perCoreThreadCount
的小 属性,找到了 here。如果未指定,该道具默认为 true
。我的机器上总共有 8 个内核,每个内核 2 个线程(来自问题中的原始 pom 配置)意味着最多 16 个样本测试可以在 5 秒内 运行。将该道具和设置值添加到 pom 中的 false
解决了所有问题!