Java >> Java Tutorial >  >> Java

Generieren von Selenium-Testberichten mit TestProject OpenSDK

Nachdem Sie Tests geschrieben haben, die das TestProject OpenSDK und JUnit 5 verwenden, möchten Sie diese höchstwahrscheinlich ausführen. Wenn Sie Ihre Tests ausführen, generiert die TestProject-Plattform Testberichte, die im Reporting-Dashboard veröffentlicht werden.

Dieser Blogbeitrag bietet eine Einführung in die Testberichte, die von der TestProject-Plattform generiert werden, und beschreibt, wie Sie die Informationen anpassen können, die in den generierten Testberichten angezeigt werden.

Nachdem Sie diesen Blogbeitrag gelesen haben, werden Sie:

  • Verstehen Sie, welche Art von Testberichten von der TestProject-Plattform generiert werden, wenn Sie Tests ausführen, die TestProject OpenSDK und JUnit 5 verwenden.
  • Wissen Sie, warum Sie die von der TestProject-Plattform generierten Testberichte anpassen sollten.
  • Kann die Informationen anpassen, die in den generierten Testberichten angezeigt werden.

Fangen wir an.

Einführung in TestProject OpenSDK-Testberichte

Wenn Sie Ihre Tests ausführen, sendet der TestProject-Agent Testausführungsdaten an die TestProject-Plattform. Die TestProject-Plattform generiert Testberichte unter Verwendung der Testausführungsdaten und veröffentlicht die generierten Testberichte auf dem Reporting-Dashboard.

Einige Testausführungsdaten werden jedoch vom TestProject OpenSDK generiert. Diese Daten umfassen den Namen des Projekts, den Namen des Jobs und den Namen des aufgerufenen Tests. Wenn das TestProject OpenSDK diese Informationen sammelt, folgt es diesen Regeln:

  • Der Name des Projekts ist gleich dem Paketnamen Ihrer Testklasse.
  • Der Name des Jobs ist gleich dem Namen Ihrer Testklasse.
  • Der Name des Tests entspricht dem Namen Ihrer Testmethode.

Ein Testbericht, der von der TestProject-Plattform generiert wird, hat folgende Abschnitte:

  • Der Ausführungsverlauf Im Abschnitt können Sie den Auftragsausführungsverlauf des ausgewählten Projekts anzeigen.
  • Die Browserstatistik Abschnitt identifiziert die Webbrowser, die verwendet wurden, um die Tests des aufgerufenen Jobs auszuführen.
  • Die allgemeine Statistik Abschnitt enthält die grundlegenden Statistiken des aufgerufenen Jobs. Sie können den Testbericht auch im PDF-Format exportieren, indem Sie auf die Links in diesem Abschnitt klicken.
  • Die aufgerufenen Testmethoden Abschnitt zeigt die Testmethoden an, die während des aufgerufenen Jobs ausgeführt wurden.
  • Die Schritte der ausgewählten Tests Abschnitt zeigt die Schritte der ausgewählten Testmethode an. Diese Informationen werden vom TestProject-Agenten gesammelt, der sie an die TestProject-Plattform sendet.

Die folgende Abbildung veranschaulicht das Layout des Testberichts, der von der TestProject-Plattform generiert wird, wenn Sie die Beispieltests aus meinem vorherigen Blogbeitrag ausführen:

Als Nächstes erfahren Sie, warum Sie Ihre Testberichte anpassen sollten.

Warum sollten Sie Ihre Testberichte anpassen?

Die von der TestProject-Plattform generierten Standard-Testberichte sind sehr nützlich, aber wenn Sie möchten, können Sie sie auch an Ihre Anforderungen anpassen. Beispielsweise verwenden die Standardberichte technische Sprache anstelle von natürlicher Sprache, und da eines der Ziele des Testens darin besteht, Informationen mit verschiedenen Anteilseignern (die nicht unbedingt Entwickler oder Tester sein müssen) zu teilen, können Sie Ihre Testberichte leichter lesbar machen. Sie können dieses Ziel erreichen, indem Sie diese Regeln befolgen:

  • Verwenden Sie den Namen Ihres Projekts oder den Namen der getesteten Komponente als Namen Ihres Projekts, der im Testbericht angezeigt wird . Die Wahl zwischen diesen beiden Optionen hängt davon ab, wie Sie Ihre Testergebnisse teilen möchten. Wenn Sie beispielsweise ein kleines Projekt haben, das nicht zu viele Testklassen (auch bekannt als Jobs) hat, sollten Sie den Namen Ihres Projekts als Namen des Projekts verwenden, das im Testbericht angezeigt wird. Wenn Sie andererseits ein großes Projekt mit mehreren großen Komponenten haben, kann es sinnvoll sein, den Namen der getesteten Komponente als Namen des Projekts zu verwenden, der im Testbericht angezeigt wird.
  • Beschreiben Sie die getestete Funktion und verwenden Sie diese Beschreibung als Namen des Jobs . Wenn Sie diese Regel befolgen, stellen Sie den Kontext für die Tests bereit, die ausgeführt werden, wenn der Job aufgerufen wird. Mit anderen Worten, es ist leicht zu erkennen, dass die Tests des Jobs sicherstellen, dass das Feature X wie erwartet funktioniert.
  • Verwenden Sie das erwartete Ergebnis als Namen des Tests . Wenn Sie diese Regel befolgen, können Sie leicht herausfinden, was schief gelaufen ist, wenn ein Testfall fehlschlägt.

