TestNG: Kuinka suorittaa useita testisviittejä Selenium
TestNG mahdollistaa testimenetelmien, testiluokkien ja testitapausten suorittamisen rinnakkain projektissasi. Suorittamalla rinnakkaissuorituksen voimme lyhentää "suoritusaikaa", kun testit aloitetaan ja suoritetaan samanaikaisesti eri säikeissä.
Täällä näemme kuinka ajaa useita luokkia (alias eri sviittejä) käyttämällä TestNG.
Vaihe 1) Luominen a TestNG.xml-tiedosto testin suorittamista varten
Voit tehdä sen noudattamalla alla olevia ohjeita.
- Luo uusi projekti eclipsessa
- Luo projekteihin kaksi pakettia (nimeä ne com.suite1 ja com.suite2)
- Luo jokaiseen pakettiin luokka (nimeä ne Flipkart.java ja Snapdeal.java) ja kopioi alla oleva koodi vastaaviin luokkiin
- Luo uusi tiedosto projektiisi ja anna sille nimi testng.xml (Varmista, että olet asentanut eclipsen testauslaajennuksen, ohjeet saatavilla tätä). Testng.xml sisältää kaikki asetukset (luokkanimet, testinimet ja pukunimet.
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>
Lopullinen projektin rakenne näyttää alla olevalta,
Vaihe 2) Rinnakkaissuoritus sisään TestNG
Kun olet luonut xml-tiedoston yllä kuvatulla tavalla, seuraavassa vaiheessa suoritamme rinnakkaistestin. Alla on koodi.
1) lankojen määrä: Tätä käytetään rinnakkaiseen suoritukseen numerokomentosarjan perusteella. Se suoritetaan rinnakkaisessa tai peräkkäisessä järjestyksessä.
2) monisanainen: Sitä käytetään suoritustietojen kirjaamiseen konsoliin. Arvon tulee olla 1-10. Konsoli-ikkunan lokitiedot muuttuvat yksityiskohtaisemmiksi ja selkeämmiksi, kun lisäät testng.xml-määritystiedoston monisanaisen attribuutin arvoa.
3) nimi: Sviitin nimi. Tässä se on "Gmail Suite"
4) Rinnakkais: Jos haluat ajaa komentosarjoja rinnakkain, arvo voi olla testit/luokat/metodit/sarjat. Oletusarvo on ei mitään
Napsauta hiiren kakkospainikkeella testng.xml-tiedostoa ja valitse Suorita testauksena. Kun testi onnistuu, näet kaikki tulokset
Kun suoritat yllä olevan koodin, saat seuraavan tulosteen.
lähtö:
1) testng.xml:ssä annettu sarjan nimi
2) testin nimi testng.xml:ssä
3) testng.xml:ssä annettu luokan nimi
4) menetelmän nimet, joihin on merkitty @Test .java-tiedostossa
Samoin se suorittaa testipaketin myös pikasopimukselle.
Yhteenveto
Tässä olemme nähneet yllä olevassa esimerkissä, kuinka käyttää Testng suorittaa rinnakkaistestin. TestNG antaa mahdollisuuden suorittaa useita testejä rinnakkain yhdessä konfiguraatiotiedostossa (XML).