TestNG @Prioridad de prueba en Selenium
TestNG es un Pruebas framework, que cubre diferentes tipos de diseños de prueba, como prueba unitaria, prueba funcional, prueba de extremo a extremo, prueba de interfaz de usuario y prueba de integración.
Puede ejecutar uno o varios casos de prueba en su Prueba código.
Si la prioridad de la prueba no está definida mientras se ejecutan varios casos de prueba, TestNG asigna a todos los @Test una prioridad como cero (0).
Ahora, mientras corres; Las prioridades más bajas se programarán primero.
Demo de TestNG código sin prioridad
Tomemos un escenario en el que será necesaria la secuenciación para pasar todos los casos de prueba:
Escenario: Genere un código en el que deberá realizar una búsqueda en Google con una palabra clave específica, por ejemplo "Facebook". Ahora, verifique que el título del navegador haya cambiado a "Facebook - Búsqueda de Google".
Nota: Cada paso que codifique debe realizarse en métodos separados.
Método 1: Abrir navegador decir Firefox (navegador abierto())
Método 2: Inicie Google.com (inicie Google())
Método 3: Realizar una búsqueda usando “Facebook” (performSearchAndClick1stLink())
Método 4: Verificar el título de la página de búsqueda de Google (FaceBookPageTitleVerification())
Código para nuestro escenario:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Brower say Firefox @Test public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
Explicación del código
Como se mencionó anteriormente, hemos creado 4 casos de prueba para realizar cada acción en métodos independientes.
- El primer metodo (navegador abierto) estados para inicializar Firefox navegador.
- El segundo método (lanzamiento de Google) indica que el inicio de Google.com se realiza en el navegador inicializado.
- El tercer método (realiceSeachAndClick1stLink)Estados que realizan una búsqueda en el cuadro de búsqueda (con xpath (“.//*[@title=’Buscar’]”) con un término de búsqueda como Facebook
- El cuarto y último método. (Verificación del título de la página de Facebook) indica que haga clic en el ícono de búsqueda de Google y verifique que el título del navegador haya sido cambiado a Facebook – Búsqueda de Google.
Ahora ejecute este código usando testNG como se muestra en el video, encontrará todos los Caso de prueba están fallando. El motivo del error: como existe una dependencia del caso de prueba anterior para aprobar, solo se aprobará el caso de prueba en ejecución actual.
En este caso,
- El primer método que se ejecuta es navegador abierto(). Se aprobó porque no tiene ninguna dependencia.
- El segundo método ejecutado es FaceBookPageTitleVerificación(); está fallando porque estamos intentando hacer clic en el botón de búsqueda y verificando el título del navegador.
- Puede ver que si la actividad de búsqueda no se procesa, entonces cómo se puede pasar cualquier otro paso. Por lo tanto, esta es la razón por la que mis casos de prueba fallan.
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
Demo de TestNG código sin prioridad en orden alfabético
Si no mencionamos ninguna prioridad, testng ejecutará los métodos @Test según el orden alfabético de sus nombres de método, independientemente de su lugar de implementación en el código.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test public void c_method(){ System.out.println("I'm in method C"); } @Test public void b_method(){ System.out.println("I'm in method B"); } @Test public void a_method(){ System.out.println("I'm in method A"); } @Test public void e_method(){ System.out.println("I'm in method E"); } @Test public void d_method(){ System.out.println("I'm in method D"); } }
Salida
I'm in method A I'm in method B I'm in method C I'm in method D I'm in method E
Aunque definimos los métodos de manera aleatoria (c, b, a, e, d), testng ejecutó los métodos según sus nombres de método teniendo en cuenta el orden alfabético y lo mismo se reflejó también en la salida.
Cómo establecer prioridad en TestNG
Como ha visto en el ejemplo anterior, se requiere secuenciación para pasar este escenario, por lo que modificaremos el fragmento de código anterior con Parámetro de prioridad de modo que cada prueba debe ejecutarse en contra de la prioridad que se les ha asignado.
Ahora, como puede ver, hemos asignado la Prioridad a cada caso de prueba, lo que significa que el caso de prueba con el valor de prioridad más bajo se ejecutará primero.
Prioridad en testNG en acción
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Browser say Firefox @Test (priority=1) public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test (priority=2) public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test (priority=3) public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test (priority=4) public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
Explicación del código
Después de asignar prioridad a cada caso de prueba, ejecute el código anterior usando testNG como se muestra en el Video-2 mencionado a continuación.
Aquí puede ver que los casos de prueba tienen prioridad. Los casos de prueba que tienen menor prioridad se ejecutan primero, es decir, ahora hay una ejecución secuencial según la prioridad en los casos de prueba. Por lo tanto, todos los casos de prueba están pasando ahora.
Tenga en cuenta la consola de eclipse:
Salida :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
El número 0 tiene la prioridad más alta (se ejecutará primero) y la prioridad continúa según el número dado, es decir, 0 tiene la prioridad más alta que 1. 1 tiene la prioridad más alta que 2 y así sucesivamente.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=1) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
Salida
I'm in method E I'm in method A I'm in method D I'm in method C I'm in method B
Aquí hemos proporcionado las prioridades como 0,1,3,6,9. Entonces, primero se ejecuta el método que tiene prioridad 0 y luego el método que tiene prioridad 1 y así sucesivamente. Aquí el nombre del método de orden alfabético no se considerará ya que proporcionamos las prioridades
Métodos con la misma prioridad
Es posible que exista la posibilidad de que los métodos tengan la misma prioridad. En esos casos, testng considera el orden alfabético de los nombres de los métodos cuya prioridad es la misma.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
Salida
I'm in method E I'm in method D I'm in method A I'm in method C I'm in method B
Aquí, 'e' y 'd' se ejecutan según sus valores de prioridad. Pero los métodos 'a' y 'c' contienen el mismo valor de prioridad (6). Por lo tanto, aquí testng considera el orden alfabético de 'a' y 'c' y los ejecuta en consecuencia.
Combinando métodos priorizados (que tienen la misma prioridad) y no priorizados
En este caso, cubriremos dos casos en una clase de prueba.
- Métodos que tienen el mismo valor de prioridad.
- Más de un método no priorizado.
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test() public void c_method(){ System.out.println("I'm in method C"); } @Test() public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=6) public void d_method(){ System.out.println("I'm in method D"); } }
Salida:
I'm in method B I'm in method C I'm in method E I'm in method A I'm in method D
PASSED: b_method PASSED: c_method PASSED: e_method PASSED: a_method PASSED: d_method
Explicación:
Primera preferencia: Métodos no priorizados: 'c' y 'b': según el orden alfabético, primero se ejecutó 'b' y luego 'c'.
Segunda preferencia: Métodos priorizados: 'a', 'e' y 'd': 'e' se ejecutó primero porque tenía la prioridad más alta (0). Como la prioridad de los métodos 'a' y 'd' era la misma, testng consideró el orden alfabético de los nombres de sus métodos. Por lo tanto, entre ellos, 'a' se ejecutó primero y luego 'd'.
Distingue entre mayúsculas y minúsculas en TestNG
Solo para su información, existe una sintaxis estándar para definir la prioridad en testNG, es decir @Prueba (prioridad=4), supongamos que lo está definiendo en alguna otra sintaxis, digamos @Prueba (PRIORIDAD=1) entonces su IDE lo mostrará como un error de compilación. Consulte la imagen a continuación:
Conclusión
Como ha visto, si existe el requisito de ejecutar un conjunto de casos de prueba en una secuencia específica, entonces se puede hacer fácilmente usando Prioridad utilizando testNG como herramienta de ejecución.
Este tutorial es posible gracias a las contribuciones de Ramandeep Singh y Rama. Krishna Gade