¿Qué es TestNG?
TestNG es un marco de pruebas de automatización en el que NG significa "Next Generation". TestNG está inspirado en JUnit que usa las anotaciones (@). TestNG supera las desventajas de JUnit y está diseñado para facilitar las pruebas de un extremo a otro.
Con TestNG, puede generar un informe adecuado y puede saber fácilmente cuántos casos de prueba se pasan, fallan y se omiten. Puede ejecutar los casos de prueba fallidos por separado.
Por ejemplo:
- Suponga que tiene cinco casos de prueba, se escribe un método para cada caso de prueba (suponga que el programa se escribe usando el método principal sin usar testNG). Cuando ejecuta este programa primero, tres métodos se ejecutan correctamente y el cuarto método falla. Luego corrija los errores presentes en el cuarto método, ahora solo desea ejecutar el cuarto método porque los primeros tres métodos se ejecutan de todos modos con éxito. Esto no es posible sin utilizar TestNG.
- TestNG en Selenium proporciona una opción, es decir, el archivo testng-failed.xml en la carpeta de salida de prueba. Si desea ejecutar solo casos de prueba fallidos, significa que debe ejecutar este archivo XML. Ejecutará solo casos de prueba fallidos.
Además del concepto anterior, aprenderá más sobre TestNG, como cuáles son las Ventajas de TestNG, cómo crear métodos de prueba usando anotaciones @test, cómo convertir estas clases en un archivo de conjunto de pruebas y ejecutarlas a través del eclipse, así como desde la línea de comandos. .
En este tutorial de TestNG, aprenderá
- ¿Por qué utilizar TestNG con selenio?
- Ventajas de TestNG sobre JUnit
- Crear caso de prueba con anotaciones de TestNG
- Cómo crear un nuevo archivo de prueba TestNG
- Codificación de nuestro primer ejemplo de caso de prueba TestNG
- Ejecutando la prueba
- Verificación de informes creados por TestNG
- Anotaciones utilizadas en TestNG
- Múltiples casos de prueba
- Parámetros
- Múltiples parámetros
- Resumen de anotaciones de TestNG
¿Por qué utilizar TestNG con selenio?
Las pruebas de selenio predeterminadas no generan un formato adecuado para los resultados de la prueba. Usando TestNG en Selenium, podemos generar resultados de prueba.
La mayoría de los usuarios de Selenium usan esto más que Junit debido a sus ventajas. Hay tantas características de TestNG, pero solo nos centraremos en las más importantes que podemos usar en Selenium. Las siguientes son las características clave de Selenium TestNG:
- Genere el informe en un formato adecuado que incluya una serie de ejecuciones de casos de prueba, la cantidad de casos de prueba aprobados, la cantidad de casos de prueba fallidos y la cantidad de casos de prueba omitidos.
- Se pueden agrupar varios casos de prueba más fácilmente convirtiéndolos en un archivo testng.xml. En el que puede establecer prioridades sobre qué caso de prueba debe ejecutarse primero.
- El mismo caso de prueba se puede ejecutar varias veces sin bucles simplemente usando la palabra clave llamada 'recuento de invocaciones'.
- Con testng, puede ejecutar varios casos de prueba en varios navegadores, es decir, pruebas en varios navegadores.
- El marco TestNG se puede integrar fácilmente con herramientas como TestNG Maven, Jenkins, etc.
- Las anotaciones utilizadas en las pruebas son muy fáciles de entender, por ejemplo: @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest
- WebDriver no tiene un mecanismo nativo para generar informes. TestNG puede generar el informe en un formato legible como el que se muestra a continuación.
- TestNG simplifica la forma en que se codifican las pruebas. Ya no hay necesidad de un método principal estático en nuestras pruebas. La secuencia de acciones está regulada por anotaciones fáciles de entender que no requieren que los métodos sean estáticos.
- Las excepciones no detectadas son manejadas automáticamente por TestNG sin terminar la prueba prematuramente. Estas excepciones se informan como pasos fallidos en el informe.
Ventajas de TestNG sobre JUnit
Hay tres ventajas principales de TestNG sobre JUnit:
- Las anotaciones son más fáciles de entender
- Los casos de prueba se pueden agrupar más fácilmente
- Es posible realizar pruebas en paralelo
Las anotaciones en TestNG son líneas de código que pueden controlar cómo se ejecutará el método debajo de ellas . Siempre van precedidos del símbolo @. Un ejemplo de TestNG muy temprano y rápido es el que se muestra a continuación.
Las anotaciones se discutirán más adelante en la sección denominada "Anotaciones utilizadas en TestNG", por lo que está perfectamente bien si aún no comprende el ejemplo de TestNG anterior. Es importante tener en cuenta por ahora que las anotaciones en TestNG son más fáciles de codificar y comprender que en JUnit.
La capacidad de ejecutar pruebas en paralelo está disponible en TestNG pero no en JUnit, por lo que el marco TestNG es más preferido de los probadores que usan Selenium Grid.
Crear caso de prueba con anotaciones de TestNG
Ahora, aprenderemos cómo crear nuestro primer caso de prueba usando Anotaciones TestNG en Selenium:
Antes de crear un caso de prueba, primero debemos configurar un nuevo Proyecto TestNG en Eclipse y nombrarlo como "FirstTestNGProject".
Configurar un nuevo proyecto TestNG
Paso 1: haga clic en Archivo> Nuevo> Proyecto Java
Paso 2: Escriba "FirstTestNGProject" como nombre del proyecto y luego haga clic en Siguiente.
Paso 3: Ahora comenzaremos a importar las bibliotecas TestNG a nuestro proyecto. Haga clic en la pestaña "Bibliotecas" y luego en "Agregar biblioteca
... "Paso 4: En el cuadro de diálogo Agregar biblioteca, elija "TestNG" y haga clic en Siguiente.
Paso 5: haga clic en Finalizar.
Debería notar que TestNG está incluido en la lista de Bibliotecas.
Paso 6: Ahora agregaremos los archivos JAR que contienen la API de Selenium. Estos archivos se encuentran en el controlador del cliente Java que descargamos de http://docs.seleniumhq.org/download/ cuando estábamos instalando Selenium y Eclipse en los capítulos anteriores.
Luego, navegue hasta donde ha colocado los archivos JAR de Selenium.
Después de agregar los archivos JAR externos, su pantalla debería verse así.
Paso 7: Haga clic en Finalizar y verifique que nuestro FirstTestNGProject esté visible en la ventana del Explorador de paquetes de Eclipse.
Cómo crear un nuevo archivo de prueba TestNG
Ahora que hemos terminado de configurar nuestro proyecto en este tutorial de TestNG, creemos un nuevo archivo TestNG.
Paso 1: haga clic con el botón derecho en la carpeta del paquete "src" y luego elija Nuevo> Otro
...Paso 2: Haga clic en la carpeta TestNG y seleccione la opción "Clase TestNG". Haga clic en Siguiente.
Paso 3: Escriba los valores indicados a continuación en los cuadros de entrada correspondientes y haga clic en Finalizar. Observe que hemos nombrado nuestro archivo Java como "FirstTestNGFile".
Eclipse debería crear automáticamente la plantilla para nuestro archivo TestNG que se muestra a continuación.
Codificación de nuestro primer ejemplo de caso de prueba TestNG
Creemos ahora nuestro primer caso de prueba que verificará si la página de inicio de Mercury Tours es correcta. Escriba su código como se muestra en el siguiente ejemplo de TestNG:
paquete firsttestngpackage;importar org.openqa.selenium. *;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;importar org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";controlador WebDriver público;@Pruebapublic void verifyHomepageTitle () {System.out.println ("iniciando el navegador Firefox");System.setProperty ("webdriver.gecko.driver", ruta del controlador);controlador = nuevo FirefoxDriver ();driver.get (baseUrl);StringpectedTitle = "Bienvenido: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (título actual, título esperado);driver.close ();}}
Note lo siguiente.
- TestNG no requiere que tenga un método main ().
- Los métodos no necesitan ser estáticos.
- Usamos la anotación @Test. @Test se usa para indicar que el método que se encuentra debajo es un caso de prueba . En este caso, hemos configurado el método verifyHomepageTitle () para que sea nuestro caso de prueba, por lo que colocamos una anotación '@Test' encima.
- Como usamos anotaciones en TestNG, necesitábamos importar el paquete org.testng.annotations. *.
- Usamos la clase Assert. La clase Assert se utiliza para realizar operaciones de verificación en TestNG . Para usarlo, necesitamos importar el paquete org.testng.Assert.
Puede tener varios casos de prueba (por lo tanto, varias anotaciones @Test) en un solo archivo TestNG. Esto se abordará con más detalle más adelante en la sección "Anotaciones utilizadas en TestNG".
Ejecutando la prueba
Para ejecutar la prueba, simplemente ejecute el archivo en Eclipse como lo hace normalmente. Eclipse proporcionará dos salidas: una en la ventana de la Consola y la otra en la ventana Resultados de TestNG.
Verificación de informes creados por TestNG
La ventana de la Consola en Eclipse brinda un informe basado en texto de los resultados de nuestro caso de prueba, mientras que la ventana Resultados de TestNG nos brinda uno gráfico.
Generación de informes HTML
TestNG tiene la capacidad de generar informes en formato HTML.
Paso 1: Después de ejecutar nuestro FirstTestNGFile que creamos en la sección anterior, haga clic con el botón derecho en el nombre del proyecto (FirstTestNGProject) en la ventana del Explorador de proyectos y luego haga clic en la opción "Actualizar".
Paso 2: observe que se creó una carpeta de "salida de prueba". Expanda y busque un archivo index.html. Este archivo HTML es un informe de los resultados de la ejecución de prueba más reciente.
Paso 3: haga doble clic en ese archivo index.html para abrirlo dentro del navegador web integrado de Eclipse. Puede actualizar esta página en cualquier momento después de volver a ejecutar su prueba simplemente presionando F5 como en los navegadores web comunes.
Anotaciones utilizadas en TestNG
En la sección anterior, se le presentó la anotación @Test. Ahora, estudiaremos anotaciones más avanzadas y sus usos.
Múltiples casos de prueba
Podemos usar múltiples anotaciones @Test en un solo archivo TestNG. De forma predeterminada, los métodos anotados por @Test se ejecutan alfabéticamente. Vea el código a continuación. Aunque los métodos c_test, a_test y b_test no están ordenados alfabéticamente en el código, se ejecutarán como tales.
Ejecute este código y en la página index.html generada, haga clic en "Vista cronológica".
Parámetros
Si desea que los métodos se ejecuten en un orden diferente, utilice el parámetro "prioridad". Los parámetros son palabras clave que modifican la función de la anotación .
- Los parámetros requieren que les asigne un valor. Esto se hace colocando un junto a ellos, y luego seguido del valor.
- Los parámetros están encerrados en un par de paréntesis que se colocan justo después de la anotación, como el fragmento de código que se muestra a continuación.
TestNG ejecutará la anotación @Test con el valor de prioridad más bajo hasta el más grande. No es necesario que sus valores de prioridad sean consecutivos.
El informe HTML de TestNG confirmará que los métodos se ejecutaron en función del valor ascendente de prioridad.
Múltiples parámetros
Aparte de "prioridad", @Test tiene otro parámetro llamado "alwaysRun" que solo se puede establecer en "true" o "false". Para utilizar dos o más parámetros en una sola anotación, sepárelos con una coma como la que se muestra a continuación.
@Test (prioridad = 0, alwaysRun = true)
@BeforeTest y @AfterTest
@AntesTest |
Los métodos bajo esta anotación se ejecutarán antes del primer caso de prueba en el archivo TestNG . |
@Después de la prueba |
Los métodos bajo esta anotación se ejecutarán después de que se ejecuten todos los casos de prueba en el archivo TestNG . |
Considere el siguiente código.
paquete firsttestngpackage;importar org.openqa.selenium. *;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;importar org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";controlador WebDriver público;@AntesTestpublic void launchBrowser () {System.out.println ("iniciando el navegador Firefox");System.setProperty ("webdriver.gecko.driver", ruta del controlador);controlador = nuevo FirefoxDriver ();driver.get (baseUrl);}@Pruebapublic void verifyHomepageTitle () {StringpectedTitle = "Bienvenido: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (título actual, título esperado);}@Después de la pruebapublic void terminateBrowser () {driver.close ();}}
Aplicando la lógica presentada por la tabla y el código anterior, podemos predecir que la secuencia por la cual se ejecutarán los métodos es:
- 1 st - launchBrowser ()
- 2 nd - verifyHomepageTitle ()
- 3 er - terminateBrowser ()
La ubicación de los bloques de anotaciones se puede intercambiar sin afectar el orden cronológico por el que se ejecutarán . Comprendamos con un ejemplo de TestNG e intentemos reorganizar los bloques de anotaciones de manera que su código se vea similar al de abajo.
paquete firsttestngpackage;importar org.openqa.selenium. *;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;importar org.testng.annotations. *;public class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";controlador WebDriver público;@AfterTest // Revueltopublic void terminateBrowser () {driver.close ();}@BeforeTest // Revueltopublic void launchBrowser () {System.out.println ("iniciando el navegador Firefox");System.setProperty ("webdriver.gecko.driver", ruta del controlador);controlador = nuevo FirefoxDriver ();driver.get (baseUrl);}@Test // Revueltopublic void verifyHomepageTitle () {StringpectedTitle = "Bienvenido: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (título actual, título esperado);}}
Ejecute el código anterior y observe que
@BeforeMethod y @AfterMethod
@BeforeMethod |
Los métodos bajo esta anotación se ejecutarán antes de cada método en cada caso de prueba . |
@AfterMethod |
Los métodos bajo esta anotación se ejecutarán después de cada método en cada caso de prueba. |
En Mercury Tours, supongamos que nos gusta verificar los títulos de las páginas de destino de los dos enlaces siguientes.
El flujo de nuestra prueba sería:
- Vaya a la página de inicio y verifique su título.
- Haga clic en REGISTRARSE y verifique el título de su página de destino.
- Regrese a la página de inicio y verifique si todavía tiene el título correcto.
- Haga clic en SOPORTE y verifique el título de su página de destino.
- Regrese a la página de inicio y verifique si todavía tiene el título correcto.
El siguiente código ilustra cómo se utilizan @BeforeMethod y @AfterMethod para ejecutar de manera eficiente el escenario mencionado anteriormente.
paquete firsttestngpackage;importar org.openqa.selenium. *;importar org.openqa.selenium.firefox.FirefoxDriver;import org.testng.Assert;importar org.testng.annotations. *;@Pruebapublic class firsttestngfile {public String baseUrl = "http://demo.guru99.com/test/newtours/";String driverPath = "C: \\ geckodriver.exe";controlador WebDriver público;Cadena pública esperada = nula;public String actual = nulo;@AntesTestpublic void launchBrowser () {System.out.println ("iniciando el navegador Firefox");System.setProperty ("webdriver.gecko.driver", ruta del controlador);controlador = nuevo FirefoxDriver ();driver.get (baseUrl);}@BeforeMethodpublic void verifyHomepageTitle () {StringpectedTitle = "Bienvenido: Mercury Tours";String actualTitle = driver.getTitle ();Assert.assertEquals (título actual, título esperado);}@Test (prioridad = 0)registro público vacío () {driver.findElement (By.linkText ("REGISTRAR")). click ();esperado = "Registro: Mercury Tours";actual = driver.getTitle ();Assert.assertEquals (real, esperado);}@Test (prioridad = 1)soporte de vacío público () {driver.findElement (By.linkText ("SOPORTE")). click ();esperado = "En construcción: Mercury Tours";actual = driver.getTitle ();Assert.assertEquals (real, esperado);}@AfterMethodpublic void goBackToHomepage () {driver.findElement (By.linkText ("Inicio")). click ();}@Después de la pruebapublic void terminateBrowser () {driver.close ();}}
Después de ejecutar esta prueba, su TestNG debería informar la siguiente secuencia.
En pocas palabras, @BeforeMethod debe contener métodos que debe ejecutar antes de cada caso de prueba, mientras que @AfterMethod debe contener métodos que debe ejecutar después de cada caso de prueba.
Resumen de anotaciones de TestNG
@BeforeSuite : el método anotado se ejecutará antes de que se hayan ejecutado todas las pruebas de esta suite.
@AfterSuite : el método anotado se ejecutará después de que se hayan ejecutado todas las pruebas de esta suite.
@BeforeTest : el método anotado se ejecutará antes de que se ejecute cualquier método de prueba que pertenezca a las clases dentro de la etiqueta.
@AfterTest : El método anotado se ejecutará después de que se hayan ejecutado todos los métodos de prueba que pertenecen a las clases dentro de la etiqueta.
@BeforeGroups : la lista de grupos que este método de configuración ejecutará antes. Se garantiza que este método se ejecutará poco antes de que se invoque el primer método de prueba que pertenezca a cualquiera de estos grupos.
@AfterGroups : la lista de grupos después de los cuales se ejecutará este método de configuración. Se garantiza que este método se ejecutará poco después de que se invoque el último método de prueba que pertenezca a cualquiera de estos grupos.
@BeforeClass : el método anotado se ejecutará antes de que se invoque el primer método de prueba en la clase actual.
@AfterClass : El método anotado se ejecutará después de que se hayan ejecutado todos los métodos de prueba en la clase actual.
@BeforeMethod : el método anotado se ejecutará antes de cada método de prueba.
@AfterMethod : el método anotado se ejecutará después de cada método de prueba.
@Test : el método anotado es parte de un caso de prueba
Conclusión
- TestNG es un marco de pruebas que es capaz de hacer que las pruebas de Selenium sean más fáciles de entender y de generar informes que sean fáciles de entender.
- Las principales ventajas de TestNG sobre JUnit son las siguientes.
- Las anotaciones son más fáciles de usar y comprender.
- Los casos de prueba se pueden agrupar más fácilmente.
- TestNG nos permite crear pruebas paralelas.
- La ventana de la consola en Eclipse genera un resultado basado en texto, mientras que la ventana de TestNG es más útil porque nos da una salida gráfica del resultado de la prueba más otros detalles significativos como:
- Tiempos de ejecución de cada método.
- El orden cronológico por el cual se ejecutaron los métodos.
- TestNG es capaz de generar informes basados en HTML.
- Las anotaciones pueden utilizar parámetros como los métodos habituales de Java TestNG.
- TestNG Dataprovider es una forma de pasar parámetros a la función de prueba que pasa diferentes valores en casos de prueba en una sola ejecución.