TestNG Annotation Guide für Selenium WebDriver

Ursprünglicher Autor: Sadhvi Singh
  • Übersetzung
Frieden, Arbeit, Mai, Chabrowiter! Für diejenigen, die wie wir in die Arbeitswoche zwischen den Feiertagen einbrechen, haben wir eine Übersetzung vorbereitet, die mit dem Beginn der Einstellung des Java QA Engineer- Kurses zusammenfallen soll , der am 28. Mai beginnen soll.



TestNG ist ein Test-Framework von Cédric Beust , mit dem wir viele unserer Testanforderungen erfüllen können. TestNG ist bei Selen weit verbreitet. Möchten Sie wissen, was NG bedeutet? Dies bedeutet "Next Generation" . TestNG ähnelt JUnit, ist jedoch leistungsfähiger, wenn es darum geht, den Ausführungsfluss Ihres Programms zu steuern. Die Architektur des Frameworks hilft uns, Tests strukturierter zu gestalten und bessere Validierungspunkte bereitzustellen.

Einige Funktionen von TestNG, die Aufmerksamkeit verdienen:

  • Leistungsstarke und abwechslungsreiche Anmerkungen zur Unterstützung Ihrer Testfälle.
  • Paralleles Ausführen von Tests unter Verwendung von Abhängigkeiten zwischen Tests.
  • Die Flexibilität, Ihre Tests mit verschiedenen Datensätzen, über die Datei TestNG.xml oder über das Konzept von Datenanbietern auszuführen.
  • Gruppierung und Priorisierung von Testfällen.
  • Generierung von HTML-Berichten, Anpassung mit verschiedenen Plugins.
  • Generierung von Testausführungsprotokollen.
  • Einfache Integration mit Eclipse, Maven, Jenkins usw.

In der Regel umfasst der Testprozess mit TestNG die folgenden Schritte:



Bevor Sie mit den TestNG-Anmerkungen für Selen fortfahren, werden die Voraussetzungen für die Einrichtung von TestNG erläutert.

Voraussetzungen:

  • Java-Entwicklungskit
  • Eclipse oder eine andere IDE
  • Installierte TestNG in Eclipse oder in Ihrer IDE

Hinweis: Java-Anmerkungen können nur mit Java Version 1.5 und höher verwendet werden.

Wenn Sie noch nicht mit TestNG vertraut sind, lesen Sie den Artikel zum Ausführen des ersten Automatisierungsskripts mit TestNG .

Was ist eine Anmerkung?

Eine Anmerkung ist eine Bezeichnung, die zusätzliche Informationen zu einer Klasse oder Methode enthält ( Anmerkung des Übersetzers: Anmerkungen in Java können nicht nur auf Klassen und Methoden, sondern auch auf andere Elemente angewendet werden ). Für Anmerkungen wird das Präfix "@" verwendet. TestNG verwendet Anmerkungen, um ein robustes Testframework zu erstellen. Schauen wir uns die TestNG-Annotationen an, mit denen das Testen mit Selen automatisiert wird.


@Test

Dies ist die wichtigste Anmerkung in TestNG, die die Hauptlogik des Tests enthält . Alle automatisierten Funktionen sind in der kommentierten Methode @Test. Es hat verschiedene Attribute, mit denen der Methodenstart konfiguriert werden kann.

Das folgende Codebeispiel überprüft den URL-Übergang:

@Test
public void testCurrentUrl() throws InterruptedException {
   driver.findElement(By.xpath("//*[@id='app']/header/aside/ul/li[4]/a"))
     .click();
   String currentUrl = driver.getCurrentUrl();
   assertEquals(
     currentUrl,
     "https://automation.lambdatest.com/timeline/?viewType=build&page=1", 
     "url did not matched");
}

@BeforeTest

Eine Methode mit dieser Annotation wird gestartet, bevor die erste Methode mit der Annotation gestartet wird @Test. (Anmerkung des Übersetzers: als Teil des im Abschnitt testin der XML-Konfigurationsdatei definierten Tests ) . Sie können diese Anmerkung in TestNG mit Selenium verwenden, um Ihren Browser zu konfigurieren. Starten Sie beispielsweise einen Browser und erweitern Sie ihn auf Vollbild, legen Sie bestimmte Browsereinstellungen fest usw.

