Comment l'accès de test Junit compte dans Jenkins projet de Pipeline
Je viens de commencer avec Jenkins
Mon freestyle projet de rapport sur les résultats des tests JUnit dans Étale comme ce
MyJenkinsFreestyle - #79 Unstable after 4 min 59 sec (Open)
Test Status:
Passed: 2482, Failed: 13, Skipped: 62
Maintenant que j'ai déménagé de même pour le projet de pipeline, et tous est bon, sauf que Mou notifications n'ont pas de Statut du Test
done MyPipelineProject #68 UNSTABLE
Je comprends que je dois construire le message à envoyer du jeu, et je l'ai fait ci-dessus pour l'instant.
La seule question est de savoir comment dois-je lire le test de statut - le passé comte, nombre d'échecs, etc.
Ceci est appelé "essai de synthèse", dans Jenkins mou-plugin s'engager, et voici la capture d'écran
Alors, comment puis-je accéder à Junit tests comte/détails Jenkins projet de Pipeline ? - de sorte qu'ils sont rapportés dans les notifications.
Mise à JOUR:
Dans le Freestyle de projet, le Mou de la notification elle-même a le "résumé", et il n'y a pas de possibilité de choisir (ou pas) pour le résumé de test.
Dans le projet de Pipeline, mon "junit" commande "de Publier de test JUnit les résultats" avant d'envoyer Mou de la notification.
Donc dans le code, ces lignes ressembler à ceci (ce sont les dernières lignes de la dernière étape):
bat runtests.bat
junit 'junitreport/xml/TEST*.xml'
slackSend channel: '#testschannel', color: 'normal', message: "done ${env.JOB_NAME} ${env.BUILD_NUMBER} (<${env.BUILD_URL}|Open>)";
- Comment il a travaillé dans le vieux FreeStyle d'emploi: a Fait le Mou de la notification de construire plugin construire le résumé de test pour vous? Si oui, avez-vous l'exécutez "Publier le test JUnit résultats" avant de l'envoyer Mou de la notification?
Vous devez vous connecter pour publier un commentaire.
De cette présentation de Cloudbees, j'ai trouvé qu'il devrait être possible via la "construction" de l'objet.
Il a un code comme
Mais currentBuild ne pas donner accès à testResultAction.
Donc continué à chercher et j'ai trouvé ce post "réagir à des tests échoués dans le pipeline de script".
Il y Robert Sandell a donné "conseil pro"
Cela a fonctionné comme un charme - juste que j'ai eu pour désélectionner "Groovy sandbox" case à cocher.
Maintenant que j'ai ces dans le journal de l'
Maintenant, je vais les utiliser pour préparer de la chaîne d'aviser dans le mou avec les résultats d'essai.
Mise à JOUR:
Enfin, la fonction que j'ai utilisé pour obtenir une sortie comme suit
(Note de l ' "échec diff" après l'échec des tests est très utile)
Est la suivante:
Mise à JOUR 2018-04-19
Note le ci-dessus nécessitent manuel "liste blanche" des méthodes utilisées.
Voici comment vous pouvez whitelist toutes les méthodes d'un seul coup
Mettre à jour manuellement la liste blanche...
Sortie Jenkins
Créer/mettre à Jour %USERPROFILE%.jenkins\scriptApproval.xml avec le contenu suivant
import jenkins.model.Jenkins
def scriptApproval = Jenkins.instance.getExtensionList('org.jenkinsci.plugins.scriptsecurity.scripts.ScriptApproval')[0]
scriptApproval.approveSignature('method hudson.model.Cause getShortDescription')
Étendre sur @vikramsjn réponse, voici ce que j'utilise pour obtenir le résumé de test dans mon Jenkinsfile:
Je puis utiliser cette méthode pour instancier mon
testSummary
variable:Ce sera le retour de quelque chose de similaire à:
Tout d'abord, je vous remercie pour les réponses ci-dessus. Ils m'a sauvé beaucoup de temps, j'ai utilisé la solution proposée dans mon pipeline. J'ai cependant de ne pas utiliser la "liste blanche" et il fonctionne très bien.
J'ai utiliser des bibliothèques partagées pour Jenkins pipeline et voici un morceau de la bibliothèque partagée du pipeline et à l'aide de méthodes pour obtenir des points:
p.s. Si je créer emailTestRepot comme une variable locale à l'intérieur de script "section" - je obtenir de l'exception suivante:
J'ai eu beaucoup de mal à essayer de régler ce java.io.NotSerializableException. Ce que j'ai compris que je devais utiliser la "liste blanche" pour prévenir NotSerializableException. Mais je n'ai vraiment pas envie de le faire et quand j'ai déménagé "def emailTestReport" de la conduite qu'il a très bien fonctionné.