TestNG - Reporter personnalisé

Dans cette section, nous allons couvrir, avec un exemple, la méthode d'écriture de votre reporter personnalisé et de l'attacher à TestNG. Pour écrire une classe de reporter personnalisée, notre classe d'extension doit implémenter l'interface IReporter. Allons-y et créons un exemple avec le reporter personnalisé.

Créer une classe de cas de test

Créez une classe Java, par exemple SampleTest.java dans 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);
   }
}

La classe de test précédente contient trois méthodes de test parmi lesquelles testMethodOne et testMethodThree réussiront une fois exécutées, tandis que testMethodTwo échouera en passant une valeur booléenne fausse à la méthode Assert.assertTrue, qui est utilisée pour les conditions de vérité dans les tests.

Créer une classe de rapport personnalisée

Créez une autre nouvelle classe nommée CustomReporter.java dans 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());
         }
      }
   }
}

La classe précédente implémente l' interface org.testng.IReporter . Il implémente la définition de la méthode generateReport de l' interface IReporter . La méthode prend trois arguments -

  • xmlSuite, qui est la liste des suites mentionnées dans le XML de test en cours d'exécution.

  • suites, qui contient les informations sur la suite après l'exécution du test. Cet objet contient toutes les informations sur les packages, les classes, les méthodes de test et leurs résultats d'exécution de test.

  • outputDirectory, qui contient les informations sur le chemin du dossier de sortie, où les rapports seront générés.

Créer testng.xml

Créez testng.xml dans C:\> TestNG_WORKSPACE pour exécuter des cas de test.

<?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>

Compilez les classes SampleTest, CustomReporter à l'aide de javac.

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

Maintenant, exécutez testng.xml.

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

Vérifiez la sortie.

===============================================
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

L'exemple précédent montre un simple rapporteur personnalisé, qui imprime le nombre de tests ayant échoué, réussi et ignoré sur la console pour chaque suite incluse dans ladite exécution de test. Reporter est principalement utilisé pour générer le rapport final pour l'exécution du test. L'extension peut être utilisée pour générer des fichiers au format XML, HTML, XLS, CSV ou texte en fonction des exigences du rapport.