Introducción a los oyentes en TestNG

Antes de comprender primero los oyentes en TestNG, estudiaremos los oyentes y TestNG por separado. Hay momentos en los que deseamos modificar el comportamiento de TestNG en nuestra aplicación y esto lo puede hacer Interfaces. Estas interfaces que ayudan al usuario a hacerlo se conocen como oyentes. Como su nombre indica, la tarea principal de los "oyentes" es escuchar un evento definido y reaccionar de acuerdo con eso. El objetivo principal para el que los programadores utilizan los oyentes es crear registros y crear informes personalizados de acuerdo con el escenario específico definido.

Hay varios tipos de oyentes en TestNG y cada oyente cumple su propósito diferente. Algunos de ellos se mencionan a continuación:

  1. IConfigurable
  2. IAnnotationTransformer
  3. I Hookable
  4. IReporter
  5. ISuiteListener

Métodos de oyentes en TestNG

Aunque hay muchos oyentes disponibles en TestNG y cada oyente tiene métodos específicos que se anulan. Analicemos los 2 oyentes más populares y los métodos que anulan:

1. ITestListener

ITestListener es uno de los oyentes más utilizados en Selenium Webdriver. El programador simplemente necesita implementar la interfaz ITestListener y anular todos los métodos de esta interfaz para poder usarla. Hace la llamada antes y después de cada prueba presente en la suite. Hay varios métodos que se mencionan a continuación:

  • onStart: este es el primer método que se llama después de instanciar la clase de prueba. También se puede usar para recuperar el directorio desde el que se ejecuta la prueba.
  • onFinish: este es el último método que se llamará después de que se hayan realizado todos los métodos anulados.
  • onTestStart (resultado ITestResult): este método se llama cada vez antes de cualquier nuevo método de prueba. Indica que se inició un método de prueba requerido.
  • onTestFailure (resultado ITestResult): se llama a este método cuando falla cualquier método de prueba, ya que indica las fallas de la prueba. Podemos realizar ciertas tareas en la falla de la prueba, como tomar la captura de pantalla cuando falla una prueba en particular para obtener una visión más profunda de la falla.
  • onTestSkipped (resultado ITestResult): se llama a este método cuando se omite la ejecución de cualquier método de prueba.
  • onTestSuccess (resultado ITestResult): Este método se llama cuando un método de prueba particular se ejecuta con éxito. El programador puede realizar cualquier operación deseada en el éxito del método de prueba escribiendo código dentro de este método.
  • onTestFailedButWithinSuccessPercentage (resultado ITestResult): se llama a este método cuando falla cualquier método de prueba con algún porcentaje de éxito. Por ejemplo, representa el caso, si algún método de prueba se ejecuta 10 veces y falla 5 veces. Toma 2 parámetros, es decir, successPercentage e invocationCount. Para el caso anterior, successPercentage sería 50 y invocationCount sería 10.

2. ISuiteListener

A diferencia del ITestListener, que se implementa después de cada método de prueba, ISuiteListener se implementa en el nivel Suite. Tiene dos métodos que se anulan:

  • onStart: este método se implementa antes de la invocación del conjunto de pruebas, lo que significa que todo el código escrito en su interior se ejecuta antes del inicio de cualquier conjunto.
  • onFinish: este método se implementa después de la invocación del conjunto de pruebas, lo que significa que todo el código escrito en su interior se ejecuta después de ejecutar todo el conjunto de pruebas.

¿Cómo crear oyentes en TestNG?

Básicamente hay 2 formas de crear oyentes en TestNG:

1. Podemos usar la interfaz @Listeners dentro de la clase.

Paso 1: El primer paso es crear una clase para Listener que implemente ITestListener y anule todos los métodos explicados anteriormente.

Clase: TestListener.java

Código:

package Demo;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
public class TestListener implements ITestListener
(
@Override
public void onTestStart(ITestResult res)
(
System.out.println("Started test case is "+ res.getName());
)
@Override
public void onStart(ITestContext res)
(
)
@Override
public void onFinish(ITestContext res)
(
)
// Run when the test case passed successfully
@Override
public void onTestSuccess(ITestResult res)
(
System.out.println("Test case passed is "+res.getName());
)
// Run when the test case fails
@Override
public void onTestFailure(ITestResult res)
(
System.out.println("Test case failed is "+res.getName());
)
// Run when test case pass with some failures
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult res)
(
System.out.println("Test case passed with failure is "+res.getName());
)
// Run when the test case is skipped
@Override
public void onTestSkipped(ITestResult res)
(
System.out.println("Test case skipped is :"+res.getName());
)
)

Paso 2: A continuación, debemos implementar el Listener anterior en el Programa Java normal de inicio de sesión en una aplicación que tenga los métodos @test usando la anotación @Listeners.

