TestNG - Test de dépendance

Parfois, vous devrez peut-être appeler des méthodes dans un cas de test dans un ordre particulier, ou vous souhaiterez peut-être partager des données et un état entre les méthodes. Ce type de dépendance est pris en charge par TestNG, car il prend en charge la déclaration de dépendances explicites entre les méthodes de test.

TestNG vous permet de spécifier des dépendances soit avec -

  • Utilisation de l'attribut dependOnMethods dans les annotations @Test, OU.

  • Utilisation de l'attribut dependOnGroups dans les annotations @Test.

Exemple d'utilisation de dependOnMethods

Créer une classe

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

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 "Hi!" to the message
   public String salutationMessage() {
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }
}

Créer une classe de cas de test

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

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

  • Ajouter un attribut dependsOnMethods = {"initEnvironmentTest"} à l'annotation @Test de testSalutationMessage() méthode.

Créer un nom de fichier de classe Java DependencyTestUsingAnnotation.java dans C:\>TestNG_WORKSPACE.

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

public class DependencyTestUsingAnnotation {
String message = "Manisha";
MessageUtil messageUtil = new MessageUtil(message);

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

   @Test(dependsOnMethods = { "initEnvironmentTest" })
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Manisha";
      Assert.assertEquals(message, messageUtil.salutationMessage());
   }

   @Test
   public void initEnvironmentTest() {
      System.out.println("This is initEnvironmentTest");
   }
}

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"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "DependencyTestUsingAnnotation" />
      </classes>
   </test>
</suite>

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

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

Maintenant, exécutez le testng.xml, qui exécutera la méthode testSalutationMessage () uniquement après l'exécution de la méthode initEnvironmentTest ().

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

Vérifiez la sortie.

This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha

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

Exemple d'utilisation de dependOnGroups

Vous pouvez également avoir des méthodes qui dépendent de groupes entiers. Prenons un exemple pour le démontrer.

Créer une classe

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

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 "Hi!" to the message
   public String salutationMessage() {
      message = "Hi!" + message;
      System.out.println(message);
      return message;
   }
}

Créer une classe de cas de test

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

  • Ajoutez des méthodes de test, testPrintMessage () testSalutationMessage () et initEnvironmentTest () à votre classe de test et ajoutez-les au groupe «init».

  • Ajouter l'attribut dependsOnMethods = {"init.*"} à l'annotation @Test de testSalutationMessage() méthode.

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

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

public class DependencyTestUsingAnnotation {
   String message = "Manisha";
   MessageUtil messageUtil = new MessageUtil(message);

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

   @Test(dependsOnGroups = { "init.*" })
   public void testSalutationMessage() {
      System.out.println("Inside testSalutationMessage()");
      message = "Hi!" + "Manisha";
      Assert.assertEquals(message, messageUtil.salutationMessage());
   }

   @Test(groups = { "init" })
   public void initEnvironmentTest() {
      System.out.println("This is initEnvironmentTest");
   }
}

Dans cet exemple, testSalutationMessage () est déclaré comme dépendant de n'importe quel groupe, correspondant à l'expression régulière "init. *", Qui garantit que les méthodes testPrintMessage () et initEnvironmentTest () seront toujours appelées avant testSalutationMessage ().

Si une méthode dépendante échoue et que vous en avez une dépendance ferme (alwaysRun = false, qui est la valeur par défaut), les méthodes qui en dépendent ne sont pas marquées comme FAIL mais comme SKIP. Les méthodes ignorées seront signalées comme telles dans le rapport final (dans une couleur qui n'est ni rouge ni verte en HTML), ce qui est important car les méthodes ignorées ne sont pas nécessairement des échecs.

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"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name = "Suite1">
   <test name = "test1">
      <classes>
         <class name = "DependencyTestUsingAnnotation" />
      </classes>
   </test>
</suite>

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

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

Maintenant, exécutez le testng.xml, qui exécutera la méthode testSalutationMessage () uniquement après l'exécution de la méthode initEnvironmentTest () .

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

Vérifiez la sortie.

This is initEnvironmentTest
Inside testPrintMessage()
Manisha
Inside testSalutationMessage()
Hi!Manisha

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

dependOnGroups vs dependOnMethods

  • En utilisant des groupes, nous ne sommes plus exposés à des problèmes de refactoring. Tant que nous ne modifions pas les attributs dependOnGroups ou groupes, nos tests continueront de s'exécuter avec les dépendances correctement configurées.

  • Chaque fois qu'une nouvelle méthode doit être ajoutée dans le graphe de dépendances, il suffit de la placer dans le bon groupe et de s'assurer qu'elle dépend du bon groupe. Nous n'avons pas besoin de modifier une autre méthode.