Unten sehen Sie ein Beispiel für BeforeTest, in dem der Browser auf Vollbild erweitert wird:

@BeforeTest
public void profileSetup() {
   driver.manage().window().maximize();
}

@AfterTest

Mit dieser Anmerkung markierte Methoden beginnen nach allen @TestMethoden Ihres Tests. ( Anmerkung des Übersetzers: Als Teil des Tests, der im Abschnitt testin der XML-Konfigurationsdatei definiert ist, wird die „nicht aktuelle Klasse“ im Original nicht korrekt geschrieben .) Dies ist eine nützliche Anmerkung, die zur Bereitstellung von Testergebnissen hilfreich ist. Mit dieser Anmerkung können Sie einen Bericht über Ihre Tests erstellen und ihn per E-Mail an interessierte Parteien senden.

Codebeispiel:

@AfterTest
public void reportReady() {
   System.out.println("Report is ready to be shared, with screenshots of tests");
}

@BeforeMethod

Methoden mit dieser Annotation werden vor jeder @TestMethode ausgeführt . Sie können damit die Verbindung zur Datenbank testen, bevor Sie den Test ausführen. Wenn Sie beispielsweise die Funktionalität testen, die vom Login des Benutzers abhängt, geben Sie den Code ein, um hier in das System zu gelangen.
Das Folgende ist ein Codeausschnitt, der den Einstieg in LambdaTest demonstriert:

@BeforeMethod
public void checkLogin() {
   driver.get("https://accounts.lambdatest.com/login");
   driver.findElement(By.xpath("//input[@name='email']")).sendKeys("sadhvisingh24@gmail.com");
   driver.findElement(By.xpath("//input[@name='password']")).sendKeys("activa9049");
   driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click();
}

@AfterMethod

Methoden mit dieser Annotation werden nach jeder @TestMethode gestartet . Mit dieser Annotation können Sie jedes Mal, wenn Sie den Test ausführen, Screenshots machen.
Unten finden Sie einen Codeausschnitt, der zeigt, wie ein Screenshot erstellt wird:

@AfterMethod
public void screenShot() throws IOException {
   TakesScreenshot scr = ((TakesScreenshot) driver);
   File file1 = scr.getScreenshotAs(OutputType.FILE);
   FileUtils.copyFile(file1, new File("С:\\test-output\\test1.PNG"));
}

@BeforeClass

Eine Methode mit dieser Annotation wird vor der ersten Testmethode in der aktuellen Klasse ausgeführt. Mit dieser Anmerkung können Sie Browsereigenschaften konfigurieren, den Treiber initialisieren, einen Browser mit der gewünschten URL öffnen usw.

Beispielcode für BeforeClass:

@BeforeClass
public void appSetup() {
   driver.get(url);
}

@AfterClass

Eine Methode mit dieser Annotation wird nach der letzten Testmethode in der aktuellen Klasse ausgeführt. Diese Annotation in TestNG kann verwendet werden, um Aktionen auszuführen, um Ressourcen nach Abschluss des Tests zu bereinigen, z. B. das Schließen des Treibers usw.
Das folgende Codebeispiel zeigt das Schließen des Treibers:

@AfterClass
public void closeUp() {
   driver.close();
}

@BeforeSuite

Eine Testsuite (Suite) kann aus mehreren Klassen bestehen, diese Annotation wird vor allen Testmethoden aller Klassen ausgeführt. Diese Anmerkung markiert den Einstiegspunkt beim Start. @BeforeSuiteTestNG- Annotation kann verwendet werden, um allgemeine Funktionen wie das Einrichten und Ausführen von Selenium- oder Remote-Webtreibern usw. auszuführen.
Eine Beispielanmerkung @BeforeSuitein TestNG, die die Treiberkonfiguration zeigt:

@BeforeSuite
public void setUp() {
   System.setProperty(
           "webdriver.chrome.driver",
           "С:\\selenium\\chromedriver.exe");
   driver = new ChromeDriver();
}

