Java >> Java Tutorial >  >> Java

Schreiben von Tests für Webanwendungen mit TestProject

Dieser Blogpost beschreibt, wie wir Tests für Webanwendungen schreiben können, indem wir das TestProject-Framework verwenden. Nachdem wir diesen Blogbeitrag fertiggestellt haben, werden wir:

  • Kann Tests für Webanwendungen mit dem TestProject-Framework schreiben.
  • Verstehen, wie wir die Selenium-API in unseren Testklassen verwenden können.
  • Wissen, wie wir Eingabeparameter an unsere Testfälle übergeben können.

Beginnen wir damit, unsere erste Testklasse zu schreiben.

Schreiben unserer ersten Testklasse

Wenn wir Tests mit dem TestProject-Framework schreiben, müssen wir diese Regeln befolgen:

  • Wir müssen unsere Testklassen in src/main/java ablegen Verzeichnis. Wir müssen unsere Testklasse in dieses Verzeichnis stellen, da wir unsere Tests in eine JAR-Datei packen und unsere Tests auf der Website app.testproject.io veröffentlichen (die JAR-Datei hochladen) müssen, bevor wir sie ausführen können.
  • Wir sollten den Namen und die Beschreibung unseres Testfalls (auch bekannt als Testklasse) mit dem @Test beschreiben Anmerkung, die vom TestProject SDK bereitgestellt wird. Wenn wir diese Anmerkung verwenden, verwendet die Website app.testproject.io die bereitgestellten Werte in ihren Testberichten.
  • Da wir Tests für eine Webanwendung schreiben, müssen unsere Testklassen den WebTest implementieren Schnittstelle, die vom TestProject SDK bereitgestellt wird.
  • Wir können einen Testfall schreiben, indem wir execute() implementieren Methode des WebTest Schnittstelle. Unsere Implementierung muss einen Wert von ExecutionResult zurückgeben enum, die das Ergebnis unseres Testfalls angibt.

Als nächstes schreiben wir einen Test, der sicherstellt, dass meine Website den richtigen Titel hat. Wir können diesen Test schreiben, indem wir diesen Schritten folgen:

Zuerst , müssen wir eine neue Testklasse erstellen, die den WebTest implementiert Schnittstelle. Nachdem wir diese Klasse erstellt haben, sieht ihr Quellcode wie folgt aus:

import io.testproject.java.sdk.v2.enums.ExecutionResult;
import io.testproject.java.sdk.v2.exceptions.FailureException;
import io.testproject.java.sdk.v2.tests.WebTest;
import io.testproject.java.sdk.v2.tests.helpers.WebTestHelper;

public class WebSiteShouldDisplayExpectedTitleTest implements WebTest {

 @Override
 public ExecutionResult execute(WebTestHelper webTestHelper) 
 throws FailureException {
 
 }
}

Zweiter , müssen wir den Namen und die Beschreibung unseres Testfalls konfigurieren. Wir können dies tun, indem wir unsere Testklasse mit dem @Test annotieren Anmerkung.

Nachdem wir den Namen und die Beschreibung unseres Testfalls konfiguriert haben, sieht der Quellcode unserer Testklasse wie folgt aus:

import io.testproject.java.annotations.v2.Test;
import io.testproject.java.sdk.v2.enums.ExecutionResult;
import io.testproject.java.sdk.v2.exceptions.FailureException;
import io.testproject.java.sdk.v2.tests.WebTest;
import io.testproject.java.sdk.v2.tests.helpers.WebTestHelper;

@Test(
 name = "My website should display the expected title",
 description = "Verify that my website displays the correct title"
)
public class WebSiteShouldDisplayExpectedTitleTest implements WebTest {

 @Override
 public ExecutionResult execute(WebTestHelper webTestHelper) 
 throws FailureException {
 
 }
}

Dritter , müssen wir den execute() implementieren Methode, indem Sie diesen Schritten folgen:

  1. Erhalten Sie einen Verweis auf WebDriver Objekt, das den Webbrowser steuert, der unseren Test ausführt.
  2. Stellen Sie sicher, dass der verwendete Webbrowser meine Website öffnet.
  3. Bestimmen Sie den Rückgabewert von execute() Methode. Wenn meine Website den richtigen Titel hat, müssen wir ExecutionResult.PASSED zurückgeben . Wenn meine Website andererseits nicht den erwarteten Titel hat, müssen wir ExecutionResult.FAILED zurückgeben .

