TestNG Ouvintes em Selenium: Exemplo de ITestListener e ITestResult
Existem dois ouvintes principais.
- Ouvintes do WebDriver
- TestNG Ouvintes
Neste tutorial, discutiremos sobre Teste Ouvintes.
Em que consistem os ouvintes TestNG?
Listener é definido como interface que modifica o padrão TestNGcomportamento do . Como o nome sugere, os Listeners “ouvem” o evento definido no script do Selenium e se comportam de acordo. Ele é usado no Selenium implementando a Listeners Interface. Ele permite personalizar TestNG relatórios ou registros. Existem muitos tipos de TestNG ouvintes disponíveis.
Tipos de ouvintes em TestNG
Existem muitos tipos de ouvintes que permitem alterar o TestNGcomportamento de.
Abaixo estão alguns TestNG ouvintes:
- IAnotaçãoTransformador,
- IAnnotationTransformer2 ,
- IConfigurável,
- IConfigurationListener ,
- IExecutionListener,
- IHookable,
- IInvokedMethodListener,
- IInvokedMethodListener2,
- IMethodInterceptor,
- IReporter,
- ISuiteListener,
- ITestListener.
A interface acima é chamada TestNG Ouvintes. Essas interfaces são usadas no selênio para gerar logs ou personalizar o TestNG relatórios.
Neste tutorial, implementaremos o ITestListener.
ITestListener possui os seguintes métodos
- OnStart- O método OnStart é chamado quando qualquer teste é iniciado.
- onTestSuccess- O método onTestSuccess é chamado no sucesso de qualquer teste.
- onTestFailure- O método onTestFailure é chamado na falha de qualquer teste.
- onTestSkipped- O método onTestSkipped é chamado ao ser ignorado em qualquer teste.
- onTestFailedButWithinSuccessPercentage- O método é chamado sempre que o teste falha, mas está dentro da porcentagem de sucesso.
- onFinish- O método onFinish é chamado após todos os testes serem executados.
Cenário de Teste
Neste cenário de teste, automatizaremos o processo de Login e implementaremos o 'ItestListener'.
Passos para criar um TestNG Ouvinte
Para o cenário de teste acima, implementaremos o Listener.
Passo 1) Crie a classe “ListenerTest” que implementa ‘ITestListener’. Mova o mouse sobre o texto com linha vermelha e Eclipse irá sugerir 2 soluções rápidas, conforme mostrado na tela abaixo:
Basta clicar em “Adicionar métodos não implementados”. Vários métodos não implementados (sem corpo) são adicionados ao código. Verifique abaixo-
package Listener_Demo; import org.testng.ITestContext ; import org.testng.ITestListener ; import org.testng.ITestResult ; public class ListenerTest implements ITestListener { @Override public void onFinish(ITestContext arg0) { // TODO Auto-generated method stub } @Override public void onStart(ITestContext arg0) { // TODO Auto-generated method stub } @Override public void onTestFailedButWithinSuccessPercentage(ITestResult arg0) { // TODO Auto-generated method stub } @Override public void onTestFailure(ITestResult arg0) { // TODO Auto-generated method stub } @Override public void onTestSkipped(ITestResult arg0) { // TODO Auto-generated method stub } @Override public void onTestStart(ITestResult arg0) { // TODO Auto-generated method stub } @Override public void onTestSuccess(ITestResult arg0) { // TODO Auto-generated method stub } }
Vamos modificar a classe ‘ListenerTest’. Em particular, modificaremos os seguintes métodos-
onTestFailure, onTestSkipped, onTestStart, onTestSuccess, etc.
A modificação é simples. Apenas imprimimos o nome do teste.
Os logs são criados no console. É fácil para o usuário entender qual teste é aprovado, reprovado e ignorado.
Após a modificação, o código se parece com-
package Listener_Demo; import org.testng.ITestContext; import org.testng.ITestListener; import org.testng.ITestResult; public class ListenerTest implements ITestListener { @Override public void onFinish(ITestContext Result) { } @Override public void onStart(ITestContext Result) { } @Override public void onTestFailedButWithinSuccessPercentage(ITestResult Result) { } // When Test case get failed, this method is called. @Override public void onTestFailure(ITestResult Result) { System.out.println("The name of the testcase failed is :"+Result.getName()); } // When Test case get Skipped, this method is called. @Override public void onTestSkipped(ITestResult Result) { System.out.println("The name of the testcase Skipped is :"+Result.getName()); } // When Test case get Started, this method is called. @Override public void onTestStart(ITestResult Result) { System.out.println(Result.getName()+" test case started"); } // When Test case get passed, this method is called. @Override public void onTestSuccess(ITestResult Result) { System.out.println("The name of the testcase passed is :"+Result.getName()); } }
Passo 2) Crie outra classe “TestCases” para automação do processo de login. Selenium irá executar este 'TestCases' para fazer login automaticamente.
package Listener_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 TestCases { WebDriver driver= new FirefoxDriver(); // Test to pass as to verify listeners . @Test public void Login() { driver.get("http://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("mngr34926"); driver.findElement(By.name("password")).sendKeys("amUpenu"); driver.findElement(By.name("btnLogin")).click(); } // Forcefully failed this test as to verify listener. @Test public void TestToFail() { System.out.println("This method to test fail"); Assert.assertTrue(false); } }
Passo 3) A seguir, implemente este ouvinte em nossa classe de projeto regular, ou seja, “TestCases”. Existem duas maneiras diferentes de se conectar à classe e à interface.
A primeira maneira é usar a anotação Listeners (@Listeners) conforme mostrado abaixo:
@Listeners(Listener_Demo.ListenerTest.class)
Usamos isso na classe “TestCases” conforme mostrado abaixo.
Então, finalmente, a classe “TestCases” fica assim depois de usar a anotação Listener:
package Listener_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(Listener_Demo.ListenerTest.class) public class TestCases { WebDriver driver= new FirefoxDriver(); //Test to pass as to verify listeners. @Test public void Login() { driver.get("http://demo.guru99.com/V4/"); driver.findElement(By.name("uid")).sendKeys("mngr34926"); driver.findElement(By.name("password")).sendKeys("amUpenu"); driver.findElement(By.id("")).click(); } //Forcefully failed this test as verify listener. @Test public void TestToFail() { System.out.println("This method to test fail"); Assert.assertTrue(false); } }
A estrutura do projeto se parece com:
Etapa 4): Execute a classe “TestCases”. Os métodos da classe “ListenerTest” são chamados automaticamente de acordo com o comportamento dos métodos anotados como @Test.
Etapa 5): Verifique a saída que os logs exibem no console.
A saída dos 'TestCases' ficará assim:
[TestNG] Running: C:\Users\gauravn\AppData\Local\Temp\testng-eclipse--1058076918\testng-customsuite.xml Login Test Case started The name of the testcase passed is:Login TestToFail test case started This method to test fail The name of the testcase failed is:TestToFail PASSED: Login FAILED: TestToFail java.lang.AssertionError: expected [true] but found [false]
Uso de Listener para múltiplas classes.
Se o projeto tiver várias classes, adicionar ouvintes a cada uma delas pode ser complicado e sujeito a erros.
Nesses casos, podemos criar um testng.xml e adicionar tags de ouvintes em XML.
Este ouvinte é implementado em todo o conjunto de testes, independentemente do número de classes que você possui. Ao executar este arquivo XML, os ouvintes funcionarão em todas as classes mencionadas. Você também pode declarar qualquer número de classes de ouvinte.
Resumo
Os ouvintes são obrigados a gerar logs ou personalizar TestNG relatórios em Selenium Driver da Web.
- Existem muitos tipos de ouvintes e podem ser usados de acordo com os requisitos.
- Ouvintes são interfaces usadas no script do driver da web Selenium
- Demonstrou o uso do Listener em Selenium
- Implementou os Listeners para múltiplas classes