Clase: Testing.java

Código:

package Demo;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
@Listeners(Demo.TestListener.class)
public class Testing
(
String driverPath =
"C:\\Users\\username\\Downloads\\Compressed\\geckodriver.exe";
public WebDriver driver;
@BeforeMethod
public void startBrowser() (
System.setProperty("webdriver.gecko.driver", driverPath);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
driver= new FirefoxDriver();
)
// Test case to login an application which will pass .
@Test
public void LoginMethod()
(
driver.get("http://testing-ground.scraping.pro/login"); driver.findElement(By.id("usr")).sendKeys("admin");
driver.findElement(By.id("pwd")).sendKeys("123");
driver.findElement(By.xpath("//*(@id=\"case_login\")/form/input(3)")).
click();
)
// Test case for failure in order to check the working of listener.
@Test
public void FailMethod()
(
System.out.println("Forcefully making the method to fail");
Assert.assertTrue(false);
)
)

Paso 3: ahora podemos agregar una entrada de la clase en el archivo XML como la siguiente:

Código:





Salida:

2. Podemos usar add Listeners en el archivo XML directamente.

Aunque el enfoque anterior de agregar @listeners en un trabajo de clase específico en una suite que tiene tantas clases, no se considera un buen enfoque agregar el oyente a cada clase. En cambio, podemos crear la entrada de oyentes y clases en el archivo XML.

Paso 1: crear una clase de escucha en Java implementando ITestListener y anulando los métodos similares a los mencionados anteriormente.

Clase: TestListener.java

Código:

package Demo;
import org.testng.ITestContext;
import org.testng.ITestListener;
import org.testng.ITestResult;
public class TestListener implements ITestListener
(
@Override
public void onTestStart(ITestResult res)
(
System.out.println("Started test case is "+ res.getName());
)
@Override
public void onStart(ITestContext res)
(
)
@Override
public void onFinish(ITestContext res)
(
)
// Run when the test case passed successfully
@Override
public void onTestSuccess(ITestResult res)
(
System.out.println("Test case passed is "+res.getName());
)
// Run when the test case fails
@Override
public void onTestFailure(ITestResult res)
(
System.out.println("Test case failed is "+res.getName());
)
// Run when test case pass with some failures
@Override
public void onTestFailedButWithinSuccessPercentage(ITestResult res)
(
System.out.println("Test case passed with failure is "+res.getName());
)
// Run when the test case is skipped
@Override
public void onTestSkipped(ITestResult res)
(
System.out.println("Test case skipped is :"+res.getName());
)
)

Paso 2: A continuación, debemos crear un programa Java normal de inicio de sesión en una aplicación que tenga todos los métodos @test y no es necesario usar la anotación @Listeners.

Clase: Testing.java

Código:

package Demo;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Listeners;
import org.testng.annotations.Test;
public class Testing
(
String driverPath = "C:\\Users\\username\\Downloads\\Compressed\\geckodriver.exe";
public WebDriver driver;
@BeforeMethod
public void startBrowser() (
System.setProperty("webdriver.gecko.driver", driverPath);
DesiredCapabilities capabilities = DesiredCapabilities.firefox();
capabilities.setCapability("marionette", true);
driver= new FirefoxDriver();
)
// Test case to login an application which will pass.
@Test
public void LoginMethod()
(
driver.get("http://testing-ground.scraping.pro/login"); driver.findElement(By.id("usr")).sendKeys("admin");
driver.findElement(By.id("pwd")).sendKeys("123");
driver.findElement(By.xpath("//*(@id=\"case_login\")/form/input(3)")).
click();
)
// Test case for failure in order to check the working of listener.
@Test
public void FailMethod()
(
System.out.println("Forcefully making the method to fail");
Assert.assertTrue(false);
)
)

Paso 3: Ahora podemos agregar una entrada del oyente y la clase en el archivo XML como la que se muestra a continuación:

Código:







Salida:

Conclusión

Más arriba, la descripción de los oyentes proporciona claramente la comprensión básica de los oyentes y cómo se implementan en el programa Java para personalizar los registros y los informes. Antes de usar cualquier oyente, se requiere una comprensión clara de todos los oyentes y los escenarios específicos en los que deben usarse junto con los métodos que anulan.

Artículos recomendados

Esta es una guía para los oyentes en TestNG. Aquí discutimos los métodos de los oyentes en TestNG y dos formas de crear oyentes en TestNG. También puede consultar nuestros otros artículos relacionados para obtener más información.

  1. Instalar TestNG
  2. AngularJS Events
  3. ¿Qué es XPath?
  4. Prueba de marcos para Java
  5. Anotaciones Java
  6. Anulación en Java