TestNG Tutorial

โšก Resumen inteligente

TestNG es una prรณxima generaciรณn Java marco de pruebas que se combina con Selenium para automatizaciรณn estructurada, informes completos y ejecuciรณn paralela. Este tutorial cubre las anotaciones principales y la configuraciรณn del proyecto en Eclipse, escribiendo el primer caso de prueba, informes HTML y uso avanzado de parรกmetros.

  • ๐Ÿงฑ Marco central: TestNG Se extiende JUnit ideas con anotaciones, grupopingy ejecuciรณn de pruebas en paralelo para Selenium suites.
  • ๐Ÿท๏ธ Las anotaciones impulsan el flujo: @Test, @BeforeMethod, @AfterMethod, @BeforeTest y @AfterTest: configuraciรณn, prueba y desmontaje de la secuencia.
  • ๐Ÿ—‚๏ธ Eclipse Configuraciรณn: Construye una TestNG proyecto, agregue el TestNG biblioteca y Selenium Luego, genere las clases de prueba desde el asistente.
  • ๐Ÿ“Š Presentaciรณn de informes: TestNG Genera informes de texto, grรกficos y HTML en la carpeta test-output, incluyendo vistas cronolรณgicas.
  • โš™๏ธ parรกmetros: Utilice priority, alwaysRun y โ€‹โ€‹dataProvider para controlar el orden de ejecuciรณn y proporcionar datos a las pruebas.
  • ๐Ÿค– Impulso de IA: Los asistentes de codificaciรณn de IA aceleran TestNG Generaciรณn de clases, actualizaciones de localizadores y andamiaje de dataProvider.

TestNG Tutorial

ยฟQuรฉ es TestNG?

TestNG es un marco de pruebas de automatizaciรณn donde โ€œNGโ€ significa โ€œNext Generationโ€ (prรณxima generaciรณn). TestNG estรก inspirado en JUnit y utiliza Java anotaciones (@) para controlar el flujo de la prueba. Supera JUnitlimitaciones anteriores y estรก diseรฑado para hacer pruebas de extremo a extremo mรกs fรกcil.

Con TestNG Puedes generar un informe detallado y ver de inmediato cuรกntas pruebas se aprobaron, fallaron o se omitieron. Tambiรฉn puedes volver a ejecutar solo los casos que fallaron.

Por ejemplo:

  • Supongamos que tiene cinco casos de prueba, cada uno en su propio mรฉtodo, escritos sin TestNGTres pasan; la cuarta falla. Despuรฉs de corregir la cuarta, conviene volver a ejecutar solo esa, ya que las tres primeras pasaron. Esto es difรญcil de hacer con cรณdigo simple del mรฉtodo main().
  • TestNG proporciona una testng-failed.xml presentar en el test-output carpeta. Al ejecutar ese XML, solo se vuelven a ejecutar los casos que fallaron.

Mรกs allรก de eso, aprenderรกs las ventajas de TestNG, cรณmo escribir mรฉtodos de prueba con anotaciones @Test y cรณmo convertir sus clases en un conjunto de pruebas que se ejecuta desde Eclipse o la lรญnea de comandos.

Por quรฉ usar TestNG con Selenium?

Por defecto, Selenium Las pruebas no producen resultados con un formato adecuado. Con TestNG Una vez conectado, el ejecutor de pruebas genera un informe estructurado que puedes compartir con el equipo.

La mayorรญa de las Selenium los usuarios prefieren TestNG mรกs del JUnit debido a su conjunto de caracterรญsticas mรกs amplio. Las caracterรญsticas clave para Selenium son:

  • Informes que incluyen el nรบmero de casos de prueba ejecutados, aprobados, fallidos y omitidos.
  • Grupo fรกcilping de casos de prueba a travรฉs de un testng.xml archivo, con prioridades de ejecuciรณn.
  • Repita una prueba varias veces sin bucles usando invocationCount.
  • Ejecutar mรบltiples pruebas en mรบltiples navegadores: entre navegadores.prueba del navegador apoyo.
  • Integraciรณn fluida con Maven, Jenkinsy otras herramientas de CI.
  • Readable anotaciones โ€” por ejemplo, @BeforeMethod, @AfterMethod, @BeforeTest, @AfterTest.
  • Selenium WebDriver no tiene funciones de generaciรณn de informes nativas; TestNG Cubre esa laguna con un informe HTML limpio como el que se muestra a continuaciรณn.

