TestNG: Cum să rulați mai multe suite de testare în Selenium
TestNG vă permite să rulați metode de testare, clase de testare și cazuri de testare în paralel în cadrul proiectului dvs. Efectuând execuție paralelă, putem reduce „timpul de execuție”, deoarece testele sunt pornite și executate simultan în fire diferite.
Aici vom vedea cum să rulăm mai multe clase (aka suite diferite) folosind TestNG.
Pasul 1) Crearea unui TestNGFișier .xml pentru executarea testului
Pentru a face acest lucru, urmați pașii de mai jos.
- Creați un nou proiect în eclipse
- Creați două pachete în proiecte (numiți-le ca com.suite1 și com.suite2)
- Creați o clasă în fiecare pachet (numiți-le ca Flipkart.java și Snapdeal.java) și copiați codul de mai jos în clasele respective
- Creați un fișier nou în proiect și denumiți-l ca testng.xml (asigurați-vă că ați instalat pluginul de testare pentru eclipse, instrucțiuni disponibile aici). Testng.xml conține toată configurația (nume de clasă, nume de test și nume de costume.
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>
Structura finală a proiectului arată ca mai jos,
Pasul 2) Execuție paralelă în TestNG
După crearea fișierului xml așa cum se arată mai sus, în pasul următor, vom executa testul paralel. Mai jos este codul.
1) numărul de fire: Acesta este utilizat pentru execuția paralelă, pe baza scriptului numeric. Se va executa în ordine paralelă sau secvenţială.
2) verbos: Este folosit pentru a înregistra detaliile de execuție în consolă. Valoarea ar trebui să fie 1-10. Detaliile jurnalului din fereastra consolei vor deveni mai detaliate și mai clare pe măsură ce creșteți valoarea atributului verbose din fișierul de configurare testng.xml.
3) nume: Numele apartamentului. Aici este „Gmail Suite”
4) Paralel: Pentru a rula scripturi în paralel, valoarea poate fi teste/clase/metode/suite. Valoarea implicită este nici unul
Faceți clic dreapta pe testng.xml și selectați Executare ca testare, odată cu succes, veți vedea toate rezultatele
Când executați codul de mai sus, veți obține următoarea ieșire.
ieșire:
1) numele suitei dat în testng.xml
2) numele testului dat în testng.xml
3) numele clasei dat în testng.xml
4) nume de metode adnotate cu @Test în fișierul .java
De asemenea, va executa suita de testare și pentru acordul rapid.
Concluzie
Aici am văzut în exemplul de mai sus cum se utilizează Testng pentru a executa testul paralel. TestNG oferă o opțiune de a executa mai multe teste în paralel într-un singur fișier de configurare (XML).