TestNG - Prueba de dependencia

A veces, puede que necesite invocar métodos en un caso de prueba en un orden particular, o puede querer compartir algunos datos y estados entre métodos. Este tipo de dependencia es compatible con TestNG, ya que admite la declaración de dependencias explícitas entre métodos de prueba.

TestNG le permite especificar dependencias con:

  • El uso de atributo depende de los métodos en las anotaciones de @Test, O.

  • El uso de atributo depende de los grupos en las anotaciones de @Test.

Ejemplo de uso de dependsOnMethods

Crear una clase

Cree una clase de Java para probar, digamos, MessageUtil.java en 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;
   }
}

Crear clase de caso de prueba

  • Cree una clase de prueba de Java, por ejemplo, DependencyTestUsingAnnotation.java.

  • Agregue métodos de prueba, testPrintMessage () y testSalutationMessage (), e initEnvironmentTest (), a su clase de prueba.

  • Agregar atributo dependsOnMethods = {"initEnvironmentTest"} a la anotación @Test de testSalutationMessage() método.

Crea un nombre de archivo de clase java DependencyTestUsingAnnotation.java en 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");
   }
}

Crear testng.xml

Cree testng.xml en C:\>TestNG_WORKSPACE para ejecutar caso (s) de prueba.

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

Compile MessageUtil, clases de casos de prueba utilizando javac.

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

Ahora, ejecute testng.xml, que ejecutará el método testSalutationMessage () solo después de la ejecución del método initEnvironmentTest ().

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

Verifique la salida.

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

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

Ejemplo de uso de dependsOnGroups

También puede tener métodos que dependan de grupos enteros. Tengamos un ejemplo para demostrar esto.

Crear una clase

Cree una clase de Java para probar, digamos, MessageUtil.java en 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;
   }
}

Crear clase de caso de prueba

  • Cree una clase de prueba de Java, por ejemplo, DependencyTestUsingAnnotation.java.

  • Agregue métodos de prueba, testPrintMessage () testSalutationMessage () e initEnvironmentTest () a su clase de prueba, y agréguelos al grupo "init".

  • Agregar el atributo dependsOnMethods = {"init.*"} a la anotación @Test de testSalutationMessage() método.

Cree un archivo de clase java llamado DependencyTestUsingAnnotation.java en 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");
   }
}

En este ejemplo, testSalutationMessage () se declara como dependiente de cualquier grupo, coincidiendo con la expresión regular "init. *", Lo que garantiza que los métodos testPrintMessage () e initEnvironmentTest () siempre se invocarán antes que testSalutationMessage ().

Si un método del que depende falla, y tiene una dependencia estricta de él (alwaysRun = false, que es el valor predeterminado), los métodos que dependen de él no se marcan como FAIL sino como SKIP. Los métodos omitidos se informarán como tales en el informe final (en un color que no es ni rojo ni verde en HTML), lo cual es importante ya que los métodos omitidos no son necesariamente fallas.

Crear testng.xml

Cree testng.xml en C:\>TestNG_WORKSPACE para ejecutar caso (s) de prueba.

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

Compile MessageUtil, clases de casos de prueba utilizando javac.

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

Ahora, ejecute testng.xml, que ejecutará el método testSalutationMessage () solo después de la ejecución del método initEnvironmentTest () .

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

Verifique la salida.

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

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

depende de los grupos Vs depende de los métodos

  • Al usar grupos, ya no estamos expuestos a problemas de refactorización. Mientras no modifiquemos los atributos de los grupos o grupos dependientes, nuestras pruebas seguirán ejecutándose con las dependencias adecuadas configuradas.

  • Siempre que sea necesario agregar un nuevo método en el gráfico de dependencia, todo lo que tenemos que hacer es colocarlo en el grupo correcto y asegurarnos de que depende del grupo correcto. No necesitamos modificar ningún otro método.