Fahren wir fort und finden Sie heraus, wie Sie die Testausführungsdaten anpassen können, die von TestProject OpenSDK generiert werden.

Anpassen der vom TestProject OpenSDK generierten Testausführungsdaten

Wie Sie sich erinnern, generiert das TestProject OpenSDK den Namen des Projekts, den Namen des Jobs und den Namen des aufgerufenen Tests. Wenn Sie die generierten Werte durch benutzerdefinierte Werte ersetzen möchten, müssen Sie die folgenden Schritte ausführen:

  1. Konfigurieren Sie den Namen des Projekts, indem Sie withProjectName() aufrufen Methode des DriverBuilder<T> Klasse.
  2. Konfigurieren Sie den Namen des Jobs, indem Sie Ihre Testklasse mit @DisplayName annotieren Anmerkung.
  3. Konfigurieren Sie die Namen Ihrer Tests, indem Sie Ihre Testmethoden mit dem @DisplayName kommentieren Anmerkung.

Nachdem Sie die erforderlichen Änderungen an Ihrer Testklasse vorgenommen haben, sieht der Quellcode wie folgt aus:

package net.petrikainulainen.testproject.opensdk;

import io.testproject.sdk.DriverBuilder;
import io.testproject.sdk.drivers.web.ChromeDriver;
import org.junit.jupiter.api.*;
import org.openqa.selenium.chrome.ChromeOptions;

@DisplayName("Search blog posts")
class BlogSearchTest {

    private static ChromeDriver driver;

    @BeforeAll
    static void configureTestProjectOpenSDK() {
        driver = new DriverBuilder<ChromeDriver>(new ChromeOptions())
                .withCapabilities(new ChromeOptions())
                .withProjectName("TestProject OpenSDK Tutorial")
                .build(ChromeDriver.class);
    }

    @Nested
    @DisplayName("When no search results are found")
    class WhenNoSearchResultsAreFound {

        @Test
        @DisplayName("Should display an empty search result page when no search results are found")
        void shouldDisplayEmptySearchResultPage() {
            //Omitted on purpose
        }
    }

    @Nested
    @DisplayName("When one search result is found")
    class WhenOneSearchResultIsFound {

        @Test
        @DisplayName("Should display search result page that has one search result when one search result is found")
        void shouldDisplaySearchResultPageWithOneSearchResult() {
            //Omitted on purpose
        }

        @Test
        @DisplayName("Should display search result page that has the correct search result when one search result is found")
        void shouldDisplaySearchResultPageWithCorrectSearchResult() {
            //Omitted on purpose
        }
    }

    @AfterAll
    static void shutdownTestProjectOpenSDK() {
        driver.quit();
    }
}

Die folgende Abbildung veranschaulicht das Layout des Testberichts, der von der TestProject-Plattform generiert wird, wenn Sie Ihre Tests ausführen:

Als Nächstes erfahren Sie, wie Sie die manuelle Berichterstellung verwenden.

Manuelle Berichterstellung verwenden

Wenn Sie maximale Flexibilität benötigen, können Sie die manuelle Berichterstellung verwenden. Diese Technik ist äußerst nützlich, wenn:

  • Sie möchten die Namen dynamischer JUnit 5-Tests konfigurieren.
  • Sie möchten die Schrittbeschreibungen anpassen, die in einem Testbericht angezeigt werden.

Wenn Sie die automatische Berichterstellung durch eine manuelle Berichterstellung ersetzen möchten, müssen Sie die folgenden Änderungen an Ihrer Testklasse vornehmen:

  1. Deaktivieren Sie die automatische Meldung von Testmethoden, indem Sie disableTestAutoReports() aufrufen Methode des Reporter Klasse.
  2. Deaktivieren Sie das automatische Melden von Schritten, indem Sie den disableCommandReports() aufrufen Methode des Reporter Klasse.
  3. Verwenden Sie den try-with-resources -Anweisung und deklarieren Sie einen neuen ClosableTestReport Objekt durch Aufrufen von test() Methode der Reporter Klasse. Wenn Sie test() aufrufen -Methode müssen Sie den Namen des Tests als Methodenparameter übergeben. Sie müssen den try-with-resources verwenden -Anweisung, weil sie sicherstellt, dass der Testfehler an die TestProject-Plattform gemeldet wird, wenn Ihr Testcode eine Ausnahme auslöst.
  4. Verschieben Sie den von Ihrer Testmethode gefundenen Code in den Codeblock, der auf try-with-resources folgt Aussage.
  5. Identifizieren Sie die Schritte Ihres Testfalls, indem Sie step() aufrufen Methode des Reporter Klasse. Wenn Sie diese Methode aufrufen, müssen Sie die Beschreibung des Schritts als Methodenparameter übergeben.
  6. Markieren Sie Ihren Test als bestanden, indem Sie setResult() aufrufen Methode des ClosableTestReport Klasse. Denken Sie daran, dass dieser Methodenaufruf die letzte Zeile des Codeblocks sein muss, der auf try-with-resources folgt Aussage.

