24 Parallelisierung von JUnit-Tests mit Maven Surefire Plugin

Die Parallelisierung von Tests reduziert die Testlaufzeit und steigert die Effizienz. Das Maven Surefire Plugin bietet leistungsfähige Optionen zur parallelen Testausführung mit JUnit und TestNG.


24.1 Grundlegende Konfiguration

Das Plugin wird in der pom.xml konfiguriert:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>3.0.0-M7</version>
            <configuration>
                <parallel>methods</parallel>
                <threadCount>4</threadCount>
            </configuration>
        </plugin>
    </plugins>
</build>

Erläuterung: - parallel: Gibt an, welche Tests parallel laufen: - methods → Testmethoden parallel ausführen. - classes → Testklassen parallel ausführen. - both → Methoden und Klassen parallel ausführen. - threadCount: Anzahl der parallelen Threads.


24.2 Parallelisierungsmodi (parallel-Werte)

Wert Beschreibung
none Standard (keine Parallelisierung).
methods Führt Methoden innerhalb einer Klasse parallel aus.
classes Führt Testklassen parallel aus.
both Führt sowohl Klassen als auch Methoden parallel aus.
suites Führt TestNG-Suiten parallel aus.
all Führt alles parallel aus (Klassen, Methoden, Suiten).

Beispiel für parallele Testklassen:

<configuration>
    <parallel>classes</parallel>
    <threadCount>4</threadCount>
</configuration>

Beispiel für parallele Methoden innerhalb einer Klasse:

<configuration>
    <parallel>methods</parallel>
    <threadCount>4</threadCount>
</configuration>

24.3 Dynamische Thread-Anzahl anhand der CPU-Kerne

Statt einer festen Zahl kann die Anzahl der Threads dynamisch berechnet werden:

<configuration>
    <parallel>methods</parallel>
    <threadCount>${surefire.threads}</threadCount>
</configuration>

Linux/macOS:

mvn test -Dsurefire.threads=$(nproc)

Windows:

mvn test -Dsurefire.threads=%NUMBER_OF_PROCESSORS%

24.4 Erweiterte Steuerung der Parallelisierung

Tests können gezielt über die Kommandozeile ausgeführt werden:

mvn test -Dsurefire.parallel=methods -Dsurefire.threadCount=4

Um fehlschlagende Tests zu wiederholen:

<configuration>
    <rerunFailingTestsCount>2</rerunFailingTestsCount>
</configuration>

24.5 JUnit 5 Parallelisierung (Alternative ohne Surefire)

JUnit 5 erlaubt eine eigene Parallelisierungsstrategie über die Datei junit-platform.properties:

junit.jupiter.execution.parallel.enabled=true
junit.jupiter.execution.parallel.mode.default=concurrent
junit.jupiter.execution.parallel.mode.classes.default=concurrent
junit.jupiter.execution.parallel.config.strategy=fixed
junit.jupiter.execution.parallel.config.fixed.parallelism=4

Diese Konfiguration funktioniert auch ohne Maven Surefire.


24.6 Best Practices für parallele Tests


24.6.1 Weiterführende Informationen

Detaillierte Beispiele und Hintergrundinformationen: - Baeldung: Running JUnit Tests in Parallel with Maven