Maven surefire plugin exécute-t-il des tests en utilisant plusieurs threads?
Je me demandais si le Maven plugin surefire exécute des tests multi-thread par défaut (et si oui, le nombre de threads être contrôlé? ) ou s'il exécute des tests à partir de l'Essai de différentes catégories dans un ordre aléatoire ou prévisible de l'ordre, ou si la commande ne peut dicté par certains moyens.
Je n'ai pas vérifié encore (je vais le faire demain, il suffit de regarder pour certains chefs de guidage et la vérification sur ce point), mais il semble comme si mes différents Test JUnit classes sont l'obtention de l'exécution des tests dans certains mélangés commande. Ce qui en fait une vraie douleur pour orchestrer la création de ressources de test (qui sont assez lourdes dans mon cas).
C'est probablement un problème classique je lance ma suite avec l'Eclipse, JUnit coureur et tout fonctionne très linéaire et joue de nice. Je vais à Maven en ligne de cmd et de choses semble être le renforcement de tous les uns les autres.
source d'informationauteur harschware
Vous devez vous connecter pour publier un commentaire.
Par défaut, Maven s'exécute vos tests dans un document distinct ("en fourche"), rien de plus (ce qui peut être contrôlé à l'aide de la
forkMode
paramètre facultatif).Si vous utilisez TestNG ou Junit 4.7+ (depuis
SUREFIRE-555), il est possible d'exécuter des tests en parallèle (voir laparallèle
et lathreadCount
paramètres facultatifs) mais ce n'est pas un défaut.Maintenant, alors je ne sais pas si le plugin surefire a le même comportement que JUnit, il est possible d'obtenir un certain contrôle par la création manuelle d'un
TestSuite
et de spécifier l'ordre dans lequel les tests sont exécutés:Vous sont cependant fortement conseillé de ne jamais dépendre ordre d'exécution des tests, des tests unitaires doit être vraiment bien indépendants.
P. S.: Juste au cas où, il y a aussi cette demande SUREFIRE-321 (pour exécuter les tests dans l'ordre alphabétique) et que vous souhaitez voter pour.
Tout d'abord, des tests unitaires doivent être indépendants les uns des autres. C'est parce que l'ordre d'exécution n'est pas garanti, même par JUnit, de sorte que chaque essai doit le montage et le démontage de son contexte (aka test fixture) est indépendant de ce qui se passe avant ou après.
L'ordre d'exécution n'est certainement pas le fruit du hasard si, dans JUnit, elle tend à être le même (j'imagine que l'ordre alphabétique), mais vous ne devrait pas construire sur il - elle peut changer à tout moment, et apparemment Infaillible dans l'ordre est différent.
Voici un bon lien sur pourquoi interaction des tests ne sont pas une bonne idée.
JUnit exécute les tests dans l'ordre dans lequel ils apparaissent dans le .fichier java (pas par ordre alphabétique). Maven-surefire exécute dans un ordre différent, mais pas de façon prévisible (autant que je puisse en dire).
Idéalement, les tests soient indépendants l'un de l'autre, mais les singletons et de contexte statique peut compliquer les choses. Un bon moyen d'obtenir de nouveaux statique de contextes entre les exécutions de séparer les cas de test (mais pas les tests) est de définir les forkMode variable dans votre pom.xml..
<forkMode></forkMode>
J'ai trouvé que si vous utilisez l'option-T de votre commande maven, Surefire sera alors fourche, dans
forkCount * <specified number of threads by the -T option>
nombre de processus simultanés.Pour tous les faire exécuter dans un processus malgré le fait d'avoir plusieurs threads spécifié par -T, vous pouvez forcer forkCount à 0 en ajoutant l'option-Dsurefire.forkCount=0