Java >> Java Tutorial >  >> Java

Konfigurieren des TestProject OpenSDK

Nachdem Sie ein neues Projekt erstellt haben, das das TestProject OpenSDK verwendet, können Sie mit dem Schreiben Ihrer automatisierten Tests beginnen. Bevor Sie jedoch die eigentlichen Testmethoden schreiben können, müssen Sie das TestProject OpenSDK konfigurieren.

Dieser Blogbeitrag beschreibt, wie Sie das TestProject OpenSDK konfigurieren können, wenn Sie Tests für eine Webanwendung mit JUnit 5 schreiben. Nachdem Sie diesen Blogbeitrag gelesen haben, werden Sie:

  • Kann die gängigsten Konfigurationsoptionen identifizieren.
  • Wissen, wie Sie das TestProject OpenSDK konfigurieren können, wenn Sie JUnit 5 verwenden.

Fangen wir an.

Einführung in die Konfigurationsoptionen von TestProject OpenSDK

Sie können das TestProject OpenSDK konfigurieren, indem Sie diesen Schritten folgen:

Zuerst , müssen Sie den Webbrowser auswählen, der Ihre Tests ausführt. Diese Auswahl bestimmt den Typ des WebDriver Objekt, das Sie erstellen müssen, wenn Sie das TestProject OpenSDK konfigurieren. Sie finden die unterstützten WebDriver Implementierungen aus dem io.testproject.sdk.drivers.web Paket. Nachdem Sie den Webbrowser ausgewählt haben, müssen Sie den WebDriver erstellen Objekt.

Zweiter müssen Sie das TestProject-Entwicklertoken konfigurieren, indem Sie den Wert von TP_DEV_TOKEN festlegen Umgebungsvariable. Sie können das Entwickler-Token auch in Ihrem Testcode konfigurieren, wenn Sie einen neuen WebDriver erstellen Objekt, aber ich denke, dass dies (meistens) aus diesen drei Gründen eine schlechte Idee ist:

  • Sie sollten keine Geheimnisse in einem Versionskontrollsystem speichern.
  • Wenn Sie das Entwickler-Token ändern müssen, ist es einfacher, den Wert einer Umgebungsvariablen zu ändern, als Änderungen an Ihrem Testcode vorzunehmen.
  • Wenn Ihre Tests unterschiedliche Entwicklertokens in verschiedenen Umgebungen verwenden müssen, ist es einfacher, eine Umgebungsvariable zu verwenden, als die erforderlichen Änderungen an Ihrem Testcode vorzunehmen.

Dritter , können Sie optionale browserspezifische Einstellungen angeben, indem Sie eine browserspezifische Optionsklasse (ChromeOptions , EdgeOptions , FirefoxOptions , InternetExplorerOptions SafariOptions ).

Vierter können Sie die URL ändern, die zur Kommunikation mit dem TestProject-Agenten verwendet wird, indem Sie den Wert von TP_AGENT_URL festlegen Umgebungsvariable. Sie können diese URL auch in Ihrem Testcode konfigurieren, wenn Sie einen neuen WebDriver erstellen Objekt, aber ich denke, dass dies eine schlechte Idee ist. Wenn Sie die Agenten-URL in Ihrem Testcode konfigurieren, ist es nicht einfach, unterschiedliche URLs in verschiedenen Umgebungen zu verwenden.

Fünfter , wenn Sie einen Remote-Selenium-Server verwenden möchten, der von einem Cloud-Anbieter wie SauceLabs oder BrowserStack bereitgestellt wird, müssen Sie den Wert von cloud:URL festlegen benutzerdefinierte Funktion.

Sie können jetzt die verschiedenen Konfigurationsoptionen identifizieren, die von TestProject OpenSDK bereitgestellt werden. Als Nächstes erfahren Sie, wie Sie das TestProject OpenSDK konfigurieren können, wenn Sie Tests für eine Webanwendung mit Junit 5 schreiben.

Integration des TestProject OpenSDK mit JUnit 5

Wenn Sie das TestProject OpenSDK mit JUnit 5 integrieren möchten, müssen Sie sich zunächst entscheiden, wann Sie den erforderlichen WebDriver erstellen möchten Objekt. Sie haben drei verschiedene Optionen und jede Option hat Vor- und Nachteile. Gehen wir diese Optionen nacheinander durch.

1. Erstellen Sie ein WebDriver-Objekt pro Testsuite

Wenn Sie möchten, dass Ihre Testmethoden auf demselben Testbericht angezeigt werden, müssen Sie einen WebDriver erstellen Objekt pro Testsuite. Wenn Sie diese Option verwenden, erstellt der TestProject-Agent einen Testjob, der Ihre Tests ausführt.