@AfterSuite

Diese Annotation in TestNG wird gestartet, nachdem alle Testmethoden in allen Klassen ausgeführt wurden. Diese Annotation kann verwendet werden, um vor Abschluss von Tests zu bereinigen, wenn Sie mehrere Klassen verwenden, z. B. das Schließen von Treibern usw.
Im Folgenden finden Sie einen Codeausschnitt für Annotationen @AfterSuitein TestNG for Selenium:

@AfterSuite
public void cleanUp() {
   System.out.println("All close up activities completed");
}

@BeforeGroups

TestNG kann Tests mithilfe des Gruppenattributs in Anmerkungen gruppieren @Test. Wenn Sie beispielsweise möchten, dass alle ähnlichen Funktionen der Benutzerverwaltung zusammengeführt werden, können Sie Tests wie Dashboard (Benutzer-Dashboard), Profil (Profil), Transaktionen (Transaktionen) und dergleichen in einer Gruppe markieren. wie user_management. Die Annotation @BeforeGroupsin TestNG hilft, bestimmte Aktionen vor der angegebenen Testgruppe zu starten. Diese Anmerkung kann verwendet werden, wenn sich die Gruppe auf eine Funktion konzentriert, wie im obigen Beispiel angegeben. Die Anmerkung @BeforeGroupkann eine Anmeldefunktion enthalten, die zum Ausführen von Tests in einer Gruppe erforderlich ist, z. B. zum Testen eines Benutzerpanels, eines Benutzerprofils usw.

Anwendungsbeispiel @BeforeGroups:

@BeforeGroups("urlValidation")
public void setUpSecurity() {
   System.out.println("url validation test starting");
}

@AfterGroups

Diese Annotation beginnt, nachdem alle Testmethoden der angegebenen Gruppe ausgeführt wurden.

Beispielcode für die Annotation @AfterGroupsin TestNG für Selen:

@AfterGroups("urlValidation")
public void tearDownSecurity() {
   System.out.println("url validation test finished");
}

Beispiel

Der folgende Code zeigt Beispiele für die Verwendung aller oben beschriebenen Anmerkungen:

import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.*;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
import static org.testng.Assert.assertEquals;
public class AnnotationsTestNG {
   private WebDriver driver;
   private String url = "https://www.lambdatest.com/";
   @BeforeSuite
   public void setUp() {
       System.setProperty(
               "webdriver.chrome.driver",
               "С:\\selenium\\chromedriver.exe");
       driver = new ChromeDriver();
       driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
       System.out.println("The setup process is completed");
   }
   @BeforeTest
   public void profileSetup() {
       driver.manage().window().maximize();
       System.out.println("The profile setup process is completed");
   }
   @BeforeClass
   public void appSetup() {
       driver.get(url);
       System.out.println("The app setup process is completed");
   }
   @BeforeMethod
   public void checkLogin() {
       driver.get("https://accounts.lambdatest.com/login");
       driver.findElement(By.xpath("//input[@name='email']")).sendKeys("sadhvisingh24@gmail.com");
       driver.findElement(By.xpath("//input[@name='password']")).sendKeys("activa9049");
       driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click();
       System.out.println("The login process on lamdatest is completed");
   }
   @Test(groups = "urlValidation")
   public void testCurrentUrl() throws InterruptedException {
       driver.findElement(By.xpath("//*[@id='app']/header/aside/ul/li[4]/a")).click();
       Thread.sleep(6000);
       String currentUrl = driver.getCurrentUrl();
       assertEquals(currentUrl, "https://automation.lambdatest.com/timeline/?viewType=build&page=1", "url did not matched");
       System.out.println("The url validation test is completed");
   }
   @AfterMethod
   public void screenShot() throws IOException {
       TakesScreenshot scr = ((TakesScreenshot) driver);
       File file1 = scr.getScreenshotAs(OutputType.FILE);
       FileUtils.copyFile(file1, new File("С:\\test-output\\test1.PNG"));
       System.out.println("Screenshot of the test is taken");
   }
   @AfterClass
   public void closeUp() {
       driver.close();
       System.out.println("The close_up process is completed");
   }
   @AfterTest
   public void reportReady() {
       System.out.println("Report is ready to be shared, with screenshots of tests");
   }
   @AfterSuite
   public void cleanUp() {
       System.out.println("All close up activities completed");
   }
   @BeforeGroups("urlValidation")
   public void setUpSecurity() {
       System.out.println("url validation test starting");
   }
   @AfterGroups("urlValidation")
   public void tearDownSecurity() {
       System.out.println("url validation test finished");
   }
}	

