Groups in TestNG: How to Create a Group of Tests or a MetaGroups of Groups

Print View Mobile View

One of the coolest features in TestNG is the ability to group test methods. By grouping tests, you can separate different sections or features of a project you are working on. It also enables extending to the dependency feature so that a particular group of tests are executed only if one group or method has passed.

Tests can belong to a single or multiple groups. And again, you can have a group of different groups called MetaGroups. To use this feature, you have to provide the group name(s) as an array in the group attribute:

@Test(groups = { "Group-A" })

Now let’s look at a code example.

Tests in Single or Multiple Groups

The below example shows three groups that belong to at least one group.

File: GroupDemo.java

package TestNGDemo;

import org.testng.annotations.Test;

public class GroupDemo {
@Test(groups = { "Group-A" })
    public void testA() {
        System.out.println("I belong to Group A");
    }
 
    @Test(groups = { "Group-A", "Group-B" })
    public void testB() {
        System.out.println("I belong to Group A and Group B");
    }
 
    @Test(groups = { "Group-B" })
    public void testC() {
        System.out.println("I belong to Group B");
    }
}

testA() and testC() belong to “Group-A” and “Group-B,” respectively, while testB() is a member of both “Group-A” and “Group-B.”
TestNG Groups

Run a TestNG Group using testng.xml

Executing this XML file as a TestNG suite will run both A and B groups:

File: testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Group Demo">
    <test name="Group A">
        <groups>
            <run>
                <include name="Group-A" />
            </run>
        </groups>
        <classes>
            <class name="TestNGDemo.GroupDemo" />
        </classes>
    </test>
    <test name="Group B">
        <groups>
            <run>
                <include name="Group-B" />
            </run>
        </groups>
        <classes>
            <class name="TestNGDemo.GroupDemo" />
        </classes>
    </test>
</suite>

Group TestNG Class

Just like methods, Classes can also be grouped in TestNG. In below example, every public method of the class “GroupDemo” belong to group “Group-A”.

File: GroupDemo.java

package TestNGDemo;

import org.testng.annotations.Test;

@Test(groups = { "Group-A" })
public class GroupDemo {
    public void testA() {
        System.out.println("I belong to Group A");
    }
 
    public void testB() {
        System.out.println("I belong to Group A");
    }
 
}

Exclude a Group from Running

Using <exclude> tag we can prevent a particular group of tests from running:

File: testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Exclude/Include Group Demo">
    <test name="Group Demo">
        <groups>
            <run>
                <include name="Group-A" />
                <exclude name="Group-B" />
            </run>
        </groups>
        <classes>
            <class name="TestNGDemo.GroupDemo" />
        </classes>
    </test>
</suite>

MetaGroup: Create groups of groups

Using TestNG XML file, we can create a group of groups called MetaGroup.

File: testng.xml

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="MetaGroup">
    <test name="MetaGroup Demo">
        <groups>
            <define name="all-groups">
                <include name="Group-A" />
                <include name="Group-B" />
            </define>
            <run>
                <include name="all-groups" />
            </run>
        </groups>
        <classes>
            <class name="TestNGDemo.GroupDemo" />
        </classes>
    </test>
</suite>

In the above example, we have created a new group called “all-groups” with the methods of Group-A and Group-B. Calling the new MetaGroup, we can execute all the tests inside the sub groups.