Introdução aos ouvintes no TestNG

Antes de entender os Listeners no TestNG primeiro, estudaremos os Listeners e o TestNG separadamente. Há momentos em que desejamos modificar o comportamento do TestNG em nossa aplicação e isso pode ser feito por Interfaces. Essas interfaces que ajudam o usuário a fazer isso são conhecidas como Listeners. Como o nome sugere, a tarefa principal dos 'ouvintes' é ouvir um evento definido e reagir de acordo com isso. O principal objetivo para o qual os Listeners são usados ​​pelos programadores é criar logs e criar relatórios personalizados de acordo com o cenário específico definido.

Existem vários tipos de ouvintes no TestNG e cada ouvinte serve a um propósito diferente. Alguns deles são mencionados abaixo:

  1. IConfigurable
  2. IAnnotationTransformer
  3. IHookable
  4. IReporter
  5. ISuiteListener

Métodos de ouvintes no TestNG

Embora existam muitos ouvintes disponíveis no TestNG e cada ouvinte tenha métodos específicos que são substituídos. Vamos discutir os 2 ouvintes mais populares e os métodos que são substituídos por eles:

1. ITestListener

O ITestListener é um dos ouvintes mais usados ​​no Selenium Webdriver. O programador simplesmente precisa implementar a interface ITestListener e substituir todos os métodos dessa interface para usá-la. Ele faz a ligação antes e depois de cada teste presente na suíte. Existem vários métodos mencionados abaixo:

  • onStart: este é o primeiro e mais importante método chamado depois que a classe de teste é instanciada. Também pode ser usado para recuperar o diretório do qual o teste está sendo executado.
  • onFinish: este é o último método a ser chamado após a conclusão de todos os métodos substituídos.
  • onTestStart (resultado ITestResult): esse método é chamado sempre antes de qualquer novo método de teste. Indica que um método de teste necessário foi iniciado.
  • onTestFailure (resultado ITestResult): esse método é chamado quando qualquer método de teste falha, pois indica as falhas do teste. Podemos executar determinadas tarefas em caso de falha do teste, como fazer a captura de tela quando um teste específico falhar, a fim de obter uma visão mais profunda da falha.
  • onTestSkipped (resultado ITestResult): esse método é chamado quando qualquer método de teste é ignorado para execução.
  • onTestSuccess (resultado ITestResult): esse método é chamado quando um método de teste específico é executado com êxito. O programador pode executar qualquer operação desejada com êxito no método de teste escrevendo código dentro desse método.
  • onTestFailedButWithinSuccessPercentage (resultado ITestResult): esse método é chamado quando qualquer método de teste falha com alguma porcentagem de sucesso. Por exemplo, representa o caso, se qualquer método de teste for executado 10 vezes e falhar 5 vezes. São necessários 2 parâmetros, por exemplo, successPercentage e invocationCount. No caso acima, successPercentage seria 50 e a invocationCount seria 10.

2. ISuiteListener

Diferentemente do ITestListener, que é implementado após cada método de teste, o ISuiteListener é implementado no nível do Suite. Ele tem dois métodos que são substituídos:

  • onStart: esse método é implementado antes da chamada do conjunto de testes, o que significa que todo o código escrito nele é executado antes do início de qualquer conjunto.
  • onFinish: esse método é implementado após a chamada do conjunto de testes, o que significa que todo o código escrito nele é executado após a execução de todo o conjunto de testes.

Como criar ouvintes no TestNG?

Existem basicamente duas maneiras de criar Listeners no TestNG:

1. Podemos usar a interface @Listeners dentro da classe.

Etapa 1: a primeira e principal etapa é criar uma classe para o Listener que esteja implementando o ITestListener e substituindo todos os seus métodos explicados acima.

Classe: 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());
)
)

Etapa 2: Em seguida, precisamos implementar o Ouvinte acima no programa Java normal de login em um aplicativo com os métodos @test usando a anotação @Listeners.

Classe: 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);
)
)

Etapa 3: Agora podemos adicionar uma entrada da classe no arquivo XML como a fornecida abaixo:

Código:





Resultado:

2. Podemos usar adicionar Listeners no arquivo XML diretamente.

Embora a abordagem acima de adicionar os @listeners em aulas específicas em um conjunto com tantas classes, não é considerada uma boa abordagem adicionar o ouvinte a cada classe. Em vez disso, podemos criar a entrada de Listeners e classes no arquivo XML.

Etapa 1: Criando uma classe de Ouvinte em Java implementando o ITestListener e substituindo os métodos semelhantes ao mencionado acima.

Classe: 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());
)
)

Etapa 2: Em seguida, precisamos criar um programa Java normal de login em um aplicativo com todos os métodos @test e não há necessidade de usar a anotação @Listeners.

Classe: 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);
)
)

Etapa 3: Agora podemos adicionar uma entrada do ouvinte e da classe no arquivo XML, como o fornecido abaixo:

Código:







Resultado:

Conclusão

Acima, a descrição dos Listeners fornece claramente o entendimento básico dos Listeners e como eles são implementados no programa Java para personalizar os logs e relatórios. Antes de usar qualquer Ouvinte, é necessário um entendimento claro de todos os Ouvintes e dos cenários específicos em que eles precisam ser usados ​​junto com os métodos que substituem.

Artigos recomendados

Este é um guia para os ouvintes no TestNG. Aqui discutimos métodos de Listeners no TestNG e duas maneiras de criar Listeners no TestNG. Você também pode consultar nossos outros artigos relacionados para saber mais.

  1. Instale o TestNG
  2. Eventos AngularJS
  3. O que é XPath?
  4. Testando estruturas para Java
  5. Anotações Java
  6. Substituindo em Java