TestNG: Cómo ejecutar varios conjuntos de pruebas en Selenium
TestNG le permite ejecutar métodos de prueba, clases de prueba y casos de prueba en paralelo dentro de su proyecto. Al realizar una ejecución en paralelo, podemos reducir el "tiempo de ejecución", ya que las pruebas se inician y ejecutan simultáneamente en diferentes subprocesos.
Aquí veremos cómo ejecutar múltiples clases (también conocidas como diferentes suites) usando TestNG.
Paso 1) Crear un TestNGArchivo .xml para ejecutar la prueba.
Para hacerlo, siga los pasos a continuación.
- Crear un nuevo proyecto en eclipse
- Cree dos paquetes en los proyectos (nómbrelos com.suite1 y com.suite2)
- Cree una clase en cada paquete (nómbrelos Flipkart.java y Snapdeal.java) y copie el siguiente código en las clases respectivas
- Cree un nuevo archivo en su proyecto y nómbrelo testng.xml (asegúrese de haber instalado el complemento de prueba para eclipse, las instrucciones están disponibles) aquí). Testng.xml contiene toda la configuración (nombres de clase, nombres de prueba y nombres de suite).
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(); } }
PruebaNg.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>
La estructura final del proyecto se ve a continuación,
Paso 2) Ejecución paralela en TestNG
Después de crear el archivo xml como se muestra arriba, en el siguiente paso ejecutaremos la prueba paralela. A continuación se muestra el código.
1) número de hilos: Esto se utiliza para la ejecución paralela, según el script numérico. Se ejecutará en orden paralelo o secuencial.
2) detallado: Se utiliza para registrar los detalles de ejecución en la consola. El valor debe ser de 1 a 10. Los detalles de registro en la ventana de la consola serán más detallados y claros a medida que aumente el valor del atributo verbose en el archivo de configuración testng.xml.
3) nombre: Nombre de la suite. En este caso es “Gmail Suite”.
4) Paralelo: Para ejecutar scripts en paralelo, el valor puede ser pruebas/clases/métodos/suites. El valor predeterminado es ninguna
Haga clic derecho en testng.xml y seleccione ejecutar como prueba, una vez que tenga éxito, verá todos los resultados.
Cuando ejecute el código anterior, obtendrá el siguiente resultado.
Salida:
1) nombre de la suite proporcionada en testng.xml
2) nombre de la prueba dado en testng.xml
3) nombre de la clase dada en testng.xml
4) nombres de métodos anotados con @Test en el archivo .java
Asimismo, también ejecutará un conjunto de pruebas para Snap Deal.
Conclusión
Aquí hemos visto en el ejemplo anterior, cómo usar Prueba para ejecutar la prueba paralela. TestNG ofrece la opción de ejecutar varias pruebas en paralelo en un único archivo de configuración (XML).