TestNG Ejemplo de informe HTML para Selenium pruebas

  • TestNG Simplifica el cรณdigo de prueba. Ya no necesitas un mรฉtodo main estรกtico; las anotaciones deciden quรฉ se ejecuta y cuรกndo.

Usual Java Estructura de clase de prueba con mรฉtodo principal

TestNG Estructura de clases de prueba mediante anotaciones

  • Las excepciones no capturadas se manejan de manera elegante por TestNGSe informan como pasos fallidos sin que se interrumpa la ejecuciรณn completa.

Ventajas de TestNG mรกs del JUnit

TestNG ofrece tres ventajas principales sobre JUnit:

  • Las anotaciones son mรกs fรกciles de entender y usar.
  • Los casos de prueba se pueden agrupar y priorizar con menos esfuerzo.
  • La ejecuciรณn de pruebas en paralelo viene incluida de serie.

ยฟQuรฉ es una anotaciรณn en TestNG?

Anotaciones en TestNG Son lรญneas de cรณdigo que se colocan encima de un mรฉtodo para controlar cรณmo se ejecuta. Siempre comienzan con el sรญmbolo @. A continuaciรณn se muestra un ejemplo sencillo.

Ejemplo TestNG anotaciรณn sobre una Java Mรฉtodo

Las anotaciones se tratan en detalle en la secciรณn โ€œAnotaciones utilizadas en TestNG" Mรกs adelante en este tutorial, por lo que el ejemplo anterior solo sirve para establecer expectativas. TestNG Las anotaciones son mรกs fรกciles de codificar y leer que las JUnit equivalentes, y son esenciales al realizar pruebas en Selenium Cuadrรญcula donde la ejecuciรณn en paralelo es importante.

Cรณmo escribir casos de prueba en TestNG

Escribiendo un TestNG El caso de prueba consta de tres pasos:

  1. Escribe tu lรณgica de negocio y colรณcala TestNG anotaciones encima de cada mรฉtodo.
  2. Agregue metadatos como el nombre de la clase, el nombre del grupo y el nombre del paquete.
  3. Ejecute el TestNG clase desde su IDE o la lรญnea de comandos.

Crear un caso de prueba utilizando TestNG Anotaciones

Ahora crearemos nuestro primer caso de prueba utilizando TestNG anotaciones en Selenium. Antes de escribir la prueba, configure una nueva TestNG proyecto en Eclipse y llรกmalo Nombre TestNGProyectos.

Configurando un nuevo TestNG Proyectos

Paso 1) Haga clic en Archivo > Nuevo > Java Proyectos.

Eclipse menรบ para crear uno nuevo Java Antecedentes

Paso 2) entrar: Nombre TestNGProyectos como nombre del proyecto y haga clic Siguiente.

New Java Asistente de proyecto con nombre FirstTestNGProyectos

Paso 3) Importar el TestNG bibliotecas. Haga clic en el Bibliotecas pestaรฑa y luego Agregar bibliotecaโ€ฆ.

pestaรฑa Bibliotecas con opciรณn Agregar biblioteca en Eclipse

Paso 4) En la secciรณn Agregar biblioteca diรกlogo, elegir TestNG y hacer clic en Siguiente.

Seleccionar TestNG en el cuadro de diรกlogo Agregar biblioteca

Paso 5) Haga clic en Termine.

Finalizaciรณn del asistente para agregar bibliotecas

TestNG Ahora deberรญa aparecer en la lista de Bibliotecas.

TestNG visible en la lista de bibliotecas

Paso 6) Agregue los archivos JAR que contienen el Selenium API. Estos provienen de la Java Controlador de cliente descargado de selenium.dev/descargas.

Agregar cuadro de diรกlogo JAR externos en Eclipse

Navegue a la carpeta donde se encuentra Selenium Los archivos JAR se almacenan.

Seleccionar Selenium Archivos JAR para la ruta de compilaciรณn

Despuรฉs de agregar los archivos JAR externos, la pantalla deberรญa verse asรญ.

Selenium Archivos JAR aรฑadidos a la lista de bibliotecas

Paso 7) Haga clic en Termine. El nuevo Nombre TestNGProyectos aparece en el Explorador de paquetes.

