TestNG Annotation Guide für Selenium WebDriver

Frieden, Arbeit, Mai, Chabrowsk Bewohner! Für diejenigen, die wie wir in die Arbeitswoche zwischen den Ferien eingebrochen sind, haben wir eine Übersetzung vorbereitet, die mit dem Beginn der Anmeldung für den Java QA Engineer- Kurs zusammenfallen soll, der am 28. Mai starten soll.



TestNG ist ein von Cédric Beust entwickeltes Testframework , mit dem wir viele unserer Testanforderungen erfüllen können. TestNG wird häufig mit Selen verwendet. Möchten Sie wissen, was NG bedeutet? Dies bedeutet "Next Generation" . TestNG ähnelt JUnit, ist jedoch leistungsfähiger, wenn es darum geht, den Programmfluss zu steuern. Die Architektur des Frameworks hilft uns, Tests strukturierter zu gestalten und bessere Validierungspunkte bereitzustellen.

Einige Funktionen von TestNG, die Beachtung verdienen:

  • Leistungsstarke und abwechslungsreiche Anmerkungen zur Unterstützung Ihrer Testfälle.
  • Parallele Ausführung von Tests unter Verwendung von Abhängigkeiten zwischen Tests.
  • Die Flexibilität, Ihre Tests für verschiedene Datensätze, über die Datei TestNG.xml oder über das Konzept der Datenanbieter auszuführen.
  • Gruppierung und Priorisierung von Testfällen.
  • Erstellung 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 wir mit den TestNG-Anmerkungen für Selen fortfahren, werden die Voraussetzungen für die Einrichtung von TestNG erläutert.

Voraussetzungen:

  • Java Development Kit
  • Eclipse oder eine andere IDE
  • Installiertes TestNG in Eclipse oder in Ihrer IDE

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

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

Was ist eine Anmerkung?

