Java >> Java Tutorial >  >> Tag >> JUnit

Schreiben von Tests für Webanwendungen mit TestProject OpenSDK und JUnit 5

Nachdem Sie das TestProject OpenSDK mit JUnit 5 integriert haben, können Sie mit dem Schreiben der eigentlichen Testmethoden beginnen. Dieser Blogbeitrag beschreibt, wie Sie mit TestProject OpenSDK und JUnit 5 Tests für Webanwendungen schreiben können.

Nachdem Sie diesen Blogbeitrag gelesen haben, werden Sie:

  • Verstehen, wie Sie eine neue JUnit 5-Testklasse schreiben können, die Testmethoden enthält, die das TestProject OpenSDK verwenden.
  • Kann automatisierte Tests ausführen, die TestProject OpenSDK und JUnit 5 verwenden.

Fangen wir an.

Einführung in das zu testende System

In diesem Blogbeitrag lernen Sie, automatisierte Tests für die Suchfunktion dieses Blogs zu schreiben. Die Anforderungen an die Suchfunktion sind:

Zuerst , das Suchformular wird in der Seitenleiste angezeigt und ist auf jeder Seite sichtbar, die eine Seitenleiste hat. Wenn Sie jedoch automatisierte Tests für die Suchfunktion schreiben, müssen Sie die Startseite dieses Blogs (https://www.petrikainulainen.net/blog/) öffnen, bevor Sie einen Suchbegriff in das Suchformular eingeben.

Die folgende Abbildung identifiziert die Position des Suchformulars:

Zweiter , wenn Sie die Suchfunktion nutzen möchten, müssen Sie den Suchbegriff in das Suchformular eingeben und die Eingabetaste drücken.

Dritter , wenn keine Ergebnisse gefunden werden, zeigt die Suchergebnisseite den Text:'Keine Ergebnisse gefunden.'. Die folgende Abbildung veranschaulicht das Layout der Suchergebnisseite, wenn keine Ergebnisse gefunden werden:

Vierter , wenn Suchergebnisse gefunden werden, zeigt die Suchergebnisseite die gefundenen Suchergebnisse an. Die folgende Abbildung veranschaulicht das Layout der Suchergebnisseite, wenn Suchergebnisse gefunden werden:

Als Nächstes lernen Sie, automatisierte Tests für die Suchfunktion zu schreiben.

Schreibtests für die Suchfunktion

Wenn Sie automatisierte Tests für die Suchfunktion schreiben möchten, müssen Sie die folgenden Schritte ausführen:

Zuerst , müssen Sie eine neue Testklasse erstellen und das TestProject OpenSDK mit JUnit 5 integrieren. Danach sieht der Quellcode Ihrer Testklasse wie folgt aus:

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

class BlogSearchTest {

    private static ChromeDriver driver;

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

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

Zweiter , müssen Sie die inneren Klassen erstellen, die die eigentlichen Testmethoden enthalten. Sie können diese inneren Klassen erstellen, indem Sie diesen Schritten folgen:

  1. Erstellen Sie eine innere Klasse, die die Testmethode enthält, die sicherstellt, dass das zu testende System wie erwartet funktioniert, wenn keine Suchergebnisse gefunden werden.
  2. Erstellen Sie eine innere Klasse, die die Testmethoden enthält, die sicherstellen, dass das zu testende System wie erwartet funktioniert, wenn ein Suchergebnis gefunden wird.

Nachdem Sie die erforderlichen inneren Klassen erstellt haben, sieht der Quellcode Ihrer Testklasse wie folgt aus:

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

class BlogSearchTest {

    private static ChromeDriver driver;

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

    @Nested
    class WhenNoSearchResultsAreFound {

    }

    @Nested
    class WhenOneSearchResultIsFound {

    }

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

Dritter , müssen Sie die Testmethode schreiben, die sicherstellt, dass das zu testende System wie erwartet funktioniert, wenn keine Suchergebnisse gefunden werden. Sie können diese Testmethode schreiben, indem Sie diesen Schritten folgen:

  1. Öffnen Sie die Startseite dieses Blogs (https://www.petrikainulainen.net/blog/).
  2. Geben Sie den Suchbegriff in das Suchformular ein und drücken Sie die Eingabetaste.
  3. Vergewissern Sie sich, dass auf der Suchergebnisseite der Text "Keine Ergebnisse gefunden." angezeigt wird.

Nachdem Sie diese Testmethode geschrieben haben, sieht der Quellcode Ihrer Testklasse wie folgt aus:

import io.testproject.sdk.DriverBuilder;
import io.testproject.sdk.drivers.web.ChromeDriver;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
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;

class BlogSearchTest {

    private static ChromeDriver driver;

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

    @Nested
    class WhenNoSearchResultsAreFound {

        @Test
        void shouldDisplayEmptySearchResultPage() {
            driver.get("https://www.petrikainulainen.net/blog/");

            WebElement searchField = driver.findElement(By.id("s"));
            searchField.sendKeys("noresults");
            searchField.sendKeys(Keys.ENTER);

            WebElement noResultElement = driver.findElement(
                    By.cssSelector(
                            ".template-search .content .post_box .archive_content"
                    )
            );
            assertThat(noResultElement.getText()).isEqualTo("No results found.");
        }
    }

    @Nested
    class WhenOneSearchResultIsFound {

    }

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

Vierter , müssen Sie die Testmethode schreiben, die sicherstellt, dass die Suchergebnisseite ein Suchergebnis anzeigt, wenn ein Suchergebnis gefunden wird. Sie können diese Testmethode schreiben, indem Sie diesen Schritten folgen:

  1. Öffnen Sie die Startseite dieses Blogs (https://www.petrikainulainen.net/blog/).
  2. Geben Sie den Suchbegriff in das Suchformular ein und drücken Sie die Eingabetaste.
  3. Stellen Sie sicher, dass die Suchergebnisseite ein Suchergebnis anzeigt.

Nachdem Sie diese Testmethode geschrieben haben, sieht der Quellcode Ihrer Testklasse wie folgt aus:

import io.testproject.sdk.DriverBuilder;
import io.testproject.sdk.drivers.web.ChromeDriver;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
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;

class BlogSearchTest {

    private static ChromeDriver driver;

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

    @Nested
    class WhenNoSearchResultsAreFound {

        @Test
        void shouldDisplayEmptySearchResultPage() {
            driver.get("https://www.petrikainulainen.net/blog/");

            WebElement searchField = driver.findElement(By.id("s"));
            searchField.sendKeys("noresults");
            searchField.sendKeys(Keys.ENTER);

            WebElement noResultElement = driver.findElement(
                    By.cssSelector(
                            ".template-search .content .post_box .archive_content"
                    )
            );
            assertThat(noResultElement.getText()).isEqualTo("No results found.");
        }
    }

    @Nested
    class WhenOneSearchResultIsFound {

        @Test
        void shouldDisplaySearchResultPageWithOneSearchResult() {
            driver.get("https://www.petrikainulainen.net/blog/");

            WebElement searchField = driver.findElement(By.id("s"));
            searchField.sendKeys("oneresult");
            searchField.sendKeys(Keys.ENTER);

            List<WebElement> searchResults = driver.findElements(
                    By.tagName("article")
            );
            assertThat(searchResults).hasSize(1);
        }
    }

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

Fünfter , müssen Sie die Testmethode schreiben, die sicherstellt, dass die Suchergebnisseite das richtige Suchergebnis anzeigt, wenn ein Suchergebnis gefunden wird. Sie können diese Testmethode schreiben, indem Sie diesen Schritten folgen:

  1. Öffnen Sie die Startseite dieses Blogs (https://www.petrikainulainen.net/blog/).
  2. Geben Sie den Suchbegriff in das Suchformular ein und drücken Sie die Eingabetaste.
  3. Stellen Sie sicher, dass der Titel des angezeigten Suchergebnisses korrekt ist.

Nachdem Sie diese Testmethode geschrieben haben, sieht der Quellcode Ihrer Testklasse wie folgt aus:

import io.testproject.sdk.DriverBuilder;
import io.testproject.sdk.drivers.web.ChromeDriver;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
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;

class BlogSearchTest {

    private static ChromeDriver driver;

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

    @Nested
    class WhenNoSearchResultsAreFound {

        @Test
        void shouldDisplayEmptySearchResultPage() {
            driver.get("https://www.petrikainulainen.net/blog/");

            WebElement searchField = driver.findElement(By.id("s"));
            searchField.sendKeys("noresults");
            searchField.sendKeys(Keys.ENTER);

            WebElement noResultElement = driver.findElement(
                    By.cssSelector(
                            ".template-search .content .post_box .archive_content"
                    )
            );
            assertThat(noResultElement.getText()).isEqualTo("No results found.");
        }
    }

    @Nested
    class WhenOneSearchResultIsFound {

        @Test
        void shouldDisplaySearchResultPageWithOneSearchResult() {
            driver.get("https://www.petrikainulainen.net/blog/");

            WebElement searchField = driver.findElement(By.id("s"));
            searchField.sendKeys("oneresult");
            searchField.sendKeys(Keys.ENTER);

            List<WebElement> searchResults = driver.findElements(
                    By.tagName("article")
            );
            assertThat(searchResults).hasSize(1);
        }

        @Test
        void shouldDisplaySearchResultPageWithCorrectSearchResult() {
            driver.get("https://www.petrikainulainen.net/blog/");

            WebElement searchField = driver.findElement(By.id("s"));
            searchField.sendKeys("oneresult");
            searchField.sendKeys(Keys.ENTER);

            WebElement searchResult = driver.findElement(
                    By.tagName("article")
            );
            WebElement resultTitle = searchResult.findElement(
                    By.className("headline")
            );
            assertThat(resultTitle.getText())
                    .isEqualTo("Java Testing Weekly 22 / 2018");
        }
    }

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

Lassen Sie uns weitermachen und herausfinden, wie Sie automatisierte Tests ausführen können, die das TestProject OpenSDK und JUnit 5 verwenden.

Durchführen Ihrer automatisierten Tests

Sie können Ihre Tests ausführen, indem Sie diesen Schritten folgen:

Zuerst müssen Sie den TestProject-Agenten starten und sicherstellen, dass er ausgeführt wird, bevor Sie Ihre Tests ausführen. Wenn Sie sicherstellen möchten, dass Ihr Agent bereit ist, Ihre Tests auszuführen, müssen Sie die folgenden Schritte ausführen:

  1. Öffnen Sie die Website app.testproject.io.
  2. Öffnen Sie die Registerkarte "Agenten".
  3. Stellen Sie sicher, dass der Status Ihres Agenten „Bereit“ lautet.

Die folgende Abbildung veranschaulicht das Layout der Seite „Agenten“:

Zweiter , müssen Sie Ihre Tests mit einer der folgenden Optionen ausführen:

  • Wenn Sie Gradle verwenden, können Sie Ihre Tests mit dem folgenden Befehl ausführen:gradle clean test .
  • Wenn Sie Maven verwenden, können Sie Ihre Tests mit dem folgenden Befehl ausführen:mvn clean test .
  • Sie können Ihre Tests auch mit Ihrer IDE ausführen (oder debuggen).

Sie können jetzt Tests für Webanwendungen schreiben, indem Sie das TestProject OpenSDK und JUnit 5 verwenden, und Sie wissen, wie Sie Ihre Tests ausführen können. Fassen wir zusammen, was Sie aus diesem Blogbeitrag gelernt haben.

Zusammenfassung

Dieser Blogbeitrag hat Ihnen vier Dinge beigebracht:

  • Sie sollten eine Konfiguration in Betracht ziehen, die sicherstellt, dass alle gefundenen Testmethoden aus derselben Testklasse auf demselben Testbericht angezeigt werden.
  • Sie sollten verschiedene Szenarien trennen, indem Sie innere Klassen verwenden.
  • Sie müssen sicherstellen, dass der TestProject-Agent ausgeführt wird, bevor Sie Ihre Tests ausführen.
  • Wenn Sie Ihre Tests ausführen, sendet der TestProject-Agent Testausführungsdaten an die TestProject-Plattform, die Testberichte generiert und die generierten Berichte auf dem TestProject-Berichts-Dashboard veröffentlicht.

Java-Tag