TestNG Report:



Konsolenausgabe:



Anmerkung des Übersetzers:

  • Ändern Sie zum Ausführen des Tests den Pfad zu chromedriver.exe in der Methode setUp () und den Pfad zum Ordner screenshot in der Methode screenShot (). Für eine erfolgreiche Testausführung muss die checkLogin () -Methode außerdem einen gültigen Benutzernamen und ein gültiges Kennwort haben.
  • Verwendete Maven-Abhängigkeiten:

org.testngtestng6.14.3testorg.seleniumhq.seleniumselenium-chrome-driver3.141.59testcommons-iocommons-io2.6test
TestNG Annotation-Sequenz für Selen Die

oben beschriebenen Annotationen werden zur Laufzeit in der folgenden Reihenfolge ausgeführt:

  • Vorangehend
  • Vor dem Test
  • Vor der Klasse
  • VorherGruppen
  • Vor der Methode
  • Test
  • Nachmethode
  • Nachgruppen
  • Nachklasse
  • Aftertest
  • Aftersuite

Hier ist die Reihenfolge, in der sie ausgeführt werden:



Attribute, die mit Anmerkungen in TestNG verwendet werden

Anmerkungen in TestNG haben Attribute, die zur Anpassung verwendet werden können. Sie helfen beim Einrichten der Ausführungsreihenfolge von Testmethoden.