Nachdem wir unseren Testfall geschrieben haben, sieht der Quellcode unserer Testklasse wie folgt aus:

import io.testproject.java.annotations.v2.Test;
import io.testproject.java.sdk.v2.enums.ExecutionResult;
import io.testproject.java.sdk.v2.drivers.WebDriver;
import io.testproject.java.sdk.v2.exceptions.FailureException;
import io.testproject.java.sdk.v2.tests.WebTest;
import io.testproject.java.sdk.v2.tests.helpers.WebTestHelper;

@Test(
 name = "My website should display the expected title",
 description = "Verify that my website displays the correct title"
)
public class WebSiteShouldDisplayExpectedTitleTest implements WebTest {

 @Override
 public ExecutionResult execute(WebTestHelper webTestHelper)
 throws FailureException {
 WebDriver browser = webTestHelper.getDriver();
 browser.get("https://www.petrikainulainen.net");
 return browser.getTitle()
 .equals("Petri Kainulainen — Developing Software With Passion")
 ? ExecutionResult.PASSED
 : ExecutionResult.FAILED;
 }
}

Wir können jetzt einfache Tests für Webanwendungen schreiben, indem wir das TestProject-Framework verwenden. Manchmal möchten wir jedoch Eingabeparameter an unseren Testfall übergeben. Als nächstes werden wir herausfinden, wie wir es tun können.

Eingabeparameter an unseren Testfall übergeben

Wenn wir unserem Testfall einen Eingabeparameter übergeben wollen, müssen wir diesen Schritten folgen:

  1. Fügen Sie einen private hinzu Feld zu unserer Testklasse und stellen Sie sicher, dass das Feld String speichern kann Objekte.
  2. Kommentieren Sie unser neues Feld mit dem @TestParameter Anmerkung. Wenn wir dies tun, können wir den Standardwert unseres Eingabeparameters festlegen, indem wir den Wert von @TestParameter festlegen defaultValue der Anmerkung Attribut.

Lassen Sie uns einen Testfall schreiben, der sicherstellt, dass eine Website den erwarteten Titel hat. Wir können diesen Testfall schreiben, indem wir diesen Schritten folgen:

Zuerst , haben wir eine neue Testklasse erstellt und sichergestellt, dass unsere Testklasse den WebTest implementiert Schnittstelle. Nachdem wir diese Testklasse erstellt haben, sieht ihr Quellcode wie folgt aus:

import io.testproject.java.sdk.v2.enums.ExecutionResult;
import io.testproject.java.sdk.v2.exceptions.FailureException;
import io.testproject.java.sdk.v2.tests.WebTest;
import io.testproject.java.sdk.v2.tests.helpers.WebTestHelper;

public class ParameterizedWebSiteShouldDisplayExpectedTitleTest implements WebTest {

 @Override
 public ExecutionResult execute(WebTestHelper webTestHelper)
 throws FailureException {
 
 }
}

Zweiter , müssen wir zwei Eingabeparameter konfigurieren:

  • Der expectedTitle Parameter enthält den erwarteten Titel der geöffneten Website. Der Standardwert dieses Parameters ist:'Petri Kainulainen — Developing Software With Passion'.
  • Die url Parameter enthält die URL der geöffneten Website. Der Standardwert dieses Parameters:'https://www.petrikainulainen.net'.

Nachdem wir diese Eingabeparameter konfiguriert haben, sieht der Quellcode unserer Testklasse wie folgt aus:

import io.testproject.java.annotations.v2.TestParameter;
import io.testproject.java.sdk.v2.enums.ExecutionResult;
import io.testproject.java.sdk.v2.exceptions.FailureException;
import io.testproject.java.sdk.v2.tests.WebTest;
import io.testproject.java.sdk.v2.tests.helpers.WebTestHelper;

public class ParameterizedWebSiteShouldDisplayExpectedTitleTest implements WebTest {

 @TestParameter(
 defaultValue = "Petri Kainulainen — Developing Software With Passion"
 )
 public String expectedTitle;

