TestNG: So führen Sie mehrere Testsuiten aus Selenium
TestNG ermöglicht Ihnen, Testmethoden, Testklassen und Testfälle parallel in Ihrem Projekt auszuführen. Durch die parallele Ausführung können wir die Ausführungszeit verkürzen, da Tests gleichzeitig in verschiedenen Threads gestartet und ausgeführt werden.
Hier erfahren Sie, wie Sie mehrere Klassen (auch verschiedene Suiten genannt) ausführen TestNG.
Schritt 1) Erstellen eines TestNG.xml-Datei zum Ausführen des Tests
Befolgen Sie dazu die folgenden Schritte.
- Erstellen Sie ein neues Projekt in Eclipse
- Erstellen Sie zwei Pakete in den Projekten (benennen Sie sie als com.suite1 und com.suite2).
- Erstellen Sie in jedem Paket eine Klasse (benennen Sie sie als Flipkart.java und Snapdeal.java) und kopieren Sie den folgenden Code in die jeweiligen Klassen
- Erstellen Sie eine neue Datei in Ihrem Projekt und nennen Sie sie testng.xml (Stellen Sie sicher, dass Sie das Test-Plugin für Eclipse installiert haben, Anweisungen verfügbar HIER). Testng.xml enthält die gesamte Konfiguration (Klassennamen, Testnamen und Suitnamen).
Flipkart.java
package com.suite1; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class Flipkart{ WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and passwrod String password = ""; // This method is to navigate flipkart URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.flipkart.com"); } // To log in flipkart @Test public void login() { driver.findElement(By.partialLinkText("Login")).click(); driver.findElement( By.cssSelector(".fk-input.login-form-input.user-email")) .sendKeys(username); driver.findElement( By.cssSelector(".fk-input.login-form-input.user-pwd")) .sendKeys(password); driver.findElement(By.cssSelector(".submit-btn.login-btn.btn")).click(); } // Search For product @Test public void searchAndSelectProduct() { driver.findElement(By.id("fk-top-search-box")).sendKeys("moto g3"); driver.findElement( By.cssSelector("search-bar-submit.fk-font-13.fk-font-bold")) .click(); // select the first item in the search results String css = ".gd-row.browse-grid-row:nth-of-type(1) > div:nth-child(1)>div>div:nth-child(2)>div>a"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement( By.cssSelector(".btn-express-checkout.btn-big.current")) .click(); driver.findElement(By.cssSelector(".remove.fk-inline-block")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { Actions s = new Actions(driver); WebElement user = driver.findElement(By.partialLinkText(username)); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
SnapDeal.java
package com.suite2; import java.util.concurrent.TimeUnit; import org.openqa.selenium.Alert; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.interactions.Actions; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class SnapDeal { WebDriver driver = new FirefoxDriver(); String username = ""; // Change to your username and passwrod String password = ""; String pinCode = ""; // This method is to navigate snapdeal URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.snapdeal.com"); } // To log in flipkart @Test public void login() { driver.findElement(By.xpath("//button[text()='Login']")).click(); driver.switchTo().frame("loginIframe"); driver.findElement(By.cssSelector("div[onClick='getLoginForm()']")) .click(); driver.findElement(By.id("j_username")).sendKeys(username); driver.findElement(By.id("j_password_login")).sendKeys(password); driver.findElement(By.id("signin_submit")).click(); driver.switchTo().defaultContent(); } // Search For product @Test public void searchAndSelectProduct() { driver.findElement(By.cssSelector(".col-xs-20.searchformInput.keyword")) .sendKeys("iphone 6s"); driver.findElement(By.cssSelector(".sd-icon.sd-icon-search")).click(); // select the first item in the search results String css = ".product_grid_row:nth-of-type(1)>div:nth-child(1)"; driver.findElement(By.cssSelector(css)).click(); } @Test public void buyAndRemoveFromCart() { driver.findElement(By.xpath("//li[contains(text(),'Silver')]")).click(); driver.findElement(By.id("pincode-check")).sendKeys(pinCode); driver.findElement(By.id("buy-button-id")).click(); driver.findElement(By.cssSelector("i[title='Delete Item']")).click(); Alert a = driver.switchTo().alert(); a.accept(); } @Test public void logout() { driver.findElement(By.linkText("START SHOPPING NOW")).click(); Actions s = new Actions(driver); WebElement user = driver.findElement(By.cssSelector(".sd-icon.sd-icon-user")); s.moveToElement(user).build().perform(); driver.findElement(By.linkText("Logout")).click(); } @AfterClass public void quit() { driver.close(); } }
TestNg.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite thread-count="1" verbose="1" name="Gmail Suite" annotations="JDK" parallel="tests"> <test name="flipkart"> <classes> <class name="com.suite1.Flipkart"/> </classes> </test> <test name="Myntra"> <classes> <class name="com.suite2.SnapDeal"/> </classes> </test> </suite>
Die endgültige Projektstruktur sieht wie folgt aus:
Schritt 2) Parallele Ausführung in TestNG
Nachdem wir wie oben gezeigt eine XML-Datei erstellt haben, führen wir im nächsten Schritt den Paralleltest aus. Unten ist der Code.
1) Threadanzahl: Dies wird für die parallele Ausführung basierend auf dem Zahlenskript verwendet. Die Ausführung erfolgt in paralleler oder sequentieller Reihenfolge.
2) ausführlich: Wird verwendet, um die Ausführungsdetails in der Konsole zu protokollieren. Der Wert sollte zwischen 1 und 10 liegen. Die Protokolldetails im Konsolenfenster werden detaillierter und klarer, wenn Sie den Wert des Attributs „verbose“ in der Konfigurationsdatei testng.xml erhöhen.
3) Name: Name der Suite. Hier ist es „Gmail Suite“
4) Parallel: Um Skripte parallel auszuführen, kann der Wert „tests/classes/methods/suites“ sein. Der Standardwert ist keine
Klicken Sie mit der rechten Maustaste auf die Datei testng.xml und wählen Sie „Als Test ausführen“. Sobald dies erfolgreich war, werden alle Ergebnisse angezeigt.
Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe.
Ausgang:
1) Name der Suite in testng.xml
2) Name des Tests in testng.xml
3) Name der Klasse in testng.xml
4) Methodennamen mit @Test-Annotationen in der .java-Datei
Ebenso wird eine Testsuite für Snap Deals ausgeführt.
Fazit
Hier haben wir im obigen Beispiel gesehen, wie man es benutzt Testng um einen parallelen Test auszuführen. TestNG Bietet die Möglichkeit, mehrere Tests parallel in einer einzigen Konfigurationsdatei (XML) auszuführen.