Diese Attribute sind:

  • description : Sie können eine Beschreibung der Testmethode angeben.
    Zum Beispiel @Test(description = "dieser Test prüft den Login").
  • alwaysRun : Dieses Attribut stellt sicher, dass die Testmethode immer ausgeführt wird, auch wenn die Tests, von denen es abhängt, fallen. Wenn der Attributwert true ist, wird diese Methode immer ausgeführt.
    Zum Beispiel @Test(alwaysRun = true).
  • dataProvider : Legt den Namen des Datenproviders für die Testmethode fest. Angenommen, Sie führen Ihre Tests in mehreren Browsern aus. Anschließend können Sie in der Testmethode mit dem dataProvider-Attribut Parameter für den Browser und seine Version hinzufügen, die vom Datenprovider an die Methode übergeben werden. In diesem Fall verwendet der Test, der dieses Attribut enthält, diese Eingabe, um die Tests in mehreren Browsern auszuführen.
    Zum Beispiel @Test(dataProvider = "browserübergreifendes Testen").
  • dependantsOnMethods : Liefert Informationen über die Reihenfolge, in der die Tests ausgeführt werden. Ein Test mit diesem Attribut wird nur ausgeführt, wenn der Test, von dem es abhängt, erfolgreich ist. Wenn der Test, von dem die Methode abhängt, abfällt, wird der Test nicht gestartet.
    Zum Beispiel @Test(depenOnmethod = "login").
  • Gruppen : Hilft Ihnen, Ihre Testmethoden, die sich auf eine Funktion konzentrieren, in einer Gruppe zusammenzufassen.
    Zum Beispiel @Test(groups = ”Payment_Module”).
    Mit diesem Attribut können Sie auch steuern, welche Tests ausgeführt werden sollen. Wenn Sie Tests ausführen, können Sie einige Gruppen ignorieren oder umgekehrt nur einige Gruppen ausführen. Sie müssen lediglich die gewünschten Gruppen in der Datei TestNG.xml angeben. Geben Sie im Tag includedie Gruppen an, die ausgeführt werden sollen, und im Tag exclude, die ignoriert werden sollen.
  • dependsOnGroups : Führt die Funktionen der beiden oben genannten Attribute aus, das heißt, es bestimmt die Abhängigkeit der Testmethode von der angegebenen Gruppe. Diese Testmethode wird erst gestartet, nachdem die angegebene Testgruppe abgeschlossen ist.
    Zum Beispiel @Test(depenOnMethods = "Payment_Module").
  • priority : hilft uns bei der Priorisierung von Testmethoden. Wenn TestNG die Testmethoden ausführt, kann dies in zufälliger Reihenfolge erfolgen. In einem Szenario, in dem Ihre Tests in der richtigen Reihenfolge ausgeführt werden sollen, können Sie das Attribut priority verwenden. Die Standardpriorität für alle Testmethoden ist 0. Zunächst werden Tests mit einem niedrigeren Prioritätswert ausgeführt.
    Zum Beispiel @Test(Priorität = 1), @Test(Priorität = 2). In diesem Fall wird zuerst ein Test mit der Priorität eins und dann ein Test mit der Priorität zwei ausgeführt.
  • enabled : Dieses Attribut wird verwendet, wenn Sie einen bestimmten Test ignorieren und nicht ausführen müssen. Alles was Sie tun müssen, ist es auf false zu setzen.
    Zum Beispiel @Test(enabled = false).
  • Zeitlimit : Definiert die Zeit, für die der Test abgeschlossen werden soll. Wenn die Testausführung die durch das Attribut angegebene Zeit überschreitet, schlägt der Test mit einer Ausnahme fehl
    , die @Testorg.testng.internal.thread.ThreadTimeoutException auslöst . Beispiel: (timeOut = 500). Bitte beachten Sie, dass die Zeit in Millisekunden angegeben wird .
  • invocationCount : funktioniert wie eine Schleife. Der Test wird so oft ausgeführt, wie in invocationCount angegeben.
    Beispielsweise wird @Test(invocationCount = 5) fünfmal gestartet.
  • invocationTimeOut : Wird in Verbindung mit dem obigen invocationCount-Attribut verwendet. Der Wert dieses Attributs zusammen mit invocationCount gibt an, dass der Test so oft ausgeführt wird, wie in invocationCount und während der im invocationTimeOut-Attribut angegebenen Zeit.
    Zum Beispiel @Test(invocationCount = 5, invocationTimeOut = 20).
  • expectedExceptions : Hilft bei der Behandlung von Ausnahmen, von denen erwartet wird, dass sie in der Testmethode ausgelöst werden. Wenn die im Attribut angegebene Ausnahme von der Testmethode ausgelöst wird, war der Test erfolgreich. Andernfalls besteht der Test nicht, wenn keine Ausnahme vorliegt oder eine andere Ausnahme ausgelöst wird, die nicht im Attribut angegeben ist.
    Zum Beispiel @Test(expectedExceptions = {ArithmeticException.class}).

Oben sind die Attribute aufgeführt, die mit Anmerkungen in TestNG mit Selen verwendet werden. Das Folgende ist ein Codeausschnitt, der die Verwendung der obigen Attribute demonstriert:

