Previously I was using Maven+Selenide+JUnit4 for my tests and it was fine, parallel running worked perfectly. Example:
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>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>
And in Jenkins job I was able to run tests (example below)
mvn -Dtest=TestClassName test
My tests were running in 4 browsers.
Before I switched to JUnit5, because I would like to use running tests by tags, for example
@Test
@Tag("smoke")
public void test1() {}
And run all tests which marked as 'smoke' by next command:
mvn -Dtag=smoke test
But I got next problem: parallel execution does not work and I still did not find solution. I found this bug https://github.com/junit-team/junit5/issues/1424
How can I run tests in parallel with JUnit5?
I have tried to use in pom.xml
<forkCount>2</forkCount>
<reuseForks>true</reuseForks>
<parallel>all</parallel>
It did not help, I have created a file junit-platform.properties and insert there
junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.config.strategy = fixed
But anyway I was not able to solve this problem.
Yes, in this post, I will explain to you how to use JUnit 5 Parallel Test Execution feature. This is an experimental feature of JUnit 5 and it will come from after JUnit 5.3. To enable parallel execution, simply set the junit.
A plugin that allows you to run JUnit4 tests in parallel (using multiple CPU cores/threads).
Parallel Testing is a process to leverage automation testing capabilities by allowing the execution of the same tests simultaneously in multiple environments, real device combinations, and browser configurations.
Once the parallel execution property is set (or enabled), the JUnit Jupiter engine will run the tests in parallel as per the configurations provided with the synchronization mechanisms.
Finally I found solution.
On Maven+JUnit5 parallel execution will work only by classes (not by methods as I get used to have in JUnit4)
How it can be implemented:
Just put these 2 strings in your pom.xml
:
<forkCount>4</forkCount>
<reuseForks>false</reuseForks>
Example:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>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>
<artifactId>junit-platform-surefire-provider</artifactId>
<version>${junit.platform.version}</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>${junit.jupiter.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven.surefire</groupId>
<artifactId>surefire-logger-api</artifactId>
<version>${surefire-logger-api}</version>
</dependency>
</dependencies>
</plugin>
For instance you have 3 classes with tests, so after running from console current tests will be created 3 instances of your browser (one for each class) and inside each class tests will be executed by consistently, but classes are executed parallel.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With