 @TestParameter(defaultValue = "https://www.petrikainulainen.net")
 public String url;

 @Override
 public ExecutionResult execute(WebTestHelper webTestHelper) 
 throws FailureException {
 
 }
}

Dritter , müssen wir den Namen und die Beschreibung unseres Testfalls konfigurieren. Wenn unser Testfall Eingabeparameter hat, können wir die Parameterwerte zur Beschreibung unseres Testfalls hinzufügen, indem wir das Format verwenden:{parameterValue} .

Nachdem wir den Namen und die Beschreibung unseres Testfalls konfiguriert haben, sieht der Quellcode unserer Testklasse wie folgt aus:

import io.testproject.java.annotations.v2.Test;
import io.testproject.java.annotations.v2.TestParameter;
import io.testproject.java.sdk.v2.enums.ExecutionResult;
import io.testproject.java.sdk.v2.exceptions.FailureException;
import io.testproject.java.sdk.v2.tests.WebTest;
import io.testproject.java.sdk.v2.tests.helpers.WebTestHelper;

@Test(
 name = "The opened website should display the expected title",
 description = "The website: {url} should display the title: {expectedTitle}"
)
public class ParameterizedWebSiteShouldDisplayExpectedTitleTest implements WebTest {

 @TestParameter(
 defaultValue = "Petri Kainulainen — Developing Software With Passion"
 )
 public String expectedTitle;

 @TestParameter(defaultValue = "https://www.petrikainulainen.net")
 public String url;

 @Override
 public ExecutionResult execute(WebTestHelper webTestHelper) 
 throws FailureException {
 
 }
}

Vierter , müssen wir den execute() implementieren Methode des WebTest Benutzeroberfläche und stellen Sie sicher, dass die geöffnete Website den richtigen Titel hat. Nachdem wir diese Methode geschrieben haben, sieht der Quellcode unserer Testklasse wie folgt aus:

import io.testproject.java.annotations.v2.Test;
import io.testproject.java.annotations.v2.TestParameter;
import io.testproject.java.sdk.v2.drivers.WebDriver;
import io.testproject.java.sdk.v2.enums.ExecutionResult;
import io.testproject.java.sdk.v2.exceptions.FailureException;
import io.testproject.java.sdk.v2.tests.WebTest;
import io.testproject.java.sdk.v2.tests.helpers.WebTestHelper;

@Test(
 name = "The opened website should display the expected title",
 description = "The website: {url} should display the title: {expectedTitle}"
)
public class ParameterizedWebSiteShouldDisplayExpectedTitleTest implements WebTest {

 @TestParameter(
 defaultValue = "Petri Kainulainen — Developing Software With Passion"
 )
 public String expectedTitle;

 @TestParameter(defaultValue = "https://www.petrikainulainen.net")
 public String url;

 @Override
 public ExecutionResult execute(WebTestHelper webTestHelper) 
 throws FailureException {
 WebDriver browser = webTestHelper.getDriver();
 browser.get(url);
 return browser.getTitle().equals(expectedTitle)
 ? ExecutionResult.PASSED
 : ExecutionResult.FAILED;
 }
}

Wir können jetzt die Eingabeparameter konfigurieren, die bereitgestellt werden müssen, bevor wir unsere Tests mithilfe des TestProject-Agenten ausführen können. Wir werden mehr darüber sprechen, wenn wir lernen, unsere Testfälle auszuführen.

Fassen wir zusammen, was wir aus diesem Blogbeitrag gelernt haben.

Zusammenfassung

Dieser Blogbeitrag hat uns fünf Dinge beigebracht:

  • Wir müssen unsere Testklassen in src/main/java ablegen Verzeichnis.
  • Wir sollten den Namen und die Beschreibung unseres Testfalls angeben, indem wir den @Test verwenden Anmerkung.
  • Wenn wir Tests für eine Webanwendung schreiben, muss eine Testklasse den WebTest implementieren Schnittstelle, die vom TestProject SDK bereitgestellt wird.
  • Wir können einen Verweis auf WebDriver erhalten Objekt mit dem getDriver() Methode des WebTestHelper Klasse.
  • Wir können Eingabeparameter an einen Testfall übergeben, indem wir den @TestParameter verwenden Anmerkung.

Java-Tag