Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Any way to run JUnit5 tests in parallel?

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.

like image 656
Gordon Freeman Avatar asked Jul 12 '18 14:07

Gordon Freeman


People also ask

Does junit5 run tests in parallel?

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.

Does JUnit 4 run tests in parallel?

A plugin that allows you to run JUnit4 tests in parallel (using multiple CPU cores/threads).

Can we run tests in parallel?

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.

Does JUnit support parallel testing?

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.


1 Answers

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.

like image 171
Gordon Freeman Avatar answered Oct 27 '22 03:10

Gordon Freeman