TestNG: Hoe u meerdere testsuites kunt uitvoeren Selenium
TestNG stelt u in staat om testmethoden, testklassen en testcases parallel in uw project uit te voeren. Door parallelle uitvoering uit te voeren, kunnen we de 'uitvoeringstijd' verkorten, aangezien tests gelijktijdig in verschillende threads worden gestart en uitgevoerd.
Hier zullen we zien hoe we meerdere klassen (ook wel verschillende suites) kunnen gebruiken TestNG.
Stap 1) Een TestNG.xml-bestand voor het uitvoeren van de test
Om dat te doen, volgt u de onderstaande stappen.
- Een nieuw project maken in Eclipse
- Maak twee pakketten in de projecten (noem ze com.suite1 en com.suite2)
- Maak een klasse in elk pakket (noem deze als Flipkart.java en Snapdeal.java) en kopieer de onderstaande code in de respectievelijke klassen
- Maak een nieuw bestand in uw project en noem het testng.xml (zorg ervoor dat u de testplug-in voor Eclipse hebt geïnstalleerd, instructies zijn beschikbaar hier). Testng.xml bevat alle configuratie (klassenamen, testnamen en suitnamen).
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>
De uiteindelijke projectstructuur ziet er als volgt uit,
Stap 2) Parallelle uitvoering in TestNG
Nadat we een XML-bestand hebben gemaakt zoals hierboven weergegeven, zullen we in de volgende stap de parallelle test uitvoeren. Hieronder staat de code.
1) draadaantal: Dit wordt gebruikt voor parallelle uitvoering, gebaseerd op het nummerscript. Het wordt in parallelle of opeenvolgende volgorde uitgevoerd.
2) uitgebreid: Dit wordt gebruikt om de uitvoeringsdetails in de console te loggen. De waarde moet 1-10 zijn. De logdetails in het consolevenster worden gedetailleerder en duidelijker naarmate u de waarde van het verbose-attribuut in het configuratiebestand testng.xml verhoogt.
3) naam: Naam van de suite. Hier is het “Gmail Suite”
4) Parallel: Om scripts parallel uit te voeren, kan de waarde tests/classes/methods/suites zijn. Standaardwaarde is geen
Klik met de rechtermuisknop op testng.xml en selecteer uitvoeren als test. Zodra dit is gelukt, ziet u alle resultaten.
Wanneer u de bovenstaande code uitvoert, krijgt u de volgende uitvoer.
Output:
1) naam van de suite gegeven in testng.xml
2) naam van de test gegeven in testng.xml
3) naam van de klasse gegeven in testng.xml
4) methodenamen geannoteerd met @Test in .java-bestand
Het zal ook een testsuite voor SnapDeal uitvoeren.
Conclusie
Hier hebben we in het bovenstaande voorbeeld gezien hoe te gebruiken Testen parallelle test uit te voeren. TestNG geeft de mogelijkheid om meerdere tests parallel uit te voeren in één enkel configuratiebestand (XML).