import static org.testng.Assert.assertEquals;
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class AnnotationsTest {
   private WebDriver driver;
   private String url = "https://www.lambdatest.com/";
   @BeforeSuite
   public void setUp() {
       System.setProperty(
               "webdriver.chrome.driver",
               "С:\\selenium\\chromedriver.exe");
       driver = new ChromeDriver();
       System.out.println("The setup process is completed");
   }
   @BeforeTest
   public void profileSetup() {
       driver.manage().window().maximize();
       System.out.println("The profile setup process is completed");
   }
   @BeforeClass
   public void appSetup() {
       driver.get(url);
       System.out.println("The app setup process is completed");
   }
   @Test(priority = 2)
   public void checkLogin() {
       driver.get("https://accounts.lambdatest.com/login");
       driver.findElement(By.xpath("//input[@name='email']")).sendKeys("sadhvisingh24@gmail.com");
       driver.findElement(By.xpath("//input[@name='password']")).sendKeys("xxxxx");
       driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click();
       System.out.println("The login process on lamdatest is completed");
   }
   @Test(priority = 0, description = "this test validates the sign-up test")
   public void signUp() throws InterruptedException {
       WebElement link = driver.findElement(By.xpath("//a[text()='Free Sign Up']"));
       link.click();
       WebElement organization = driver.findElement(By.xpath("//input[@name='organization_name']"));
       organization.sendKeys("LambdaTest");
       WebElement firstName = driver.findElement(By.xpath("//input[@name='name']"));
       firstName.sendKeys("Test");
       WebElement email = driver.findElement(By.xpath("//input[@name='email']"));
       email.sendKeys("User622@gmail.com");
       WebElement password = driver.findElement(By.xpath("//input[@name='password']"));
       password.sendKeys("TestUser123");
       WebElement phoneNumber = driver.findElement(By.xpath("//input[@name='phone']"));
       phoneNumber.sendKeys("9412262090");
       WebElement termsOfService = driver.findElement(By.xpath("//input[@name='terms_of_service']"));
       termsOfService.click();
       WebElement button = driver.findElement(By.xpath("//button[text()='Signup']"));
       button.click();
   }
   @Test(priority = 3,
           alwaysRun = true,
           dependsOnMethods = "check_login",
           description = "this test validates the URL post logging in",
           groups = "url_validation")
   public void testCurrentUrl() throws InterruptedException {
       driver.findElement(By.xpath("//*[@id='app']/header/aside/ul/li[4]/a")).click();
       String currentUrl = driver.getCurrentUrl();
       assertEquals(
               currentUrl,
               "https://automation.lambdatest.com/timeline/?viewType=build&page=1",
               "url did not matched");
       System.out.println("The url validation test is completed");
   }
   @Test(priority = 1,
           description = "this test validates the logout functionality",
           timeOut = 25000)
   public void logout() throws InterruptedException {
       Thread.sleep(6500);
       driver.findElement(By.xpath("//*[@id='userName']")).click();
       driver.findElement(By.xpath("//*[@id='navbarSupportedContent']/ul[2]/li/div/a[5]")).click();
   }
   @Test(enabled = false)
   public void skipMethod() {
       System.out.println("this method will be skipped from the test run using the attribute enabled=false");
   }
   @Test(priority = 6, invocationCount = 5, invocationTimeOut = 20)
   public void invocationcountShowCaseMethod() {
       System.out.println("this method will be executed by 5 times");
   }
   @AfterMethod()
   public void screenshot() throws IOException {
       TakesScreenshot scr = ((TakesScreenshot) driver);
       File file1 = scr.getScreenshotAs(OutputType.FILE);
       FileUtils.copyFile(file1, new File("С:\\test-output\\test1.PNG"));
       System.out.println("Screenshot of the test is taken");
   }
   @AfterClass
   public void closeUp() {
       driver.close();
       System.out.println("The close_up process is completed");
   }
   @AfterTest
   public void reportReady() {
       System.out.println("Report is ready to be shared, with screenshots of tests");
   }
   @AfterSuite
   public void cleanUp() {
       System.out.println("All close up activities completed");
   }
   @BeforeGroups("urlValidation")
   public void setUpSecurity() {
       System.out.println("url validation test starting");
   }
   @AfterGroups("urlValidation")
   public void tearDownSecurity() {
       System.out.println("url validation test finished");
   }
}

Ausgabe auf die Konsole:



TestNG-Bericht:



Zusätzliche Anmerkungen in TestNG

Es gibt einige nützlichere Anmerkungen, mit denen wir unsere Ziele erreichen können.

@DataProvider

Eine Methode mit dieser Annotation wird verwendet, um Daten für eine Testmethode bereitzustellen, in der das dataProvider-Attribut festgelegt ist. Diese Methode hilft beim Erstellen datengesteuerter Tests, in die mehrere Sätze von Eingabewerten übergeben werden können. Die Methode sollte ein zweidimensionales Array oder Objekt zurückgeben.

Eine Anmerkung @DataProviderhat zwei Attribute:

  • name - Dieses Attribut gibt den Namen des Datenanbieters an. Wenn nicht angegeben, wird der Standard Methodenname verwendet.
  • parallel - Mit diesem Attribut können Sie Tests mit verschiedenen Daten parallel ausführen. Dieses Attribut ist einer der Vorteile von TestNG gegenüber Junit. Der Standardwert ist false.

