Kuinka ajaa useita testitapauksia TestNG Sviitti
โก รlykรคs yhteenveto
Suorita useita testitapauksia TestNG Sviitti Selenium voit kรคynnistรครค useita luokkia, paketteja tai alikokonaisuuksia yhdestรค testng.xml-tiedostosta. Tรคmรค ohje kattaa rinnakkaiset sรคikeet, pakettihierarkian, raportoinnin ja tekoรคlyn tuen moderneille TestNG 7.x-projektit.

TestNG antaa sinun suorittaa testimetodeja, luokkia ja kokonaisia โโtestipaketteja rinnakkain yhden projektin sisรคllรค. Rinnakkaissuoritus lyhentรครค kokonaisajoaikaa, koska sรคikeet aloittavat testit samanaikaisesti yksi toisensa jรคlkeen. Tรคssรค oppaassa selitetรครคn, kuinka useita luokkia (eri paketteja) suoritetaan kรคyttรคmรคllรค TestNG 7.x ja Selenium WebDriver.
Vaihe 1) Luominen a TestNG.xml-tiedosto testien suorittamiseen
Luo kokoonpano noudattamalla alla olevia ohjeita.
- Luo uusi projekti kohdassa Eclipse.
- Luo projektissa kaksi pakettia (nimeรค ne com.suite1 ja com.suite2).
- Luo luokka jokaiseen pakettiin (nimeรค ne Flipkart.java ja Snapdeal.java) ja kopioi alla oleva koodi vastaaviin luokkiin.
- Luo projektiisi uusi tiedosto ja nimeรค se testng.xml. Varmista, ettรค TestNG laajennus on asennettu (ohjeet saatavilla tรครคltรค). Testng.xml-tiedosto sisรคltรครค kaikki mรครคritykset, kuten luokkien nimet, testien nimet ja pakettien nimet.
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>
Lopullinen projektirakenne nรคyttรครค alla olevan esimerkin kaltaiselta.
Vaihe 2) Rinnakkaissuoritus sisรครคn TestNG
Tallennettuasi yllรค olevan XML-tiedoston, seuraava vaihe on rinnakkaisten testien suorittaminen. Koodi nรคkyy alla.
1) lankojen mรครคrรค: Mรครคrittรครค kuinka monta sรคikettรค TestNG voi kรคynnistyรค rinnakkaissuoritusta varten. Suurempi arvo suorittaa useampia testejรค kerralla, suorittimen rajaan asti.
2) monisanainen: Kirjaa suoritustiedot konsoliin. Sallitut arvot ovat vรคlillรค 1โ10. Suuremmat arvot tuottavat yksityiskohtaisempia ja hajautetumpia lokeja.
3) nimiSviitin nimi. Tรคssรค se on โGmail Sviittiโ.
4) rinnakkainenKertoo TestNG mitรค suoritetaan samanaikaisesti. Kelvollisia arvoja ovat testit, luokat, metodit tai instanssit. Oletusarvo on ei mitรครคn.
Napsauta hiiren kakkospainikkeella testng.xml-tiedostoa ja valitse Suorita nimellรค > TestNG SviittiKun se on valmis, nรคet yhdistetyt tulokset.
Kun suoritat yllรค olevan koodin, saat seuraavan tulosteen.
lรคhtรถ:
1) Tiedostossa testng.xml mรครคritellyn paketin nimi.
2) Tiedostossa testng.xml mรครคritellyn testin nimi.
3) Tiedostossa testng.xml ilmoitetun luokan nimi.
4) Metodinimet, jotka on merkitty @Test-tunnisteella .java-tiedostossa.
Sama tyรถnkulku suoritetaan SnapDeal-testissรค, joten molemmat luokat suoritetaan rinnakkain.
Vaihe 3) Useiden pakettien suorittaminen yhdestรค pรครคtiedostosta testng.xml
Yleinen vaatimus suuremmissa projekteissa on useiden testng.xml-tiedostojen ketjuttaminen yhdeksi triggeriksi. TestNG 7.x tukee pรครคohjelmistoa, joka viittaa lapsiohjelmistoon suite-tiedosto merkintรถjรค, jotta jokainen lapsi voi sรคilyttรครค oman sรคikeiden mรครคrรคn, kuuntelijat ja parametrit. Tallenna jokainen lapsipaketti erikseen ja osoita sitten pรครคtiedosto sen polkuun. Suorita vain pรครคtiedosto osoitteesta Eclipse, Mavenin tai komentorivin kautta.
<!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>
Tรคmรค malli pitรครค regressio-, savu- ja jรคrjenpitopaketit erillรครคn, mutta niitรค voidaan kรคyttรครค uudelleen. Voit myรถs kรคynnistรครค pรครคtiedoston Maven Surefiresta asettamalla <suiteXmlFile>parent-suite.xml</suiteXmlFile> laajennuksen kokoonpanon sisรคllรค, mikรค saa saman rinnakkaisen asettelun toimimaan jatkuvissa integraatioputkissa.
Vaihe 4) Rinnakkaistutkimuksen parhaat kรคytรคnnรถt TestNG toimii
- Pin TestNG 7.x: Kรคyttรครค TestNG 7.10 tai uudempi, jossa on Selenium 4, jotta W3C-yhteensopivat ajurit toimivat yhdenmukaisesti eri sรคikeissรค.
- Vรคltรค jaettua tilaa: Siirrรค web-ajuri kentรคn ThreadLocal-kohteeseen, jotta jokaisella sรคikeellรค on oma istuntonsa.
- Sรคikeiden mรครคrรคn sรครคtรถ: Aloita suorittimen ytimien lukumรครคrรคstรค ja seuraa sitten sรคhkรถpostitse lรคhetettรคvรครค HTML-raporttia ja Gridin latautumista ennen sen nostamista.
- Eristรค testidata: Kรคytรค yksilรถllisiรค kรคyttรคjiรค, ostoskoreja ja PIN-koodeja ketjua kohden, jotta kirjautumiset eivรคt koskaan tรถrmรครค toisiinsa.
- Ota kuvakaappauksia epรคonnistumisen sattuessa: Kiinnitรค ne ITestListener nopeuttaa epรคtasaisten rinnakkaisajojen dekoodausta.
- Kรคytรค tekoรคlyn apua: Tyรถkalut kuten Testim, mabl ja CodiumAI voivat merkitรค epรคtasaisia โโtestejรค ja ehdottaa vakaita valitsimia ennen seuraavaa suoritusta.
Yhteenveto
Yllรค oleva esimerkki nรคyttรครค, miten sitรค kรคytetรครคn TestNG rinnakkaisten testien suorittamiseen. TestNG 7.x tarjoaa yhden XML-tiedoston useiden testiluokkien kรคynnistรคmiseen, useiden alipakettien linkittรคmiseen ja rinnakkaisten sรคikeiden virittรคmiseen, joten suuretkin Selenium projektit valmistuvat paljon nopeammin.




