TestNG - Custom Reporter

Nesta seção, cobriremos, com um exemplo, o método de escrever seu relator personalizado e anexá-lo ao TestNG. Para escrever uma classe de repórter customizada, nossa classe de extensão deve implementar a interface IReporter. Vamos em frente e criar um exemplo com o repórter personalizado.

Criar classe de caso de teste

Crie uma classe java, digamos, SampleTest.java dentro C:\> TestNG_WORKSPACE.

import org.testng.Assert;
import org.testng.annotations.Test;

public class SampleTest {
   @Test
   public void testMethodOne() {
      Assert.assertTrue(true);
   }
	  
   @Test
   public void testMethodTwo() {
      Assert.assertTrue(false);
   }
	  
   @Test(dependsOnMethods = {"testMethodTwo"})
   public void testMethodThree() {
      Assert.assertTrue(true);
   }
}

A classe de teste anterior contém três métodos de teste nos quais testMethodOne e testMethodThree serão aprovados quando executados, enquanto testMethodTwo falha ao passar um valor booleano falso para o método Assert.assertTrue, que é usado para condições de verdade nos testes.

Criar classe de relatório personalizado

Crie outra nova classe chamada CustomReporter.java dentro C:\> TestNG_WORKSPACE.

import java.util.List;
import java.util.Map;

import org.testng.IReporter;
import org.testng.ISuite;
import org.testng.ISuiteResult;
import org.testng.ITestContext;
import org.testng.xml.XmlSuite;

public class CustomReporter implements IReporter{
   @Override
   public void generateReport(List<XmlSuite> xmlSuites, List<ISuite> suites,
      String outputDirectory) {
      
      //Iterating over each suite included in the test
      for (ISuite suite : suites) {
            
         //Following code gets the suite name
         String suiteName = suite.getName();
            
         //Getting the results for the said suite
         Map<String, ISuiteResult> suiteResults = suite.getResults();
         for (ISuiteResult sr : suiteResults.values()) {
            ITestContext tc = sr.getTestContext();
            System.out.println("Passed tests for suite '" + suiteName +
               "' is:" + tc.getPassedTests().getAllResults().size());
            System.out.println("Failed tests for suite '" + suiteName +
               "' is:" + tc.getFailedTests().getAllResults().size());
            System.out.println("Skipped tests for suite '" + suiteName +
               "' is:" + tc.getSkippedTests().getAllResults().size());
         }
      }
   }
}

A classe anterior implementa a interface org.testng.IReporter . Ele implementa a definição do método generateReport da interface IReporter . O método leva três argumentos -

  • xmlSuite, que é a lista de suítes mencionada no XML de teste que está sendo executado.

  • suites, que contém as informações do conjunto após a execução do teste. Este objeto contém todas as informações sobre os pacotes, classes, métodos de teste e seus resultados de execução de teste.

  • outputDirectory, que contém as informações do caminho da pasta de saída, onde os relatórios serão gerados.

Crie testng.xml

Crie testng.xml em C:\> TestNG_WORKSPACE para executar caso (s) de teste.

<?xml version = "1.0" encoding = "UTF-8"?>
<suite name = "Simple Reporter Suite">
   <listeners>
      <listener class-name = "CustomReporter" />
   </listeners>

   <test name = "Simple Reporter test">
      <classes>
         <class name = "SampleTest" />
      </classes>
   </test>
</suite>

Compile as classes SampleTest e CustomReporter usando javac.

C:\TestNG_WORKSPACE>javac CustomReporter.java SampleTest.java

Agora, execute testng.xml.

C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml

Verifique a saída.

===============================================
Simple Reporter Suite
Total tests run: 3, Failures: 1, Skips: 1
===============================================

Passed tests for suite 'Simple Reporter Suite' is:1
Failed tests for suite 'Simple Reporter Suite' is:1
Skipped tests for suite 'Simple Reporter Suite' is:1

O exemplo anterior mostra um relator personalizado simples, que imprime o número de testes reprovados, aprovados e ignorados no console para cada suíte incluída na execução do referido teste. Reporter é usado principalmente para gerar o relatório final para a execução do teste. A extensão pode ser usada para gerar arquivos em formato XML, HTML, XLS, CSV ou de texto, dependendo dos requisitos do relatório.