TestNG - Test di gruppo

Il test di gruppo è una nuova funzionalità innovativa in TestNG, che non esiste nel framework JUnit. Consente di distribuire metodi in porzioni appropriate ed eseguire raggruppamenti sofisticati di metodi di test.

Non solo puoi dichiarare quei metodi che appartengono a gruppi, ma puoi anche specificare gruppi che contengono altri gruppi. Quindi, TestNG può essere invocato e chiesto di includere un certo insieme di gruppi (o espressioni regolari), escludendo un altro insieme.

I test di gruppo offrono la massima flessibilità nel modo in cui partizionare i test e non richiedono di ricompilare nulla se si desidera eseguire due diversi set di test uno dopo l'altro.

I gruppi vengono specificati nel file testng.xml utilizzando il tag <groups>. Può essere trovato sotto il tag <test> o <suite>. I gruppi specificati nel tag <suite> si applicano a tutti i tag <test> sottostanti.

Ora, facciamo un esempio per vedere come funziona il test di gruppo.

Crea una classe

  • Crea una classe java da testare, ad esempio, MessageUtil.java in 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;
   }
}

Crea classe test case

  • Crea una classe di test java, ad esempio GroupTestExample.java.

  • Aggiungi metodi di test, testPrintMessage () e testSalutationMessage (), alla tua classe di test.

  • Raggruppa il metodo di prova in due categorie:

    • Check-in tests (checkintest)- Questi test dovrebbero essere eseguiti prima di inviare un nuovo codice. In genere dovrebbero essere veloci e assicurarsi che nessuna funzionalità di base sia interrotta.

    • Functional tests (functest) - Questi test dovrebbero coprire tutte le funzionalità del tuo software ed essere eseguiti almeno una volta al giorno, anche se idealmente dovresti eseguirli continuamente.

Crea il file di classe java denominato GroupTestExample.java in 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());
   }  
}

Crea testng.xml

Crea testng.xml in C:\> TestNG_WORKSPACE, per eseguire uno o più casi di test. Qui, eseguiremo solo quei test che appartengono al gruppo 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>

Compilare le classi MessageUtil, Test case utilizzando javac.

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

Ora, esegui testng.xml, che eseguirà solo il metodo testPrintMessage (), poiché appartiene al gruppo functest .

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

Verifica l'output. Viene eseguito solo il metodo testPrintMessage ().

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

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

Gruppo di gruppi

I gruppi possono includere anche altri gruppi. Questi gruppi sono chiamatiMetaGroups. Ad esempio, potresti voler definire un gruppo tutto ciò che include checkintest e functest . Modifichiamo il nostro file testng.xml come segue:

<?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'esecuzione di testng.xml sopra eseguirà tutti e tre i test e ti darà il seguente risultato:

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

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

Gruppi di esclusione

Puoi ignorare un gruppo utilizzando il tag <exclude> come mostrato di seguito -

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