Nachdem Sie die erforderlichen Änderungen an Ihrer Testklasse vorgenommen haben, sieht der Quellcode wie folgt aus:

import io.testproject.sdk.DriverBuilder;
import io.testproject.sdk.drivers.web.ChromeDriver;
import io.testproject.sdk.internal.reporting.ClosableTestReport;
import org.junit.jupiter.api.*;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeOptions;

import java.util.List;

import static org.assertj.core.api.Assertions.assertThat;

@DisplayName("Manual: search blog posts")
class ManualReportingExampleTest {

    private static ChromeDriver driver;

    @BeforeAll
    static void configureTestProjectOpenSDK() {
        driver = new DriverBuilder<ChromeDriver>(new ChromeOptions())
                .withCapabilities(new ChromeOptions())
                .withProjectName("TestProject OpenSDK Tutorial")
                .build(ChromeDriver.class);

        driver.report().disableTestAutoReports(true);
        driver.report().disableCommandReports(true);
    }

    @Nested
    @DisplayName("When no search results are found")
    class WhenNoSearchResultsAreFound {

        @Test
        @DisplayName("Should display an empty search result page")
        void shouldDisplayEmptySearchResultPage() {
            try (ClosableTestReport testReport = driver.report().test("No search results: should display an empty search result page")) {
                driver.get("https://www.petrikainulainen.net/blog/");
                driver.report().step("Open the page: https://www.petrikainulainen.net/blog/");

                WebElement searchField = driver.findElement(By.id("s"));
                driver.report().step("Find the search form from the sidebar");

                searchField.sendKeys("noresults");
                searchField.sendKeys(Keys.ENTER);
                driver.report()
                        .step("Perform the search by using the search term: noresults");

                WebElement noResultElement = driver.findElement(
                        By.cssSelector(
                                ".template-search .content .post_box .archive_content"
                        )
                );
                assertThat(noResultElement.getText()).isEqualTo("No results found.");
                driver.report()
                        .step("Ensure that the search result page displays the text: No results found.");

                testReport.setResult(true);
            }
        }
    }

    //The other tests are omitted on purpuse

    @AfterAll
    static void shutdownTestProjectOpenSDK() {
        driver.quit();
    }
}

Die folgende Abbildung veranschaulicht das Layout des Testberichts, der von der TestProject-Plattform generiert wird, wenn Sie Ihre Tests ausführen:

Sie verstehen, welche Art von Testberichten von der TestProject-Plattform generiert werden, wenn Sie Ihre Tests durchführen, und Sie wissen, wie Sie die generierten Testberichte anpassen können. Fassen wir zusammen, was Sie aus diesem Blogbeitrag gelernt haben.

Zusammenfassung

Dieser Blogpost hat Ihnen neun Dinge beigebracht:

  • Da das Ziel des Testens darin besteht, Informationen mit verschiedenen Aktionären zu teilen, sollten Sie Ihre Testberichte so einfach wie möglich lesbar gestalten, indem Sie Fachsprache durch natürliche Sprache ersetzen.
  • Sie sollten den Namen des Projekts konfigurieren, indem Sie withProjectName() aufrufen Methode des DriverBuilder<T> Klasse.
  • Sie sollten den Namen des Jobs konfigurieren, indem Sie Ihre Testklasse mit dem @DisplayName annotieren Anmerkung.
  • Sie sollten die Namen Ihrer "normalen" (nicht dynamischen) Tests konfigurieren, indem Sie Ihre Testmethoden mit dem @DisplayName kommentieren Anmerkung.
  • Sie sollten die manuelle Berichterstellung verwenden, wenn Sie die Testnamen von dynamischen JUnit 5-Tests melden oder die in einem Testbericht angezeigten Schrittbeschreibungen anpassen möchten.
  • Wenn Sie die manuelle Berichterstellung verwenden, müssen Sie die automatische Berichterstellung von Testmethoden und Testschritten deaktivieren.
  • Wenn Sie die manuelle Berichterstellung verwenden, müssen Sie den try-with-resources verwenden -Anweisung, wenn Sie einen neuen ClosableTestReport deklarieren Objekt, weil der try-with-resources -Anweisung stellt sicher, dass der Testfehler an die TestProject-Plattform gemeldet wird, wenn Ihr Testcode eine Ausnahme auslöst.
  • Wenn Sie die manuelle Berichterstellung verwenden, können Sie die Schritte Ihres Testfalls identifizieren, indem Sie step() aufrufen Methode des Reporter Klasse.
  • Wenn Sie die manuelle Berichterstellung verwenden, können Sie Ihren Test als bestanden markieren, indem Sie den setResult() aufrufen Methode des ClosableTestReport Klasse.

Java-Tag