TestNG - Test de groupe

Le test de groupe est une nouvelle fonctionnalité innovante de TestNG, qui n'existe pas dans le framework JUnit. Il vous permet de répartir les méthodes en portions appropriées et d'effectuer des regroupements sophistiqués de méthodes de test.

Non seulement vous pouvez déclarer les méthodes qui appartiennent à des groupes, mais vous pouvez également spécifier des groupes qui contiennent d'autres groupes. Ensuite, TestNG peut être appelé et invité à inclure un certain ensemble de groupes (ou d'expressions régulières), tout en excluant un autre ensemble.

Les tests de groupe offrent une flexibilité maximale dans la manière dont vous partitionnez vos tests et ne vous obligent pas à recompiler quoi que ce soit si vous souhaitez exécuter deux ensembles de tests différents l'un après l'autre.

Les groupes sont spécifiés dans votre fichier testng.xml à l'aide de la balise <groups>. Il peut être trouvé sous la balise <test> ou <suite>. Les groupes spécifiés dans la balise <suite> s'appliquent à toutes les balises <test> en dessous.

Maintenant, prenons un exemple pour voir comment fonctionne le test de groupe.

Créer une classe

  • Créez une classe Java à tester, disons, MessageUtil.java dans C:\> TestNG_WORKSPACE.

/*
* This class prints the given message on console.
*/
public class MessageUtil {
   private String message;

   // Constructor
   // @param message to be printed
   public MessageUtil(String message) {
      this.message = message;
   }

   // prints the message
   public String printMessage() {
      System.out.println(message);
      return message;
   }

   // add "tutorialspoint" to the message
   public String salutationMessage() {
      message = "tutorialspoint" + message;
      System.out.println(message);
      return message;
   }

   // add "www." to the message
   public String exitMessage() {
      message = "www." + message;
      System.out.println(message);
      return message;
   }
}

Créer une classe de cas de test

  • Créez une classe de test java, par exemple GroupTestExample.java.

  • Ajoutez des méthodes de test, testPrintMessage () et testSalutationMessage (), à votre classe de test.

  • Regroupez la méthode d'essai en deux catégories -

    • Check-in tests (checkintest)- Ces tests doivent être exécutés avant de soumettre un nouveau code. Ils doivent généralement être rapides et s'assurer qu'aucune fonctionnalité de base n'est interrompue.

    • Functional tests (functest) - Ces tests doivent couvrir toutes les fonctionnalités de votre logiciel et être exécutés au moins une fois par jour, bien que vous souhaitiez idéalement les exécuter en continu.

Créez le fichier de classe Java nommé GroupTestExample.java dans C:\>TestNG_WORKSPACE.

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

public class GroupTestExample {
   String message = ".com";
   MessageUtil messageUtil = new MessageUtil(message);

   @Test(groups = { "functest", "checkintest" })
   
   public void testPrintMessage() {
      System.out.println("Inside testPrintMessage()");
      message = ".com";
      Assert.assertEquals(message, messageUtil.printMessage());
   }

   @Test(groups = { "checkintest" })
   
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "tutorialspoint" + ".com";
      Assert.assertEquals(message, messageUtil.salutationMessage());
   }

   @Test(groups = { "functest" })
   
   public void testingExitMessage() {
      System.out.println("Inside testExitMessage()");
      message = "www." + "tutorialspoint"+".com";
      Assert.assertEquals(message, messageUtil.exitMessage());
   }  
}

Créer testng.xml

Créez testng.xml dans C:\> TestNG_WORKSPACE, pour exécuter des cas de test. Ici, nous n'exécuterions que les tests qui appartiennent au groupe fonctest .

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
   
      <groups>
         <run>
            <include name = "functest" />
         </run>
      </groups>

      <classes>
         <class name = "GroupTestExample" />
      </classes>
   
   </test>
</suite>

Compilez les classes de cas de test MessageUtil à l'aide de javac.

C:\TestNG_WORKSPACE>javac MessageUtil.java GroupTestExample.java

Maintenant, exécutez le testng.xml, qui exécutera uniquement la méthode testPrintMessage (), car elle appartient au groupe fonctest .

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

Vérifiez la sortie. Seule la méthode testPrintMessage () est exécutée.

Inside testPrintMessage()
.com
Inside testExitMessage()
www..com

===============================================
Suite1
Total tests run: 2, Failures: 1, Skips: 0
===============================================

Groupe de groupes

Les groupes peuvent également inclure d'autres groupes. Ces groupes sont appelésMetaGroups. Par exemple, vous souhaiterez peut-être définir un groupe comprenant tous les checkintest et functest . Modifions notre fichier testng.xml comme suit -

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
   <test name = "test1">
   
      <groups>
      
         <define name = "all">
            <include name = "functest"/>
            <include name = "checkintest"/>
         </define>
         
         <run>
            <include name = "all"/>
         </run>
         
      </groups>
      
      <classes>
         <class name = "GroupTestExample" />
      </classes>
      
   </test>
</suite>

L'exécution du testng.xml ci-dessus exécutera les trois tests et vous donnera le résultat suivant -

Inside testPrintMessage()
.com
Inside testSalutationMessage()
tutorialspoint.com
Inside testExitMessage()
www.tutorialspoint.com

===============================================
Suite1
Total tests run: 3, Failures: 0, Skips: 0
===============================================

Groupes d'exclusion

Vous pouvez ignorer un groupe en utilisant la balise <exclude> comme indiqué ci-dessous -

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name = "Suite1">
   <test name = "test1">

      <groups>
         <define name = "all">
            <exclude name = "functest"/>
            <include name = "checkintest"/>
         </define>

         <run>
            <include name = "all"/>
         </run>
      </groups>

      <classes>
         <class name = "GroupTestExample" />
      </classes>

   </test>
</suite>