Nombre TestNGProyecto visible en el Explorador de paquetes

Cรณmo crear un nuevo TestNG Archivo de prueba

Con el proyecto listo, crea uno nuevo. TestNG .

Paso 1) Haga clic derecho en src carpeta y elegir Nuevo > Otrosโ€ฆ.

Nuevo menรบ Otro desde la carpeta src en Eclipse

Paso 2) Ampliar la opciรณn TestNG carpeta, seleccione TestNG claseY haga clic en Siguiente.

TestNG Opciรณn de clase en el nuevo asistente

Paso 3) Introduzca los valores que se muestran a continuaciรณn y haga clic. Termine. La funciรณn de Java el archivo se llama Nombre TestNGArchivo.

TestNG Mago de clase con PrimeroTestNGValores de archivo

Paso 4) Eclipse genera el TestNG Plantilla que se muestra a continuaciรณn.

Generado TestNG plantilla de clase en Eclipse editor

Codificando tu primer TestNG Caso de prueba

Crea el primero caso de prueba que verifica el tรญtulo de la Mercury Pรกgina de inicio de excursiones.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @Test
    public void verifyHomepageTitle() {
        System.out.println("launching firefox browser");
        // Selenium 4 ships Selenium Manager, so the driver path is no longer required.
        driver = new FirefoxDriver();
        driver.get(baseUrl);
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
        driver.quit();
    }
}

Cosas a tener en cuenta:

  • TestNG no necesita un main() mรฉtodo.
  • Los mรฉtodos no tienen por quรฉ ser estรกticos.
  • El @Prueba marcas de anotaciรณn verifyHomepageTitle() como caso de prueba.
  • Las anotaciones se encuentran en el org.testng.annotations.* Pack
  • El Afirmar clase de org.testng.Assert realiza verificaciones.

Puede tener varias anotaciones @Test en una sola TestNG El archivo. Lo cubrimos en el โ€œAnotaciones utilizadas en TestNG" .

Ejecuciรณn de la prueba

Haga clic con el botรณn derecho en el archivo y ejecรบtelo como un TestNG prueba. Eclipse produce dos resultados: un resultado de texto en la ventana de la consola y un resultado grรกfico en la TestNG Ventana de resultados.

TestNG Ventana de resultados con el resultado de la prueba.

Eclipse Ventana de consola con TestNG salida de texto

Comprobaciรณn de informes creados por TestNG

La ventana de la consola proporciona un resumen basado en texto mientras que la TestNG La ventana de resultados muestra una vista grรกfica.

Texto frente a grรกficos TestNG comparaciรณn de resultados

Generando informes HTML

TestNG Tambiรฉn puede generar informes HTML completos.

Paso 1) despues de correr Nombre TestNGArchivo, haga clic con el botรณn derecho en el proyecto y elija Refrescar.

Opciรณn de actualizaciรณn para el TestNG proyecto en Eclipse

Paso 2) A salida de prueba Aparece una carpeta. Expรกndala y localรญcela. index.html โ€” el informe HTML de la ejecuciรณn mรกs reciente.

Carpeta de resultados de prueba con index.html resaltado

Paso 3) Double-hacer clic index.html para abrirlo por dentro EclipseNavegador de [nombre del navegador]. Pulse F5 para actualizar despuรฉs de futuras ejecuciones.

TestNG Informe de รญndice HTML generado en Eclipse

Anotaciones utilizadas en TestNG

Ya has visto la anotaciรณn @Test. El resto de esta secciรณn cubre las anotaciones avanzadas mรกs รบtiles.

Mรบltiples casos de prueba

Un รบnico TestNG El archivo puede contener mรบltiples anotaciones @Test. Por defecto, los mรฉtodos anotados con @Test se ejecutan en orden alfabรฉtico. En el cรณdigo siguiente, los mรฉtodos c_test, a_test, y b_test Se ejecutan alfabรฉticamente independientemente del orden de origen.

Mรบltiples mรฉtodos @Test en uno solo TestNG clase

Ejecuta el cรณdigo y abre index.html. Haga clic en Visiรณn cronolรณgica.

Vista cronolรณgica de mรบltiples TestNG mรฉtodos

Parรกmetros

