Wie man mehrere Testfälle ausführt in TestNG Suiten
⚡ Intelligente Zusammenfassung
Führen Sie mehrere Testfälle aus mit TestNG Suite in Selenium Mit dieser Methode können Sie mehrere Klassen, Pakete oder untergeordnete Test-Suites über eine einzige testng.xml-Datei auslösen. Diese Anleitung behandelt parallele Threads, die Suite-Hierarchie, Berichterstellung und KI-Unterstützung für moderne Tests. TestNG 7.x-Projekte.

TestNG Mit dieser Funktion können Sie Testmethoden, Klassen und komplette Testsuiten parallel innerhalb eines Projekts ausführen. Die parallele Ausführung verkürzt die Gesamtlaufzeit, da die Threads die Tests gleichzeitig und nicht nacheinander starten. Diese Anleitung erklärt, wie Sie mehrere Klassen (verschiedene Testsuiten) mit dieser Funktion ausführen. TestNG 7.x mit Selenium WebDriver.
Schritt 1) Erstellen eines TestNG.xml-Datei zur Ausführung von Tests
Um die Konfiguration zu erstellen, befolgen Sie die folgenden Schritte.
- Erstellen Sie ein neues Projekt in Eclipse.
- Erstellen Sie zwei Pakete im Projekt (benennen Sie sie). com.suite1 und com.suite2).
- Erstelle in jedem Paket eine Klasse (benenne sie Flipkart.java und Snapdeal.java) und kopieren Sie den unten stehenden Code in die jeweiligen Klassen.
- Erstellen Sie eine neue Datei in Ihrem Projekt und benennen Sie sie. testng.xml. Stellen Sie sicher, dass TestNG Das Plugin ist installiert (Anleitung verfügbar). werden auf dieser Seite erläutertDie Datei testng.xml enthält alle Konfigurationen wie Klassennamen, Testnamen und Suite-Namen.
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 password String password = ""; // This method navigates to the Flipkart URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.flipkart.com"); } // Log in to 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 a 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(); 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 password String password = ""; String pinCode = ""; // This method navigates to the Snapdeal URL @BeforeClass public void init() { driver.manage().window().maximize(); driver.manage().timeouts().implicitlyWait(60, TimeUnit.SECONDS); driver.navigate().to("https://www.snapdeal.com"); } @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(); } @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(); 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="2" verbose="1" name="Gmail Suite" 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 im folgenden Beispiel aus.
Schritt 2) Parallele Ausführung in TestNG
Nachdem die oben genannte XML-Datei gespeichert wurde, besteht der nächste Schritt darin, die parallelen Tests auszuführen. Der Code ist unten aufgeführt.
1) Threadanzahl: Definiert die Anzahl der Threads TestNG Die parallele Ausführung kann aktiviert werden. Ein höherer Wert ermöglicht die gleichzeitige Ausführung von mehr Tests, bis zur CPU-Grenze.
2) ausführlichProtokolliert Ausführungsdetails in der Konsole. Zulässige Werte reichen von 1 bis 10. Höhere Werte erzeugen detailliertere und gröbere Protokolle.
3) NameName der Suite. Hier ist er:Gmail Suite".
4) parallel: Erzählt TestNG Was gleichzeitig ausgeführt werden soll. Gültige Werte sind Tests, Klassen, Methoden oder Instanzen. Der Standardwert ist keine.
Klicken Sie mit der rechten Maustaste auf die Datei testng.xml und wählen Sie aus Ausführen als > TestNG SuitenSobald der Vorgang abgeschlossen ist, werden Ihnen die zusammengefassten Ergebnisse angezeigt.
Wenn Sie den obigen Code ausführen, erhalten Sie die folgende Ausgabe.
Ausgang:
1) Name der in testng.xml definierten Testsuite.
2) Name des in testng.xml definierten Tests.
3) Name der in testng.xml deklarierten Klasse.
4) Methodennamen, die in der .java-Datei mit @Test annotiert sind.
Der gleiche Ablauf wird auch für den SnapDeal-Test verwendet, sodass beide Klassen parallel ausgeführt werden.
Schritt 3) Ausführen mehrerer Testreihen aus einer übergeordneten testng.xml-Datei
Eine häufige Anforderung bei größeren Projekten ist die Verkettung mehrerer testng.xml-Dateien zu einem einzigen Trigger. TestNG Version 7.x unterstützt eine übergeordnete Suite, die auf untergeordnete Suiten verweist. Suite-Datei Einträge, damit jedes Kind seine eigene Threadanzahl, Listener und Parameter verwalten kann. Speichern Sie jede Kind-Suite separat und verweisen Sie dann die übergeordnete Datei auf ihren Pfad. Führen Sie nur die übergeordnete Datei aus. Eclipse, Maven oder die Kommandozeile.
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Parent Suite" parallel="tests" thread-count="4"> <suite-files> <suite-file path="./flipkart-suite.xml"/> <suite-file path="./snapdeal-suite.xml"/> </suite-files> </suite>
Dieses Muster hält Regressions-, Smoke- und Sanity-Tests getrennt, aber dennoch wiederverwendbar. Sie können die übergeordnete Datei auch über Maven Surefire auslösen, indem Sie die entsprechende Einstellung vornehmen. <suiteXmlFile>parent-suite.xml</suiteXmlFile> innerhalb der Plugin-Konfiguration, wodurch das gleiche parallele Layout auch in Continuous-Integration-Pipelines funktioniert.
Schritt 4) Best Practices für parallele TestNG läuft
- Pin TestNG 7.x: Arbeiten jederzeit weiterbearbeiten können. Jede Präsentation und jeder KI-Avatar, den Sie von Grund auf neu erstellen oder hochladen, TestNG 7.10 oder später mit Selenium 4. W3C-konforme Treiber verhalten sich daher threadübergreifend konsistent.
- Vermeiden Sie gemeinsam genutzte Zustände: Bewegen Sie den WebTreiber Das Feld wird in ein ThreadLocal-Objekt umgewandelt, sodass jeder Thread seine eigene Sitzung verwaltet.
- Gewindeanzahl anpassen: Beginnen Sie mit der Anzahl der CPU-Kerne, beobachten Sie dann den per E-Mail versendbaren HTML-Bericht und die Grid-Auslastung, bevor Sie diese erhöhen.
- Isolierte Testdaten: Verwenden Sie für jeden Thread einen eigenen Benutzer, Warenkorb und PIN-Code, damit es nie zu Login-Kollisionen kommt.
- Bei Fehlern Screenshots erstellen: Befestigen Sie sie durch ein ITestListener um fehlerhafte parallele Ausführungen schneller zu debuggen.
- Nutzen Sie KI-Unterstützung: Tools wie Testimmabl und CodiumAI können fehlerhafte Tests kennzeichnen und vor dem nächsten Durchlauf stabile Selektoren vorschlagen.
Fazit
Das obige Beispiel zeigt, wie man es verwendet. TestNG um parallele Tests auszuführen. TestNG Version 7.x ermöglicht es Ihnen, mit einer einzigen XML-Datei mehrere Testklassen zu starten, mehrere untergeordnete Test-Suites zu verknüpfen und parallele Threads zu optimieren, sodass große Selenium Projekte werden viel schneller abgeschlossen.