Eine Annotation ist eine Bezeichnung, die zusätzliche Informationen zu einer Klasse oder Methode enthält ( Anmerkung des Übersetzers: Annotationen 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 befinden sich in der Methode mit @Test Annotation. Es verfügt über verschiedene Attribute, mit denen der Methodenstart konfiguriert werden kann.

Der folgende Beispielcode ü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 ausgeführt, bevor die erste Methode mit der Annotation @Test . (Anmerkung des Übersetzers: als Teil des Tests, der im test der XML-Konfigurationsdatei definiert ist) . 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 finden 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 @Test Methoden werden nach allen @Test Test-Methoden Ihres Tests ausgeführt. ( Anmerkung des Übersetzers: Als Teil des Tests, der im test in der XML-Konfigurationsdatei definiert ist, ist die „aktuelle Klasse“ im Original nicht korrekt geschrieben .) Dies ist eine nützliche Anmerkung, die für die Bereitstellung von Testergebnissen hilfreich ist. Mit dieser Anmerkung können Sie einen Bericht über Ihre Tests erstellen und 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 @Test Methode ausgeführt . Sie können damit die Verbindung zur Datenbank testen, bevor Sie den Test ausführen. Wenn Sie beispielsweise Funktionen testen, die von der Anmeldung des Benutzers abhängen, geben Sie hier den Code ein, um das System einzugeben.
Das folgende Codefragment demonstriert die LambdaTest-Anmeldung:

 @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 @Test Methode gestartet . Mit dieser Anmerkung können Sie bei jedem Test Screenshots erstellen.
Das Folgende ist ein 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 Anmerkung 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 Anmerkung wird nach der letzten Testmethode in der aktuellen Klasse ausgeführt. Diese Anmerkung in TestNG kann verwendet werden, um Aktionen zum Bereinigen von Ressourcen nach Abschluss des Tests auszuführen, z. B. das Schließen des Treibers usw.
Das folgende Beispiel zeigt ein Code-Snippet, das das Schließen des Treibers zeigt:

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

@BeforeSuite

Eine Testsuite (Suite) kann aus mehreren Klassen bestehen. Diese Anmerkung wird vor allen Testmethoden aller Klassen ausgeführt. Diese Anmerkung markiert den Einstiegspunkt beim Start. @BeforeSuite können die @BeforeSuite in TestNG verwenden, um allgemeine Funktionen auszuführen, z. B. das Einrichten und Ausführen von Selenium- oder Remote- @BeforeSuite usw.
Ein Beispiel für eine @BeforeSuite Annotation in TestNG, die das Treiber-Setup zeigt:

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

@AfterSuite

Diese Anmerkung in TestNG beginnt, nachdem alle Testmethoden in allen Klassen ausgeführt wurden. Diese Anmerkung kann zum Bereinigen vor Abschluss von Tests verwendet werden, wenn Sie mehrere Klassen verwenden, z. B. das Schließen von Treibern usw.
Unten finden Sie ein Code-Snippet für die @AfterSuite Annotation in TestNG für Selen:

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

@BeforeGroups

TestNG kann Tests mithilfe des Gruppenattributs in den @Test Anmerkungen @Test . Wenn Sie beispielsweise möchten, dass alle ähnlichen Funktionen im Zusammenhang mit der Benutzerverwaltung miteinander kombiniert werden, können Sie die Tests wie Dashboard (Benutzerfenster), Profil (Profil), Transaktionen (Transaktionen) und dergleichen in einer Gruppe markieren. wie user_management. Die @BeforeGroups in TestNG hilft beim Starten bestimmter Aktionen vor der angegebenen Testgruppe. Diese Anmerkung kann verwendet werden, wenn sich die Gruppe auf eine Funktionalität konzentriert, wie im obigen Beispiel angegeben. Die @BeforeGroup kann eine Anmeldefunktion enthalten, die zum Ausführen von Tests in einer Gruppe erforderlich ist, z. B. zum Testen eines Benutzerbereichs, eines Benutzerprofils usw.

Ein Beispiel für die Verwendung von @BeforeGroups :

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

@AfterGroups

Diese Anmerkung wird gestartet, nachdem alle Testmethoden der angegebenen Gruppe ausgeführt wurden.

Beispielcode für @AfterGroups Annotation @AfterGroups in 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-Bericht:



Konsolenausgabe:



Anmerkung des Übersetzers:

  • Um den Test auszuführen, ändern Sie den Pfad in chromedriver.exe in der setUp () -Methode und den Pfad zum Screenshot-Ordner in der screenShot () -Methode. Für eine erfolgreiche Testausführung muss die checkLogin () -Methode einen gültigen Benutzernamen und ein gültiges Kennwort haben.
  • Verwendete Maven-Abhängigkeiten:

 <dependencies> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.14.3</version> <scope>test</scope> </dependency> <dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-chrome-driver</artifactId> <version>3.141.59</version> <scope>test</scope> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.6</version> <scope>test</scope> </dependency> </dependencies> 
TestNG-Annotationssequenz für Selen

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

  • Vorher Suite
  • Vor dem Test
  • Vor der Klasse
  • BeforeGroups
  • Vor der Methode
  • Test
  • Nachmethode
  • Nachgruppen
  • Nachklasse
  • Aftertest
  • Aftersuite

Hier ist die Reihenfolge ihrer Ausführung:



Attribute, die mit Anmerkungen in TestNG verwendet werden

Anmerkungen in TestNG verfügen über Attribute, die Sie zum Anpassen verwenden können. Sie helfen beim Einrichten der Ausführungsreihenfolge von Testmethoden.

Diese Attribute sind:

  • Beschreibung : Sie können eine Beschreibung der Testmethode angeben.
    Zum Beispiel @Test (description = "Dieser Test überprüft die Anmeldung").
  • alwaysRun : Dieses Attribut stellt sicher, dass die Testmethode immer ausgeführt wird, auch wenn die Tests, von denen sie abhängt, gelöscht werden. 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. In der Testmethode mit dem Attribut dataProvider können Sie 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 = "Cross-Browser-Test").
  • abhängige Methoden : Enthält Informationen zur Reihenfolge, in der Tests ausgeführt werden. Ein Test mit diesem Attribut wird nur ausgeführt, wenn der Test, von dem er abhängt, erfolgreich ist. Wenn der Test, von dem die Methode abhängt, fällt, startet der Test nicht.
    Zum Beispiel @Test (depenOnmethod = "login").
  • Gruppen : Hilft dabei, Ihre Testmethoden, die sich auf eine Funktionalität konzentrieren, in einer Gruppe zu gruppieren.
    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 erforderlichen Gruppen in der Datei TestNG.xml angeben. Geben Sie im include Tag die Gruppen an, die Sie ausführen möchten, und im exclude Tag, das Sie ignorieren möchten.
  • abhängige Gruppen : Führt die Funktionen der beiden oben genannten Attribute aus, dh es wird die Abhängigkeit der Testmethode von der angegebenen Gruppe bestimmt. Diese Testmethode wird erst gestartet, nachdem die angegebene Testgruppe abgeschlossen ist.
    Zum Beispiel @Test (depenOnMethods = "Payment_Module").
  • Priorität : Hilft uns, Testmethoden zu priorisieren. 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 Prioritätsattribut 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 der Test mit der Priorität eins und dann der 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).
  • Zeitüberschreitung : 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 org.testng.internal.thread.ThreadTimeoutException auslöst
    Zum Beispiel @Test (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 ausgeführt.
  • 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 angegeben, und während der im Attribut invocationTimeOut angegebenen Zeit.
    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 schlägt das Fehlen einer Ausnahme oder das Auslösen einer anderen Ausnahme, die nicht im Attribut angegeben ist, den Test fehl.
    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 Codefragment, das die Verwendung der oben genannten 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 an die Konsole:



TestNG-Bericht:



Zusätzliche Anmerkungen in TestNG

Es gibt noch einige nützliche 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, an die mehrere Sätze von Eingabewerten übergeben werden können. Die Methode sollte ein zweidimensionales Array oder Objekt zurückgeben.

Die Annotation @DataProvider weist zwei Attribute auf:

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

Das folgende Beispiel zeigt die Verwendung der Annotation @DataProvider mit 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

Diese Anmerkung hilft dabei, mehrere Testklassen durch eine Testklasse zu führen. Einfach ausgedrückt, definiert und erstellt es Tests dynamisch.

Das folgende Codefragment zeigt die Verwendung der Annotation @Factory , mit deren Hilfe @Factory 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:



@Parameters

Mit dieser Anmerkung 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 verwenden Sie am besten die Annotation @DataProvider oder Excel.

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:

 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Suite"> <test thread-count="5" name="Annotations"> <parameter name="username" value="sadhvisingh24@gmail.com" /> <parameter name="password" value="XXXXX" /> <classes> <class name="Parameter_annotation"/> </classes> </test> <!-- Annotations --> </suite> <!-- Suite --> 

@Listener

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

  • IExecutionListener
  • IAnnotationTransformer
  • ISuiteListener
  • ITestListener

Wir werden jedoch die Beschreibung dieser Hörer und ihre Verwendung für einen anderen Artikel belassen.

Das ist alles!

Wenn Sie mit all diesen Anmerkungen und Attributen arbeiten, müssen Sie unbedingt Java Version 1.5 oder höher verwenden, da Anmerkungen in früheren Java-Versionen nicht unterstützt werden.

Alle oben genannten Anmerkungen und TestNG-Attribute tragen zur Verbesserung der Codestruktur und Lesbarkeit bei. Dies hilft bei der Bereitstellung detaillierter Berichte, wodurch Statusberichte einfacher und nützlicher werden. Die Verwendung dieser Anmerkungen in TestNG für Selen entspricht vollständig Ihren Geschäftsanforderungen. 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.

Source: https://habr.com/ru/post/de450872/


All Articles