Est-il un moyen de “fail fast” pour junit avec le maven plugin surefire?
Je suis actuellement en train de travailler sur un projet java avec maven. Nous utilisons le maven plugin surefire pour exécuter notre junit suite dans le cadre du processus de construction.
Notre suite de test est en pleine expansion, à la fois de couverture et de temps d'exécution. Le temps d'exécution est très frustrant et le temps lorsque vous vous retrouvez en attente de dix minutes pour qu'un test a échoué dans les premières minutes de l'essai.
Je voudrais trouver un moyen de rendre le processus de construction de l'échec lors de la première d'erreur ou d'échec dans la suite de test. Je sais que c'est possible pour d'autres outils de construction, mais j'ai été incapable de trouver un moyen de le faire avec maven infaillible.
Je sais qu'il y a résoudre un billet pour cette fonctionnalité dans la surefire jira, mais j'espère qu'il existe une solution pour ce.
Vous devez vous connecter pour publier un commentaire.
À compter du 6 septembre 2015 il semble qu'il y est,
-Dsurefire.skipAfterFailureCount=1
.À compter du 19 octobre 2015 la version 2.19 a été publié.
Autant que je sache, pas, et cela nécessite la résolution de SUREFIRE-580. Si tu veux faire arriver plus vite, vous devriez au moins voter pour la question et, le cas échéant, soumettre un patch 😉
Il peut être adapté solution de contournement, mais ça dépend de vos exigences et vous devez utiliser un serveur CI, qui peut gérer des processus de jvm des codes de retour.
L'idée de base est d'arrêter de Maven du processus de JVM complètement et laisser le système d'exploitation de savoir que le processus s'est arrêté de façon inattendue. Ensuite, un serveur d'intégration continue comme Jenkins/Hudson devrait être en mesure de vérifier un code de sortie non nulle et vous laisser savoir qu'un test a échoué.
La première étape est de faire de surefire de sortie de la JVM lors de la première échec du test. Vous pouvez le faire avec JUnit 4.7 ou plus à l'aide d'un custom
RunListener
(le mettre dans src/test/java):Ensuite, vous devez configurer cette classe de manière infaillible va enregistrer avec JUnit 4 Runner. Modifier votre
pom.xml
et ajouter lelistener
propriété de configuration pour le maven-surefire-plugin. Vous aurez aussi besoin de configurer infaillible pour ne pas la fourche d'un nouveau processus de JVM pour l'exécution des tests. Sinon, il suffit d'aller sur le test suivant les cas.Si cela ne fonctionne pas, je vais l'essayer à la fourchette le maven infaillible junit fournisseur de plugin.
Btw, tests unitaires, par définition, doit courir plus vite que de 0,1 secondes. Si votre build vraiment prend tellement de temps en raison de l'unité de tests, vous aurez à faire courir plus vite dans le futur.
Vous pouvez exécuter
maven
avec--fail-fast
option:un exemple peut être:
mvn clean test -ff
http://books.sonatype.com/mvnref-book/reference/running-sect-options.html
Quelques moyens de l'accélérer si pas exactement ce dont vous avez besoin:
Si c'est un multi module de construction, ajouter
--fail-fast à la ligne de commande à l'abandon après le premier module.
Regarder en failsafe à se déplacer sur de longues
l'exécution des tests d'intégration sur un
les différentes phase du cycle de vie.
Regarder dans un profil en fonction de la solution rapide et lente, des essais d'
Est-il un moyen de dire infaillible pour sauter des tests dans un paquet?.
--fail-fast
est le comportement par défaut.Ce n'est pas une réponse directe à la question, mais il peut également être utile pour nourrir la sortie de maven par grep, à dépouiller la plupart des choses et vous aider à voir où le test échecs.
Comme ceci:
Qui produit une sortie (pour mon code) comme ceci:
Beaucoup plus facile de voir où la première erreur de l'échec.
Cela ne résout pas la question exactement, mais la solution que mon lieu de travail, en fin de compte a été d'utiliser Atlassian du Trèfle à exécuter des compositions spécialisées de juste des tests relatifs à des changements de code.
Nous avons un Trèfle à construire, qui exécute des tests pour le code modifié et, à son tour lance le test complet de construire.
Ce qui s'est avéré être une solution satisfaisante.