Slik kjører du flere testtilfeller i TestNG Suite
⚡ Smart oppsummering
Kjør flere testtilfeller med TestNG Suite i Selenium lar deg utløse flere klasser, pakker eller underordnede suiter fra én testng.xml. Denne gjennomgangen dekker parallelle tråder, suitehierarki, rapportering og AI-assistanse for moderne TestNG 7.x-prosjekter.

TestNG lar deg kjøre testmetoder, klasser og komplette pakker parallelt i ett prosjekt. Parallell utførelse reduserer total kjøretid fordi tråder starter testene samtidig i stedet for én etter hverandre. Denne veiledningen forklarer hvordan du kjører flere klasser (forskjellige pakker) ved hjelp av TestNG 7.x med Selenium WebDriver.
Trinn 1) Opprette en TestNG.xml-fil for å kjøre tester
Følg trinnene nedenfor for å opprette konfigurasjonen.
- Opprett et nytt prosjekt i Eclipse.
- Opprett to pakker i prosjektet (gi dem navn com.suite1 og com.suite2).
- Opprett en klasse i hver pakke (gi dem navn Flipkart.java og Snapdeal.java) og kopier koden nedenfor inn i de respektive klassene.
- Opprett en ny fil i prosjektet ditt og gi den et navn testng.xml. Forsikre deg om at TestNG plugin er installert (instruksjoner tilgjengelig her.). testng.xml-filen inneholder all konfigurasjon, for eksempel klassenavn, testnavn og suite-navn.
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>
Den endelige prosjektstrukturen ser ut som eksemplet nedenfor.
Trinn 2) Parallell utførelse i TestNG
Etter at du har lagret XML-filen ovenfor, er neste trinn å kjøre parallelle tester. Koden vises nedenfor.
1) trådtellingDefinerer hvor mange tråder TestNG kan spinne opp for parallell utførelse. En høyere verdi kjører flere tester samtidig, opp til CPU-grensen.
2) ordrikLogger utførelsesdetaljer i konsollen. Tillatte verdier går fra 1 til 10. Høyere verdier gir mer detaljerte og detaljerte logger.
3) navnNavnet på suiten. Her er det «Gmail Suite».
4) parallellForteller TestNG hva som skal kjøres samtidig. Gyldige verdier er tester, klasser, metoder eller instanser. Standardverdien er none.
Høyreklikk på testng.xml-filen og velg Kjør som > TestNG SuiteNår det er ferdig, vil du se de samlede resultatene.
Når du utfører koden ovenfor, vil du få følgende utgang.
Utgang:
1) Navnet på pakken som er definert i testng.xml.
2) Navnet på testen som er definert i testng.xml.
3) Navnet på klassen som er deklarert i testng.xml.
4) Metodenavn merket med @Test i .java-filen.
Den samme flyten kjører for SnapDeal-testen, så begge klassene kjøres side om side.
Trinn 3) Kjøre flere pakker fra én overordnet testng.xml
Et vanlig krav på større prosjekter er å kjede sammen flere testng.xml-filer til én enkelt trigger. TestNG 7.x støtter en foreldrepakke som refererer til barneprogrammer suite-fil oppføringer, slik at hvert barn kan beholde sitt eget antall tråder, lyttere og parametere. Lagre hver barnesuite separat, og pek deretter foreldrefilen til banen. Kjør bare foreldrefilen fra Eclipse, Maven eller kommandolinjen.
<!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>
Dette mønsteret holder regresjons-, røyk- og fornuftspakkene separate, men likevel gjenbrukbare. Du kan også utløse foreldrefilen fra Maven Surefire ved å sette <suiteXmlFile>parent-suite.xml</suiteXmlFile> inne i plugin-konfigurasjonen, som gjør at det samme parallelle oppsettet fungerer i kontinuerlige integrasjonsrørledninger.
Trinn 4) Beste praksis for parallell TestNG går
- pin TestNG 7.x: Bruk TestNG 7.10 eller nyere med Selenium 4 slik at W3C-kompatible drivere oppfører seg konsistent på tvers av tråder.
- Unngå delt tilstand: Flytt webdriver feltet inn i en ThreadLocal slik at hver tråd har sin egen økt.
- Juster trådantall: Start med antallet CPU-kjerner, og følg deretter med på den e-postbare HTML-rapporten og Grid-innlastingen før du laster den opp.
- Isoler testdata: Bruk unike brukere, handlekurver og postkoder per tråd, slik at pålogginger aldri kolliderer.
- Ta skjermbilder ved feil: Fest dem gjennom en ITestListener for å feilsøke ustabile parallelle kjøringer raskere.
- Bruk AI-assistanse: Verktøy som Testim, mabl og CodiumAI kan flagge ustabile tester og foreslå stabile selektorer før neste kjøring.
Konklusjon
Eksemplet ovenfor viser hvordan du bruker TestNG å utføre parallelle tester. TestNG 7.x gir deg én XML-fil for å starte flere testklasser, koble sammen flere underordnede suiter og finjustere parallelle tråder, så store Selenium prosjekter blir ferdige mye raskere.




