TestNG - Prueba de grupo

La prueba grupal es una nueva característica innovadora en TestNG, que no existe en el marco JUnit. Le permite distribuir métodos en porciones adecuadas y realizar agrupaciones sofisticadas de métodos de prueba.

No solo puede declarar aquellos métodos que pertenecen a grupos, sino que también puede especificar grupos que contienen otros grupos. Luego, se puede invocar a TestNG y pedirle que incluya un determinado conjunto de grupos (o expresiones regulares), mientras que se excluye otro conjunto.

Las pruebas grupales brindan la máxima flexibilidad en la forma en que particiona sus pruebas y no requiere que vuelva a compilar nada si desea ejecutar dos conjuntos diferentes de pruebas consecutivas.

Los grupos se especifican en su archivo testng.xml usando la etiqueta <groups>. Se puede encontrar en la etiqueta <test> o <suite>. Los grupos especificados en la etiqueta <suite> se aplican a todas las etiquetas <test> debajo.

Ahora, tomemos un ejemplo para ver cómo funciona la prueba grupal.

Crear una clase

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

Crear clase de caso de prueba

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

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

  • Agrupe el método de prueba en dos categorías:

    • Check-in tests (checkintest)- Estas pruebas deben ejecutarse antes de enviar un nuevo código. Por lo general, deben ser rápidos y solo asegurarse de que no se rompa ninguna funcionalidad básica.

    • Functional tests (functest) - Estas pruebas deben cubrir todas las funcionalidades de su software y ejecutarse al menos una vez al día, aunque lo ideal es que desee ejecutarlas de forma continua.

Cree el archivo de clase java llamado GroupTestExample.java en 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());
   }  
}

Crear testng.xml

Cree testng.xml en C:\> TestNG_WORKSPACE, para ejecutar caso (s) de prueba. Aquí, estaríamos ejecutando solo aquellas pruebas, que pertenecen al grupo functest .

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

Compile MessageUtil, clases de casos de prueba utilizando javac.

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

Ahora, ejecute testng.xml, que ejecutará solo el método testPrintMessage (), ya que pertenece al grupo functest .

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

Verifique la salida. Solo se ejecuta el método testPrintMessage ().

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

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

Grupo de grupos

Los grupos también pueden incluir otros grupos. Estos grupos se llamanMetaGroups. Por ejemplo, es posible que desee definir un grupo todo que incluye checkintest y functest . Modifiquemos nuestro archivo testng.xml de la siguiente manera:

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

La ejecución del testng.xml anterior ejecutará las tres pruebas y le dará el siguiente resultado:

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

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

Grupos de exclusión

Puede ignorar un grupo utilizando la etiqueta <exclude> como se muestra a continuación:

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