TestNG Tutorial
TestNG Groups
What Are TestNG Groups ?
TestNG groups imply the process of grouping more than one tests together into a single set which can be executed in a single command. Tests can belong to different different classes.
We define a group in our .xml and then pass this group name with test annotations.
Syntax :
@Test(groups = { "GroupName" })
Multiple group name can be passed in a test annotation by separating each group name with ' , ' .
@Test(groups = { "GroupName1","GroupName2" })
Groups can be created at these two levels :
Suite Level : Groups can be defined witin <suite> tag that is applied on all the <test> tag in .xml.
Class Level : Groups can be defined within <test> tag that is applied only on that particular <test> tag in .xml.
Let's create two example classes as 'TestNGGroupExample1' and 'TestNGGroupExample2' :
TestNGGroupExample1 :
package testNGexamples;
import org.testng.annotations.Test;
public class TestNGGroupExample1 {
@Test(groups = { "Test Group In Suite" }) public void test1() { System.out.println("test1 of Test Group In Suite is executing :"); }
@Test(groups = { "Test Group In Test" }) public void test2() { System.out.println("test2 of Test Group In Test is executing :");
}
}
TestNGGroupExample2 :
package testNGexamples;
import org.testng.annotations.Test;
public class TestNGGroupExample2 {
@Test(groups = { "Test Group In Test" }) public void test3() { System.out.println("test3 of Test Group In Test is executing :");
}
@Test(groups = { "Test Group In Suite" }) public void test4() { System.out.println("test4 of Test Group In Suite is executing :");
}
}
Now group the tests of these classes at suite and class level.
.XML for testNG group at suite level :
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Test-Suite"> <groups> <run> <include name="Test Group In Suite"></include> </run> </groups> <test name="Group Test1"> <classes> <class name="testNGexamples.TestNGGroupExample1"></class> </classes> </test> <test name="GroupTest2"> <classes> <class name="testNGexamples.TestNGGroupExample2"></class> </classes> </test> </suite>
Output :
[RemoteTestNG] detected TestNG version 7.4.0 test1 of Test Group In Suite is executing : test4 of Test Group In Suite is executing :
=============================================== Test-Suite Total tests run: 2, Passes: 2, Failures: 0, Skips: 0 ===============================================
.XML for testNG group at class level :
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="Test-Suite"> <test name="Group Test"> <groups> <run> <include name="Test Group In Test"></include> </run> </groups> <classes> <class name="testNGexamples.TestNGGroupExample1"></class> <class name="testNGexamples.TestNGGroupExample2"></class> </classes> </test> </suite>
Output :
[RemoteTestNG] detected TestNG version 7.4.0 test2 of Test Group In Test is executing : test3 of Test Group In Test is executing :
=============================================== Test-Suite Total tests run: 2, Passes: 2, Failures: 0, Skips: 0 ===============================================
TestNG supports nested group as well that means a group inside another group.
In .xml we have to define the nested group within <group> tag and then include it inside <run> .
<groups>
<define name="Nested-Group-Name">
<include name="Test-Group-Name"></include>
</define>
<run>
<include name="Nested-Group-Name"></include>
</run>
</groups>