2016-06-20 10 views
1

Ich habe einen Job A in Jenkins für meinen automatisierten Test, der ausgelöst wird, wenn ein anderer Job B erfolgreich erstellt wurde. Der Job A führt mehrere Tests durch. Einige der Tests sind flockig, also würde ich sie gerne ein paar Mal wieder laufen lassen und ihnen die Chance geben, so zu bestehen, dass mein Build nicht instabil/fehlgeschlagen ist.Flyky JUnit-Test erneut ausführen, falls sie fehlgeschlagen sind

Gibt es ein Plugin, das ich verwenden kann?

+1

Ich denke, die Antwort, die S. Spieker Ihnen gab, ist die einzige, die auf lange Sicht sinnvoll ist. Wenn einige Ihrer Tests nicht zuverlässig sind, dann sollten Sie herausfinden, warum das so ist. und was zu tun ist, um sie stabil zu machen. – GhostCat

Antwort

1

Ich würde vorschlagen, fix Ihre Tests oder schreiben Sie sie neu, so dass sie nur fehlschlagen, wenn etwas kaputt ist. Vielleicht können Sie die Dinge täuschen, die dazu neigen, zu versagen. Wenn Sie eine Datenbankverbindung aufbauen, könnten Sie vielleicht eine sqlite oder Smything verwenden, die lokal ist.

Aber es gibt auch ein Plugin, das einen Build wiederholen kann: https://wiki.jenkins-ci.org/display/JENKINS/Naginator+Plugin

einfach installieren Sie das Plugin, und überprüfen Sie die Post-Build-Aktion „Retry nach Versagen bauen“ auf Ihrer Projektkonfigurationsseite.

Wenn Sie Tests in JUnit-Kontext erneut auszuführen, hier einen Blick: SO: How to Re-run failed JUnit tests immediately?

+0

Danke für die Antwort. Meine Tests bestehen die meiste Zeit. Nur wenige von ihnen nicht. Ich kann die Tests nicht wirklich verspotten, da mein Server in einer ähnlichen Anfrage andere Daten anzeigt und anzeigt. Das Plugin, das du erwähntest, wird schließlich alle Tests erneut ausführen (nicht nur die Tests, die fehlgeschlagen sind), also ist es keine Lösung für mein Problem. – Benjo

+0

Ich habe einen Link zu einer anderen Frage hinzugefügt, die Ihr Problem lösen könnte. –

0

nicht jedes Plugin kennen Sie nur die schuppigen/nicht bestandenen Tests wieder, nur die ganze Build auszuführen. Es sollte möglich sein, ich habe gerade keine gefunden (und habe nicht genug Zeit auf meiner Hand, um eine zu schreiben). Hier ist, was wir auf einem großen Java-Projekt tat, wo die Build wurde ant basiert:

Der Build selbst ziemlich einfach war (xml als Formatierer in der JUnit Ant-Task verwenden):
ant clean compile test

Der Build auch akzeptiert Einzelklassennamen als Parameter (mit batchtest Abschnitt innerhalb der junit ant-Task enthält):
ant -Dtest.class.pattern=SomeClassName test

Am Ende des jenkins Jobs, nutzten wir den „Execute shell“ bauen Schritt. Die Idee war, nach allen Testergebnissen zu suchen, die Fehler oder Fehler hatten, den Namen der Klasse herauszufinden und dann diese bestimmte Testklasse erneut auszuführen. Die Datei, die den Fehler enthält, wird überschrieben, und der Testkollektor am Ende des Builds sieht während der Post-Build-Schritte keinen Flock-Testfehler.

#!/bin/bash +x 
cd ${WORKSPACE} 
for i in $(seq 1 3); do 
    echo "Running failed tests $i time(s)" 
    for file in `find -path '*/TEST-*.xml' | xargs grep 'errors\|failures' | grep '\(errors\|failures\)="[1-9]' | cut -d ':' -f 1`; do 
     class=`basename ${file} .xml | rev | cut -d '.' -f 1 | rev` 
     ant -Dtest.class.pattern=${class} test 
    done 
done 

Nachdem Sie den Build wieder in den Griff bekommen haben, müssen Sie unbedingt die flockigen Tests angehen. Lass dich nicht von dem grünen Build täuschen, es gibt noch viel zu tun.