Das folgende Beispiel zeigt die Verwendung von Annotation @DataProvidermit dem angegebenen Namen und den parallelen Attributen.

@DataProvider(name = "SetEnvironment", parallel = true)
public Object[][] getData() {
   Object[][] browserProperty = new Object[][]{
           {Platform.WIN8, "chrome", "70.0"},
           {Platform.WIN8, "chrome", "71.0"}
   };
   return browserProperty;
}	

@Factory

Mit dieser Anmerkung können Sie mehrere Testklassen in einer Testklasse ausführen. Einfach ausgedrückt, werden Tests dynamisch definiert und erstellt.

Das folgende Codefragment zeigt die Verwendung von Annotation @Factory, mit deren Hilfe Testklassenmethoden aufgerufen werden können.

import org.testng.annotations.Test;
import org.testng.annotations.Factory;
class FactorySimplyTest1 {
   @Test
   public void testMethod1() {
       System.out.println("This is to test for method 1 for Factor Annotation");
   }
}
class FactorySimpleTest2 {
   @Test
   public void testMethod2() {
       System.out.println("This is to test for method 2 for Factor Annotation");
   }
}
public class FactoryAnnotation {
   @Factory()
   @Test
   public Object[] getTestFactoryMethod() {
       Object[] factoryTest = new Object[2];
       factoryTest[0] = new FactorySimplyTest1();
       factoryTest[1] = new FactorySimpleTest2();
       return factoryTest;
   }
}

Konsolenausgabe: Mit



@Parameters

dieser Annotation können Sie Parameter über die Datei TestNG.xml an Ihre Tests übergeben. Dies ist nützlich, wenn Sie eine begrenzte Datenmenge in Ihre Tests übertragen müssen. Für komplexe und große Datenmengen ist es besser, Anmerkungen @DataProvideroder Excel zu verwenden.

Anwendungsbeispiel:

@Parameters({"username", "password"})
@Test()
public void checkLogin(String username, String password) {
   driver.get("https://accounts.lambdatest.com/login");
   driver.findElement(By.xpath("//input[@name='email']")).sendKeys(username);
   driver.findElement(By.xpath("//input[@name='password']")).sendKeys(password);
   driver.findElement(By.xpath("//*[@id='app']/section/form/div/div/button")).click();
   System.out.println("The login process on lamdatest is completed");
}

In der Datei TestNG.xml sind die Parameter wie folgt definiert:


@Listener

Diese Anmerkung hilft bei der Protokollierung und Berichterstellung. Es gibt mehrere Listener:

  • IExecutionListener
  • IAnnotationTransformer
  • ISuiteListener
  • ITestListener

Die Beschreibung dieser Listener und ihre Verwendung werden wir jedoch für einen anderen Artikel hinterlassen.

Das ist alles!

Bei der Arbeit mit all diesen Annotationen und Attributen ist zu berücksichtigen, dass Sie Java Version 1.5 oder höher verwenden müssen, da Annotationen in früheren Versionen von Java nicht unterstützt werden.

Alle obigen Anmerkungen und TestNG-Attribute tragen zur Verbesserung der Codestruktur und der Lesbarkeit bei. Auf diese Weise können detaillierte Berichte erstellt werden, wodurch Statusberichte einfacher und nützlicher werden. Die Verwendung dieser Anmerkungen in TestNG für Selen richtet sich ganz nach Ihren geschäftlichen Anforderungen. Daher ist es wichtig, die richtigen Anmerkungen auszuwählen und richtig zu verwenden. Sie können diese Anmerkungen jetzt in TestNG auf dem LambdaTest Selenium Grid ausprobieren !

Diejenigen, die bis zum Ende gelesen haben, sind zu einem kostenlosen offenen Webinar eingeladen, das am 14. Mai von unserem Lehrer Dmitry Eremin abgehalten wird . Nun, gemäß der etablierten Tradition warten wir auf Ihre Kommentare, Freunde.

Jetzt auch beliebt: