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.

ยฟ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.xmlpresentar en eltest-outputcarpeta. 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.xmlarchivo, 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 Simplifica el cรณdigo de prueba. Ya no necesitas un mรฉtodo main estรกtico; las anotaciones deciden quรฉ se ejecuta y cuรกndo.
- 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.
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:
- Escribe tu lรณgica de negocio y colรณcala TestNG anotaciones encima de cada mรฉtodo.
- Agregue metadatos como el nombre de la clase, el nombre del grupo y el nombre del paquete.
- 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.
Paso 2) entrar: Nombre TestNGProyectos como nombre del proyecto y haga clic Siguiente.
Paso 3) Importar el TestNG bibliotecas. Haga clic en el Bibliotecas pestaรฑa y luego Agregar bibliotecaโฆ.
Paso 4) En la secciรณn Agregar biblioteca diรกlogo, elegir TestNG y hacer clic en Siguiente.
Paso 5) Haga clic en Termine.
TestNG Ahora deberรญa aparecer 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.
Navegue a la carpeta donde se encuentra Selenium Los archivos JAR se almacenan.
Despuรฉs de agregar los archivos JAR externos, la pantalla deberรญa verse asรญ.
Paso 7) Haga clic en Termine. El nuevo Nombre TestNGProyectos aparece 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โฆ.
Paso 2) Ampliar la opciรณn TestNG carpeta, seleccione TestNG claseY haga clic en Siguiente.
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.
Paso 4) Eclipse genera el TestNG Plantilla que se muestra a continuaciรณn.
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.Assertrealiza 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.
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.
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.
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.
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.
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.
Ejecuta el cรณdigo y abre index.html. Haga clic en Visiรณn cronolรณgica.
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 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.
El informe HTML confirma que los mรฉtodos se ejecutaron en 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)
@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.
@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.
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.
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.

































