Kako pokrenuti više testnih slučajeva u TestNG Apartman
⚡ Pametni sažetak
Pokreni više testnih slučajeva s TestNG Apartman u Selenium omogućuje vam pokretanje nekoliko klasa, paketa ili podređenih paketa iz jedne datoteke testng.xml. Ovaj vodič pokriva paralelne niti, hijerarhiju paketa, izvještavanje i AI pomoć za moderno TestNG 7.x projekti.
TestNG Omogućuje vam paralelno pokretanje metoda testiranja, klasa i punih paketa unutar jednog projekta. Paralelno izvršavanje smanjuje ukupno vrijeme izvođenja jer niti pokreću testove istovremeno umjesto jednu za drugom. Ovaj vodič objašnjava kako pokrenuti više klasa (različitih paketa) pomoću TestNG 7.x s Selenium WebDriver.
Korak 1) Stvaranje a TestNG.xml datoteka za izvršavanje testova
Za izradu konfiguracije slijedite dolje navedene korake.
- Izradi novi projekt u Eclipse.
- Napravite dva paketa u projektu (nazovite ih com.suite1 i com.suite2).
- Kreirajte klasu u svakom paketu (navedite ih Flipkart.java i Snapdeal.java) i kopirajte donji kod u odgovarajuće klase.
- Napravite novu datoteku u svom projektu i nazovite je testng.xml. Obavezno provjerite TestNG dodatak je instaliran (upute su dostupne ovdje). Datoteka testng.xml sadrži sve konfiguracije kao što su nazivi klasa, nazivi testova i nazivi paketa.
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>
Konačna struktura projekta izgleda kao u primjeru ispod.
Korak 2) Paralelno izvođenje u TestNG
Nakon spremanja gore navedene XML datoteke, sljedeći korak je pokretanje paralelnih testova. Kod je prikazan u nastavku.
1) brojanje niti: Definira koliko niti TestNG može se pokrenuti za paralelno izvršavanje. Viša vrijednost pokreće više testova odjednom, do ograničenja CPU-a.
2) opširno: Zapisuje detalje izvršavanja u konzolu. Dopuštene vrijednosti kreću se od 1 do 10. Veće vrijednosti daju detaljnije i granularnije zapisnike.
3) imeNaziv apartmana. Evo ga "Gmail Apartman”.
4) paralelnoGovori TestNG što se izvršava istodobno. Valjane vrijednosti su testovi, klase, metode ili instance. Zadana vrijednost je nijedan.
Desnom tipkom miša kliknite datoteku testng.xml i odaberite Pokreni kao > TestNG ApartmanNakon što završi, vidjet ćete konsolidirane rezultate.
Kada izvršite gornji kod, dobit ćete sljedeći izlaz.
Izlaz:
1) Naziv paketa definiran u testng.xml.
2) Naziv testa definiran u testng.xml.
3) Naziv klase deklarirane u testng.xml.
4) Imena metoda označena s @Test u .java datoteci.
Isti tok se izvodi za SnapDeal test, tako da se obje klase izvršavaju paralelno.
Korak 3) Pokretanje više paketa iz jedne nadređene datoteke testng.xml
Uobičajeni zahtjev na većim projektima je povezivanje nekoliko datoteka testng.xml u jedan okidač. TestNG 7.x podržava roditeljski paket koji referencira podređeni datoteka-suite unose, tako da svako dijete može zadržati vlastiti broj niti, slušače i parametre. Spremite svaki paket djeteta zasebno, a zatim roditelja usmjerite na njegovu putanju. Pokrenite samo roditeljsku datoteku iz Eclipse, Maven ili naredbeni redak.
<!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>
Ovaj obrazac drži regresijski, smoke i sanity pakete odvojenima, ali ih je moguće ponovno koristiti. Također možete pokrenuti nadređenu datoteku iz Maven Surefirea postavljanjem <suiteXmlFile>parent-suite.xml</suiteXmlFile> unutar konfiguracije dodatka, što omogućuje da isti paralelni raspored radi u cjevovodima kontinuirane integracije.
Korak 4) Najbolje prakse za paralelno TestNG pokreće
- bor TestNG 7.x: Koristiti TestNG 7.10 ili noviji s Selenium 4 tako da se upravljački programi kompatibilni s W3C-om ponašaju dosljedno u svim nitima.
- Izbjegavajte dijeljeno stanje: Premjesti webdriver polje u ThreadLocal tako da svaka nit ima vlastitu sesiju.
- Broj niti za podešavanje: Započnite s brojem jezgri procesora, a zatim pogledajte HTML izvješće koje se može poslati e-poštom i učitavanje mreže prije nego što ga povećate.
- Izolirajte podatke testa: Koristite jedinstvene korisnike, košarice i PIN kodove po niti kako se prijave nikada ne bi sukobljavale.
- Snimite snimke zaslona u slučaju neuspjeha: Pričvrstite ih putem ITestListener za brže otklanjanje grešaka u nestabilnim paralelnim izvršavanjima.
- Koristite pomoć umjetne inteligencije: Alati poput Testim, mabl i CodiumAI mogu označiti nestabilne testove i predložiti stabilne selektore prije sljedećeg pokretanja.
Zaključak
Gornji primjer pokazuje kako se koristi TestNG za izvršavanje paralelnih testova. TestNG 7.x vam daje jednu XML datoteku za pokretanje više testnih klasa, povezivanje nekoliko podređenih paketa i podešavanje paralelnih niti, toliko velikih Selenium projekti završavaju puno brže.





