Kör flera testfall med TestNG Svit in Selenium
TestNG gör att du kan köra testmetoder, testklasser och testfall parallellt i ditt projekt. Genom att utföra parallellkörning kan vi minska 'exekveringstiden' eftersom tester startas och exekveras samtidigt i olika trådar.
Här kommer vi att se hur man kör flera klasser (aka olika sviter) med hjälp av TestNG.
Steg 1) Skapa en TestNG.xml-fil för att köra test
Följ stegen nedan för att göra det.
- Skapa ett nytt projekt i Eclipse
- Skapa två paket i projekten (namnge dem som com.suite1 och com.suite2)
- Skapa en klass i varje paket (namngiv dem som Flipkart.java och Snapdeal.java) och kopiera nedanstående kod i respektive klass
- Skapa en ny fil i ditt projekt och namnge den som testng.xml (Se till att du har installerat testplugin för eclipse, instruktioner finns tillgängliga här.). Testng.xml innehåller all konfiguration (klassnamn, testnamn och färgnamn.
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>
Den slutliga projektstrukturen ser ut som nedan,
Steg 2) Parallellt utförande i TestNG
Efter att ha skapat xml-filen som visas ovan, i nästa steg kommer vi att utföra parallelltestet. Nedan finns koden.
1) trådräkning: Detta används för parallell exekvering, baserat på nummerskriptet. Det kommer att köras i parallell eller sekventiell ordning.
2) talrik: Den används för att logga exekveringsdetaljerna i konsolen. Värdet ska vara 1-10. Loggdetaljerna i konsolfönstret blir mer detaljerade och tydligare när du ökar värdet på det verbose-attributet i testng.xml-konfigurationsfilen.
3) namn: Namnet på sviten. Här är det "Gmail Suite"
4) Parallellt: För att köra skript parallellt kan värdet vara test/klasser/metoder/sviter. Standardvärdet är ingen
Högerklicka på testng.xml och välj kör som testning, när du lyckats ser du alla resultat
När du kör ovanstående kod får du följande utdata.
Produktion:
1) namnet på sviten som anges i testng.xml
2) namnet på testet i testng.xml
3) namnet på klassen som anges i testng.xml
4) metodnamn kommenterade med @Test i .java-fil
På samma sätt kommer den att köra testsvit för snap-affär också.
Slutsats
Här har vi sett i exemplet ovan, hur man använder Testng att utföra parallellt test. TestNG ger en möjlighet att utföra flera tester parallellt i en enda konfigurationsfil (XML).