Die folgende Abbildung veranschaulicht ein Szenario, in dem die aus verschiedenen Testklassen gefundenen Testmethoden von einem Job ausgeführt werden:

Außerdem stellt diese Option sicher, dass Ihre Tests so schnell wie möglich sind, da der „langsame“ Setup-Code nur einmal pro Testsuite ausgeführt wird. Der Nachteil dieses Ansatzes besteht jedoch darin, dass Sie dem Schreiben von Bereinigungscode, der den Zustand des Browsers bereinigt, nachdem eine Testmethode ausgeführt wurde, besondere Aufmerksamkeit schenken müssen. Dies ist wichtig, da Sie keine Tests schreiben sollten, die von anderen Tests abhängen.

Wenn Sie diese Option verwenden möchten, müssen Sie die folgenden Schritte ausführen:

  1. Erstellen Sie eine neue öffentliche Klasse.
  2. Fügen Sie einen neuen public hinzu und static ChromeDriver Feld zur erstellten Klasse. Dieses Feld enthält den WebDriver Objekt, das von Ihren Testmethoden verwendet wird.
  3. Erstellen Sie einen neuen ChromeDriver -Objekt mithilfe der fließenden API, die von DriverBuilder bereitgestellt wird Klasse und speichern Sie das erstellte Objekt im INSTANCE Feld.

Nachdem Sie den WebDriver erstellt haben -Objekt sieht der Quellcode Ihrer "Treiber-Container-Klasse" wie folgt aus:

import io.testproject.sdk.DriverBuilder;
import io.testproject.sdk.drivers.web.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;

public class TestDriver {

    public static ChromeDriver INSTANCE = new DriverBuilder<ChromeDriver>(
            new ChromeOptions()
    )
            .withCapabilities(new ChromeOptions())
            .build(ChromeDriver.class);
}

Wenn Sie den erstellten WebDriver verwenden möchten Objekt in Ihren Testmethoden, können Sie einfach die Referenz abrufen, die auf INSTANCE gespeichert ist Feld des TestDriver Klasse. Das folgende Codebeispiel zeigt, wie Sie WebDriver verwenden können Objekt in Ihrer Testmethode:

import org.junit.jupiter.api.Test;

public class FirstSingletonExampleTest {

    @Test
    void openReddit() {
        TestDriver.INSTANCE.get("https://www.reddit.com");
    }
}

2. Erstellen Sie ein WebDriver-Objekt pro Testklasse

Wenn Sie möchten, dass alle Testmethoden einer Testklasse auf demselben Testbericht angezeigt werden, müssen Sie einen WebDriver erstellen Objekt pro Testklasse. Wenn Sie diese Option verwenden, erstellt der TestProject-Agent einen Testjob pro Testklasse. Jeder Job führt die in der zugehörigen Testklasse gefundenen Testmethoden aus.

Die folgende Abbildung veranschaulicht ein Szenario, in dem die in derselben Testklasse gefundenen Testmethoden von einem Job ausgeführt werden:

Auch diese Option ist im Grunde ein Kompromiss zwischen der Zustandsverwaltung des verwendeten Webbrowsers und der Leistung Ihrer Testsuite. Wenn Sie diese Option verwenden, ist Ihre Testsuite etwas langsamer als eine Testsuite, die die erste Option verwendet. Ihre Tests sind jedoch einfacher (und schneller) zu schreiben, da Ihr Bereinigungscode nur eine begrenzte Anzahl von Testfällen unterstützen muss, die dieselbe Funktion testen. Mit anderen Worten, Ihr Bereinigungscode wird höchstwahrscheinlich recht einfach sein.

Wenn Sie diese Option verwenden möchten, müssen Sie die folgenden Schritte ausführen:

Zuerst , haben Sie einen neuen WebDriver erstellt Objekt, indem Sie diesen Schritten folgen:

  1. Fügen Sie einen private hinzu und static ChromeDriver Feld zu Ihrer Testklasse. Dieses Feld enthält einen Verweis auf das erstellte Treiberobjekt.
  2. Fügen Sie Ihrer Testklasse eine neue Einrichtungsmethode hinzu.
  3. Stellen Sie sicher, dass die Setup-Methode einmal ausgeführt wird, bevor die Testmethoden Ihrer Testklasse ausgeführt werden.
  4. Erstellen Sie einen neuen ChromeDriver -Objekt mithilfe der fließenden API, die von DriverBuilder bereitgestellt wird Klasse und speichern Sie das erstellte Objekt im driver Feld.

Nachdem Sie einen neuen WebDriver erstellt haben Objekt 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.BeforeAll;
import org.openqa.selenium.chrome.ChromeOptions;