Para anular el orden predeterminado, utilice el priority parรกmetro. Los parรกmetros son palabras clave que modifican el comportamiento de una anotaciรณn.

  • Asignar un valor con =.
  • Envuelva los parรกmetros entre parรฉntesis inmediatamente despuรฉs de la anotaciรณn, como se muestra a continuaciรณn.

TestNG anotaciรณn con sintaxis de parรกmetros y valores

TestNG Ejecuta las anotaciones @Test desde el valor de prioridad mรกs bajo hasta el mรกs alto. Los nรบmeros de prioridad no tienen por quรฉ ser consecutivos.

Cรณdigo completo con parรกmetros de prioridad @Test

El informe HTML confirma que los mรฉtodos se ejecutaron en orden de prioridad ascendente.

TestNG Informe que muestra los mรฉtodos ejecutados por orden de prioridad ascendente.

Mรบltiples parรกmetros

Ademรกs de priority, @Test acepta el alwaysRun parรกmetro (verdadero o falso). Para usar dos o mรกs parรกmetros en una sola anotaciรณn, sepรกrelos con una coma:

@Test(priority = 0, alwaysRun = true)

Ejemplo de mรบltiples parรกmetros dentro de una anotaciรณn @Test

@Antes de la prueba y @Despuรฉs de la prueba

@AntesTest Los mรฉtodos bajo esta anotaciรณn se ejecutan antes del primer caso de prueba en el TestNG listo para importar.
@Despuรฉs de la prueba Los mรฉtodos bajo esta anotaciรณn se ejecutan despuรฉs de todos los casos de prueba en el TestNG archivo finalizado.

Considere el cรณdigo a continuaciรณn.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @BeforeTest
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        driver = new FirefoxDriver();
        driver.get(baseUrl);
    }

    @Test
    public void verifyHomepageTitle() {
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
    }

    @AfterTest
    public void terminateBrowser() {
        driver.quit();
    }
}

A partir de la tabla y el cรณdigo, podemos predecir que la secuencia serรก:

  • 1ยบ โ€” launchBrowser()
  • 2ยบ โ€” verifyHomepageTitle()
  • 3ยบ โ€” terminateBrowser()

La ubicaciรณn de los bloques de anotaciรณn en el archivo fuente no afecta su orden de ejecuciรณn. Intenta reorganizar los mรฉtodos como se muestra a continuaciรณn.

package firsttestngpackage;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;

    @AfterTest                              // Jumbled
    public void terminateBrowser() {
        driver.quit();
    }

    @BeforeTest                             // Jumbled
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        driver = new FirefoxDriver();
        driver.get(baseUrl);
    }

    @Test                                   // Jumbled
    public void verifyHomepageTitle() {
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
    }
}

Ejecuta el cรณdigo y verifica el resultado.

TestNG Resultado que confirma el orden a pesar de las anotaciones desordenadas.

@BeforeMethod y @AfterMethod

@Antes del mรฉtodo Los mรฉtodos bajo esta anotaciรณn se ejecutan antes de cada mรฉtodo de prueba.
@Despuรฉs del mรฉtodo Los mรฉtodos bajo esta anotaciรณn se ejecutan despuรฉs de cada mรฉtodo de prueba.

In Mercury En el caso de los tours, supongamos que queremos verificar los tรญtulos de dos pรกginas de destino a las que se accede desde la pรกgina de inicio.

Tres enlaces desde Mercury Pรกgina de inicio de excursiones

El flujo de la prueba es el siguiente:

  • Abre la pรกgina de inicio y verifica su tรญtulo.
  • Haga clic en REGISTRAR y verifique el tรญtulo de su pรกgina de destino.
  • Vuelve a la pรกgina principal y verifica el tรญtulo.
  • Haga clic en SOPORTE y verifique el tรญtulo de su pรกgina de destino.
  • Vuelve a la pรกgina principal y verifica el tรญtulo de nuevo.

El cรณdigo que aparece a continuaciรณn muestra cรณmo @BeforeMethod y @AfterMethod gestionan los pasos repetidos.

package firsttestngpackage;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;

public class FirstTestNGFile {

    public String baseUrl = "https://demo.guru99.com/test/newtours/";
    public WebDriver driver;
    public String expected = null;
    public String actual = null;

    @BeforeTest
    public void launchBrowser() {
        System.out.println("launching firefox browser");
        driver = new FirefoxDriver();
        driver.get(baseUrl);
    }

