TestNG @Test Prioridad 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 se define 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.

Demostración del código TestNG 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 browser.
  • 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 la búsqueda box (con xpath (“.//*[@title=’Buscar’]”) con un término de búsqueda como Facebook y
  • 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 y 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

Demostración del código TestNG sin prioridad en orden alfabético

Si no mencionamos ninguna prioridad, testng ejecutará los métodos @Test según el orden alfabético de los nombres de sus métodos, 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 considerando el orden alfabético y lo mismo se reflejó en el resultado también.

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 que se menciona 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

Puede existir 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 en función de sus valores de prioridad. Pero los métodos 'a' y 'c' contienen el mismo valor de prioridad (6). Entonces, 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.

  1. Métodos que tienen el mismo valor de prioridad.
  2. 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 máxima prioridad (0). Como la prioridad de los métodos 'a' y 'd' era la misma, la prueba consideró el orden alfabético de los nombres de sus métodos. Entonces, entre ellos, primero se ejecutó 'a' 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:

Distingue entre mayúsculas y minúsculas en TestNG

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 usando testNG como herramienta de ejecución.

Este tutorial es posible gracias a las contribuciones de Ramandeep Singh y Rama Krishna Gadde.