class BeforeAllExampleTest {

    private static ChromeDriver driver;

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

Zweiter , müssen Sie die von WebDriver reservierten Ressourcen freigeben Objekt. Gehen Sie dazu wie folgt vor:

  1. Fügen Sie Ihrer Testklasse eine neue Teardown-Methode hinzu.
  2. Stellen Sie sicher, dass die Teardown-Methode einmal ausgeführt wird, nachdem alle Testmethoden Ihrer Testklasse ausgeführt wurden.
  3. Geben Sie die vom verwendeten WebDriver reservierten Ressourcen frei Objekt.

Nachdem Sie die von WebDriver reservierten Ressourcen freigegeben haben Objekt 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 BeforeAllExampleTest {

    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();
    }
}

3. Erstellen Sie ein neues WebDriver-Objekt, bevor eine Testmethode ausgeführt wird

Wenn Sie möchten, dass alle Testmethoden auf einem neuen Testbericht angezeigt werden, müssen Sie einen neuen WebDriver erstellen Objekt, bevor eine Testmethode ausgeführt wird. Wenn Sie diese Option verwenden, stellt der TestProject-Agent sicher, dass alle Testmethoden von verschiedenen Testjobs ausgeführt werden.

Die folgende Abbildung veranschaulicht ein Szenario, in dem die in derselben Testklasse gefundenen Testmethoden von unterschiedlichen Jobs ausgeführt werden:

Außerdem stellt diese Option sicher, dass jede Testmethode einen "sauberen" Webbrowser erhält. Der Nachteil dieses Ansatzes ist jedoch, dass der "langsame" Setup-Code vor jeder Testmethode ausgeführt wird. Mit anderen Worten, wenn Sie diese Option verwenden, ist Ihre Testsuite möglicherweise zu langsam.

Wenn Sie diese Option verwenden möchten, müssen Sie die folgenden Schritte ausführen:

Zuerst , haben Sie einen neuen WebDriver erstellt Objekt, indem Sie diesen Schritten folgen:

  1. Fügen Sie einen private ChromeDriver hinzu Feld zu Ihrer Testklasse. Dieses Feld enthält einen Verweis auf das erstellte Treiberobjekt.
  2. Fügen Sie Ihrer Testklasse eine neue Einrichtungsmethode hinzu.
  3. Stellen Sie sicher, dass die Einrichtungsmethode ausgeführt wird, bevor eine Testmethode ausgeführt wird.
  4. Erstellen Sie einen neuen ChromeDriver -Objekt mithilfe der fließenden API, die von DriverBuilder bereitgestellt wird Klasse und speichern Sie das erstellte Objekt im driver Feld.

Nachdem Sie einen neuen WebDriver erstellt haben Objekt 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.BeforeEach;
import org.openqa.selenium.chrome.ChromeOptions;

class BeforeEachExampleTest {

    private ChromeDriver driver;

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

Zweiter , müssen Sie die von WebDriver reservierten Ressourcen freigeben Objekt. Gehen Sie dazu wie folgt vor:

  1. Fügen Sie Ihrer Testklasse eine neue Teardown-Methode hinzu.
  2. Stellen Sie sicher, dass die Teardown-Methode ausgeführt wird, nachdem eine Testmethode ausgeführt wurde.
  3. Geben Sie die vom verwendeten WebDriver reservierten Ressourcen frei Objekt.

Nachdem Sie die von WebDriver reservierten Ressourcen freigegeben haben Objekt 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.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.openqa.selenium.chrome.ChromeOptions;

class BeforeEachExampleTest {

    private ChromeDriver driver;

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

    @AfterEach
    void shutdownTestProjectOpenSDK() {
        driver.quit();
    }
}

Sie können jetzt TestProject OpenSDK konfigurieren und in JUnit 5 integrieren. Lassen Sie uns zusammenfassen, was Sie aus diesem Blogbeitrag gelernt haben.

Zusammenfassung

Dieser Blogbeitrag hat Ihnen vier Dinge beigebracht:

  • Der io.testproject.sdk.drivers.web Paket enthält den WebDriver Implementierungen, die von TestProject OpenSDK unterstützt werden.
  • Sie müssen das TestProject-Entwickler-Token konfigurieren, indem Sie den Wert von TP_DEV_TOKEN festlegen Umgebungsvariable.
  • Wenn Sie einen neuen WebDriver erstellen verwenden, sollten Sie die Option verwenden, die die Testberichte generiert, die Ihren Anforderungen entsprechen.
  • Sie können ein neues Treiberobjekt erstellen, indem Sie die fließende API verwenden, die von DriverBuilder bereitgestellt wird Klasse.

Java-Tag