    @BeforeMethod
    public void verifyHomepageTitle() {
        String expectedTitle = "Welcome: Mercury Tours";
        String actualTitle = driver.getTitle();
        Assert.assertEquals(actualTitle, expectedTitle);
    }

    @Test(priority = 0)
    public void register() {
        driver.findElement(By.linkText("REGISTER")).click();
        expected = "Register: Mercury Tours";
        actual = driver.getTitle();
        Assert.assertEquals(actual, expected);
    }

    @Test(priority = 1)
    public void support() {
        driver.findElement(By.linkText("SUPPORT")).click();
        expected = "Under Construction: Mercury Tours";
        actual = driver.getTitle();
        Assert.assertEquals(actual, expected);
    }

    @AfterMethod
    public void goBackToHomepage() {
        driver.findElement(By.linkText("Home")).click();
    }

    @AfterTest
    public void terminateBrowser() {
        driver.quit();
    }
}

Despuรฉs de ejecutar la prueba, TestNG informa la siguiente secuencia.

TestNG Secuencia de informes utilizando BeforeMethod y AfterMethod

En resumen: coloque los pasos de configuraciรณn dentro @Antes del mรฉtodo y limpieza o restablecimiento de navegaciรณn en el interior @Despuรฉs del mรฉtodo De este modo, cada caso de prueba comienza y termina en un estado conocido.

Resumen de TestNG Anotaciones

  • @BeforeSuite: Se ejecuta antes que todas las demรกs pruebas del conjunto.
  • @AfterSuite: Se ejecuta despuรฉs de todas las pruebas del conjunto.
  • @AntesDeLaPrueba: se ejecuta antes de cualquier mรฉtodo de prueba perteneciente a las clases dentro de un etiqueta.
  • @DespuรฉsDeLaPrueba: se ejecuta despuรฉs de todos los mรฉtodos de prueba pertenecientes a las clases dentro de un etiqueta.
  • @BeforeGroups: se ejecuta poco antes del primer mรฉtodo de prueba que pertenece a cualquier grupo listado.
  • @AfterGroups: se ejecuta poco despuรฉs del รบltimo mรฉtodo de prueba que pertenece a cualquier grupo listado.
  • @AntesDeClase: se ejecuta antes del primer mรฉtodo de prueba en la clase actual.
  • @DespuรฉsDeClase: Se ejecuta despuรฉs de todos los mรฉtodos de prueba en la clase actual.
  • @BeforeMethod: Se ejecuta antes de cada mรฉtodo de prueba.
  • @AfterMethod: Se ejecuta despuรฉs de cada mรฉtodo de prueba.
  • @Prueba: marca el mรฉtodo como un caso de prueba.

Preguntas Frecuentes

JUnit 5 modernizados JUnit con la API de Jupiter y el modelo de extensiรณn. TestNG sigue liderando en ejecuciรณn paralela, grupo a nivel de suiteping, depende de y proveedor de datos. Muchos Selenium Los equipos eligen TestNG para suites de extremo a extremo y JUnit 5 para pruebas unitarias.

Agregue parallel=โ€methodsโ€ o parallel=โ€classesโ€ mรกs un atributo thread-count en el etiqueta dentro de testng.xml. TestNG Luego distribuye los mรฉtodos de prueba entre los hilos, ideal para Selenium Ejecuciรณn en cuadrรญcula o en la nube compatible con mรบltiples navegadores.

@DataProvider alimenta varios conjuntos de datos a un รบnico mรฉtodo @Test. Cada fila en el proveedor es una ejecuciรณn. Es el patrรณn estรกndar para el control basado en datos. Selenium Pruebas realizadas con formularios, cuadros de bรบsqueda o pantallas de inicio de sesiรณn.

Sรญ. AI Los asistentes de codificaciรณn generan TestNG Crea esqueletos, anota mรฉtodos @Test, construye clases Page Object y elabora matrices DataProvider a partir de archivos CSV de muestra, reduciendo drรกsticamente el tiempo de andamiaje.

La IA generativa procesa los archivos testng-results.xml y los registros de Surefire, agrupa fallos similares, sugiere posibles causas raรญz y crea incidencias en Jira. Esto agiliza la clasificaciรณn de pruebas inestables y ayuda a los responsables de control de calidad a priorizar las correcciones de integraciรณn continua.

Resumir este post con: