2013-11-15 11 views
5

Der Kontext Ich habe eine Test Suite mit Java, JUnit und Selenuim WebDriver implementiert, um das Testen einer Web Application zu automatisieren. Die Test Suite wird als Maven-Job in Jenkins bereitgestellt, der sich bei Änderungen an der TestSuite oder dem SUT neu erstellt. Jenkins betreibt auch die TestSuite für eine Reihe von Top-Level-Maven-Jobs für Testfälle, um das Zielsystem unter Verwendung verschiedener Browser sowohl nach Zeitplan als auch nach Bedarf kontinuierlich zu testen. Das Surefire-Plugin wird verwendet, um die Testergebnisse sichtbar zu machen und das Emma-Plugin für die Testabdeckung.Verknüpfung der Surefire Testergebnisse mit WebDriver Screenshots innerhalb von Jenkins

Wenn ein JUnit @Test fehlschlägt (d. H. Einen Fehler im SUT erkennt, keinen Fehler in der Testsuite), erstellt die Suite einen Screenshot des Browsers, der in einem Ordner unter dem Jenkins-Arbeitsbereich gespeichert wird. Der Screenshot-Dateiname ist eine UUID, die im Testprotokoll aufgezeichnet wird. Das alles funktioniert insgesamt sehr gut.

Die Frage Die Screenshots sind sichtbar, indem Sie über Jenkins UI in den Arbeitsbereich bohren. Dies ist jedoch ein schwerfälliger Mechanismus. Ich möchte einen Weg innerhalb der Jenkins-Benutzeroberfläche finden, um entweder die Surefire-Ergebnisse und/oder die Konsolenausgabe mit einem bestimmten Screenshot zu verlinken. z.B. indem Sie im Protokoll auf die UUID klicken.

Antwort

3

Ausgezeichnete Frage. Ich habe gerade etwas Ähnliches implementiert. Dies ist zwar nicht genau das, wonach Sie suchen, aber es macht die Screenshots in der Jenkins-Benutzeroberfläche verfügbar (im Gegensatz zum Dateisystemzugriff).

Das erste, was Sie brauchen, ist die Jenkins JUnit Befestigung Plugin: https://wiki.jenkins-ci.org/display/JENKINS/JUnit+Attachments+Plugin

Ich habe eine bestehende Frage heraus einen Fehler in Bezug auf, wo die Dateien nicht in der Lage sind zu betrachten: Jenkins JUnit Attachments Plugin throws 404 for attached files

Ich habe es jedoch geschafft, das Maven-Plugin neu zu kompilieren und es funktionierte. Ich würde Ihnen gerne Anweisungen geben oder Ihnen die kompilierte .hpi-Datei senden (es handelt sich um eine einzeilige Änderung).

Grundsätzlich schließe ich diesen Code in meinen Tests einen Screenshot zu erfassen, wenn der Test nicht bestanden (und es im richtigen Verzeichnis speichern (wie durch die Befestigung Plugin erforderlich) Er benennt auch den Screenshot nach dem gescheiterten Test.

@Rule 
public TestRule watcher = new TestWatcher() { 
    @Override 
    public void finished(Description description) { 
     driver.quit(); 
    } 

    @Override 
    public void failed(Throwable e, Description description) { 
     try { 
      File screenshot = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 

      String filePathRoot = "C:\\_Jenkins\\workspace\\" + jenkinsJobName + "\\target\\surefire-reports\\"; 
      String fullFilePath = filePathRoot + description.getClassName() + "\\" + description.getMethodName() + ".jpg"; 

      FileUtils.copyFile(screenshot, new File(fullFilePath)); 
     } catch(Exception ex) { 
      System.out.println(ex.toString()); 
      System.out.println(ex.getMessage()); 
     } 

     driver.quit(); 
    } 
}; 

Wenn der Test erfolgreich geschieht, wird das „fertige“ Methode anstelle genannt.

das Endergebnis ein Screenshot einer jenkins bauen, wenn ein Test nicht angebracht ist.

nb Alle meine Tests sind Führen Sie eine Windows 7-VM aus (Slave), also ist jeder Pfad, den Sie sehen, speziell für Windows.

1

Ich denke, dass Sie Junit-Berichte erweitern müssen. Dies ist bereits beantwortet here. Nebenbei bemerkt, UI-Tests sind Akzeptanztests und ein BDD-Framework wie Gurke passt perfekt zu ihnen. Werfen Sie einen Blick auf Cucumber-JVM, es ist eng mit Junit integriert und bietet eine hervorragende Unterstützung für die Einbettung von Screenshots in den Bericht usw. Es gibt auch eine gute Sichtbarkeit Ihrer Tests für Geschäftsleute mit jenkins Plugins wie this.

+0

Vielen Dank für Ihre Eingabe, ich habe diese Antwort bereits gesehen und es gilt für die Verwendung von Ameisen zu bauen, die meine Situation nicht abdeckt, seit ich maven benutze. –