Ich verwende JUnit 4.4 und Maven und habe eine große Anzahl lang laufender Integrationstests.
Wenn es um die Parallelisierung von Testsuiten geht, gibt es einige Lösungen, mit denen ich jede Testmethode in einer einzelnen Testklasse parallel ausführen kann. Aber all dies erfordert, dass ich die Tests auf die eine oder andere Weise ändere.
Ich denke wirklich, dass es eine viel sauberere Lösung wäre, X verschiedene Testklassen in X Threads parallel auszuführen. Ich habe Hunderte von Tests, daher ist es mir nicht wirklich wichtig, einzelne Testklassen einzufädeln.
Gibt es eine Möglichkeit, dies zu tun?
Ab Junit 4.7 ist es jetzt möglich, Tests ohne TestNG parallel auszuführen. Eigentlich ist es seit 4.6 möglich, aber in 4.7 werden eine Reihe von Korrekturen vorgenommen, die es zu einer praktikablen Option machen. Sie können auch parallele Tests mit der Feder durchführen, über die Sie hier lesen können
quelle
Inspiriert von JUnits experimentellem ParallelComputer- Läufer habe ich meine eigenen ParallelSuite- und ParallelParameterized- Läufer gebaut. Mit diesen Läufern können Testsuiten und parametrisierte Tests leicht parallelisiert werden.
ParallelSuite.java
ParallelParameterized.java
Die Verwendung ist einfach. Ändern Sie einfach den @ RunWith- Annotationswert in eine dieser Parallel * -Klassen.
quelle
tempus-fugit bietet etwas ähnliches, überprüfen Sie die Dokumente für Details. Es basiert auf JUnit 4.7 und Sie markieren einfach Ihren Test mit
@RunWith(ConcurrentTestRunner)
.Prost
quelle
Sie können die Open Source-Bibliothek - Test Load Balancer - auschecken . Es macht genau das, wonach Sie fragen - führen Sie verschiedene Testklassen parallel durch. Dies wird auf der Ant-Junit-Ebene integriert, sodass Sie Ihre Tests ohnehin nicht ändern müssen. Ich bin einer der Autoren der Bibliothek.
Denken Sie auch daran, sie nicht in Threads auszuführen, da Sie möglicherweise eine Sandbox auf Prozessebene benötigen. Wenn Sie beispielsweise in Ihren Integrationstests auf eine Datenbank stoßen, möchten Sie nicht, dass ein Test fehlschlägt, da ein anderer Test einige Daten in einem anderen Thread hinzugefügt hat. In den meisten Fällen werden Tests nicht in diesem Sinne geschrieben.
Wie haben Sie dieses Problem bisher gelöst?
quelle
TestNG kann das (dies war mein erster Reflex - dann habe ich gesehen, dass Sie bereits viele Testfälle haben).
Schauen Sie sich für JUnit Parallel-Junit an .
quelle
Sie können die Tests parallel mit dem von Junit selbst bereitgestellten ParallelComputer ausführen. Hier ist ein kleiner Ausschnitt, um Ihnen den Einstieg zu erleichtern.
Dies ist hilfreich, wenn Sie Tests mit Code ausführen müssen, da keine Abhängigkeiten von Maven oder anderen Build-Management-Tools bestehen.
Bitte beachten Sie, dass dadurch alle Testfälle parallel ausgeführt werden. Wenn Sie Abhängigkeiten zwischen verschiedenen Testfällen haben, kann dies zu Fehlalarmen führen. Sie sollten sowieso keine voneinander abhängigen Tests haben.
quelle
Eine andere Wahl: Punner, ein neuer Parallel Junit Runner und Maven Plugin. Sie müssen Ihren Code nicht ändern, sondern in Ihre pom.xml kopieren:
Punner kann Testmethoden parallel ausführen, Testausgaben separat und sauber halten.
Punner reduziert Ihre MVN-Konsolenausgaben wie folgt:
Punner erzeugt todsichere kompatible Ausgaben. Sie können auch Rohprotokolldaten und einen Bericht im Markdown-Format aus dem Berichtsverzeichnis abrufen:
Punner ist mein persönliches Projekt. Ich habe Punner geschrieben, um die Unit-Test-Phase einiger anderer Projekte wie IPC-Framework, feinkörniges Sperren, Journalservice, verteilte Workflow-Engine usw. zu beschleunigen. Das hat mir viel Wartezeit gespart.
Punner unterstützt noch keine erweiterten Funktionen. Ich bin sehr froh, wenn Sie es versuchen und mir ein Feedback geben könnten.
quelle
Sie können Ihren Test in einer Minute in einen TestNg-Test ändern (Sie müssen nur die Importe ändern). TestNG ist der beste Test für parallele Tests.
quelle
Sie können Gridgain ausprobieren , mit dem Sie Ihre Tests auf ein Rechenraster verteilen können.
quelle