TestNG: Slik kjører du flere testsuiter i Selenium
TestNG lar deg kjøre testmetoder, testklasser og testcases parallelt inne i prosjektet ditt. Ved å utføre parallell kjøring kan vi redusere 'utførelsestiden' ettersom tester startes og utføres samtidig i forskjellige tråder.
Her vil vi se hvordan du kjører flere klasser (aka forskjellige suiter) ved hjelp av TestNG.
Trinn 1) Opprette en TestNG.xml-fil for utføring av test
Følg trinnene nedenfor for å gjøre det.
- Lag et nytt prosjekt i Eclipse
- Opprett to pakker i prosjektene (navn dem som com.suite1 og com.suite2)
- Opprett en klasse i hver pakke (navn dem som Flipkart.java og Snapdeal.java) og kopier koden nedenfor i respektive klasser
- Opprett en ny fil i prosjektet ditt og navngi den som testng.xml (Sørg for at du har installert testplugin for eclipse, instruksjoner tilgjengelig her.). Testng.xml inneholder all konfigurasjon (klassenavn, testnavn og suitnavn.
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>
Endelig prosjektstruktur ser ut som nedenfor,
Trinn 2) Parallell utførelse i TestNG
Etter å ha opprettet xml-fil som vist ovenfor, i neste trinn, vil vi utføre parallelltesten. Nedenfor er koden.
1) trådtelling: Dette brukes for parallell kjøring, basert på tallskriptet. Det vil utføres i parallell eller sekvensiell rekkefølge.
2) ordrik: Den brukes til å logge utførelsesdetaljene i konsollen. Verdien skal være 1-10. Loggdetaljene i konsollvinduet vil bli mer detaljerte og klarere etter hvert som du øker verdien av det detaljerte attributtet i konfigurasjonsfilen testng.xml.
3) navn: Navn på suiten. Her er det "Gmail Suite"
4) Parallell: For å kjøre skript parallelt, kan verdien være tester/klasser/metoder/suiter. Standardverdien er none
Høyreklikk på testng.xml og velg kjør som testing, når du er vellykket, vil du se alle resultatene
Når du utfører koden ovenfor, vil du få følgende utgang.
Utgang:
1) navnet på suiten gitt i testng.xml
2) navnet på testen gitt i testng.xml
3) navnet på klassen gitt i testng.xml
4) metodenavn merket med @Test i .java-fil
På samme måte vil den kjøre testsuite for snap-avtale også.
konklusjonen
Her har vi sett i eksempelet ovenfor, hvordan du bruker Testng å utføre parallell test. TestNG gir en mulighet til å utføre flere tester parallelt i en enkelt konfigurasjonsfil (XML).