Any way to run JUnit5 tests in parallel?
以前,我在测试中使用的是Maven Selenide JUnit4,它很好,并行运行效果很好。示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> maven-surefire-plugin</artifactId> <version>${maven.surefire.plugin}</version> <configuration> <parallel>all</parallel> <perCoreThreadCount>true</perCoreThreadCount> <threadCount>4</threadCount> <perCoreThreadCount>false</perCoreThreadCount> <redirectTestOutputToFile>true</redirectTestOutputToFile> </configuration> </plugin> |
在Jenkins的工作中,我能够运行测试(下面的示例)
1 | mvn -Dtest=TestClassName test |
我的测试在4个浏览器中运行。
在切换到JUnit5之前,因为我想使用通过标签运行的测试,例如
1 2 3 | @Test @Tag("smoke") public void test1() {} |
并运行所有由下一个命令标记为"烟雾"的测试:
1 | mvn -Dtag=smoke test |
但是我遇到了下一个问题:并行执行不起作用,我仍然没有找到解决方案。
我发现了这个错误https://github.com/junit-team/junit5/issues/1424
如何与JUnit5并行运行测试?
我试图在pom.xml中使用
1 2 3 | <forkCount>2</forkCount> <reuseForks>true</reuseForks> <parallel>all</parallel> |
这没有帮助,我创建了一个文件junit-platform.properties并在其中插入
1 2 | junit.jupiter.execution.parallel.enabled = true junit.jupiter.execution.parallel.config.strategy = fixed |
但是无论如何我都无法解决这个问题。
最后我找到了解决方法。
在Maven JUnit5上,并行执行仅适用于类(不适用于我在JUnit4中常用的方法)
如何实施:
只需将这两个字符串放入您的
1 2 | <forkCount>4</forkCount> <reuseForks>false</reuseForks> |
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <plugin> <groupId>org.apache.maven.plugins</groupId> maven-surefire-plugin</artifactId> <version>2.22.0</version> <configuration> <forkCount>4</forkCount> <reuseForks>false</reuseForks> <properties> <includeTags>${tag}</includeTags> </properties> </configuration> <dependencies> <dependency> <groupId>org.junit.platform</groupId> junit-platform-surefire-provider</artifactId> <version>${junit.platform.version}</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> junit-jupiter-engine</artifactId> <version>${junit.jupiter.version}</version> </dependency> <dependency> <groupId>org.apache.maven.surefire</groupId> surefire-logger-api</artifactId> <version>${surefire-logger-api}</version> </dependency> </dependencies> </plugin> |
例如,您有3个带有测试的类,因此从控制台运行后,将创建3个浏览器实例(每个类一个),并且在每个类内部,测试将由一致地执行,但类是并行执行的。