J'utilise JUnit 4.4 et Maven et j'ai un grand nombre de tests d'intégration de longue durée.
En ce qui concerne la parallélisation des suites de tests, il existe quelques solutions qui me permettent d'exécuter chaque méthode de test dans une seule classe de test en parallèle. Mais tout cela nécessite que je change les tests d'une manière ou d'une autre.
Je pense vraiment que ce serait une solution beaucoup plus propre d'exécuter X classes de test différentes dans des threads X en parallèle. J'ai des centaines de tests, donc je ne me soucie pas vraiment de threading des classes de test individuelles.
Y a-t-il un moyen de faire ça?
Depuis junit 4.7, il est désormais possible d'exécuter des tests en parallèle sans utiliser TestNG. En fait, cela est possible depuis la version 4.6, mais un certain nombre de corrections apportées à la version 4.7 en feront une option viable. Vous pouvez également exécuter des tests parallèles avec spring, que vous pouvez lire ici
la source
Inspiré par le coureur expérimental ParallelComputer de JUnit, j'ai construit mes propres coureurs ParallelSuite et ParallelParameterized . En utilisant ces coureurs, on peut facilement paralléliser des suites de tests et des tests paramétrés.
ParallelSuite.java
ParallelParameterized.java
L'utilisation est simple. Il suffit de changer @RunWith la valeur de l'un de ces parallèles * classes.
la source
tempus-fugit propose quelque chose de similaire, consultez la documentation pour plus de détails. Il repose sur JUnit 4.7 et vous marquez simplement votre test sur
@RunWith(ConcurrentTestRunner)
.À votre santé
la source
Vous pouvez consulter la bibliothèque open source - Test Load Balancer . Il fait exactement ce que vous demandez - exécutez différentes classes de test en parallèle. Cela s'intègre au niveau ant-junit afin que vous n'ayez pas à modifier vos tests de toute façon. Je suis l'un des auteurs de la bibliothèque.
Pensez également à ne pas les exécuter dans des threads car vous pourriez avoir besoin d'un bac à sable au niveau du processus. Par exemple, si vous atteignez une base de données dans vos tests d'intégration, vous ne voulez pas qu'un test échoue car un autre test a ajouté des données dans un thread différent. La plupart du temps, les tests ne sont pas écrits dans cet esprit.
Enfin, comment avez-vous résolu ce problème jusqu'à présent?
la source
TestNG peut le faire (c'était mon premier réflexe - puis j'ai vu que vous aviez déjà beaucoup de tests).
Pour JUnit, regardez parallel-junit .
la source
Vous pouvez exécuter les tests en parallèle à l'aide de ParallelComputer fourni par Junit lui-même. Voici un petit extrait pour vous aider à démarrer.
Cela vous aidera lorsque vous aurez besoin d'exécuter des tests à partir du code car il n'a aucune dépendance sur Maven ou tout autre outil de gestion de build.
Veuillez noter que cela exécutera tous les cas de test en parallèle, si vous avez des dépendances entre différents cas de test, cela peut entraîner des faux positifs. Vous NE DEVRIEZ PAS avoir de tests interdépendants de toute façon.
la source
Autre choix: Punner, un nouveau plugin junit runner et maven parallèle. Vous n'avez pas besoin de changer votre code, copiez-le dans votre pom.xml:
Punner peut exécuter des méthodes de test en parallèle, peut conserver les sorties de test séparément et nettoyer.
Punner réduira les sorties de votre console mvn, comme ceci:
Punner produit des sorties compatibles infaillibles, vous pouvez également obtenir des données de journal brutes et un rapport au format de démarque à partir du répertoire des rapports:
Punner est mon projet personnel, j'ai écrit Punner pour accélérer la phase de test unitaire de certains autres projets tels que le framework IPC, le verrouillage fin, le service de journal, le moteur de flux de travail distribué, etc. Cela a économisé beaucoup de temps d'attente.
Punner ne prend pas encore en charge certaines fonctionnalités avancées. Je suis très heureux si vous pouviez l'essayer et me faire part de vos commentaires.
la source
Vous pouvez changer votre test en test TestNg en une minute (il vous suffit de changer les importations), TestNG est le meilleur des tests en parallèle.
la source
Vous pouvez essayer Gridgain qui vous permet d'exécuter la distribution de vos tests sur une grille de calcul.
la source