Templates by BIGtheme NET

TestNG groups attribute example

In this article, I am going to show you how “TestNG groups” allows grouping of test cases.
How specific group or groups test cases can execute independently.

How this groups can be defined?
There are different criteria, that makes these groups.
These groups can be defined based on,
1) Functionality
2) Customer Use cases (Some customer specific test cases)
3) Build release sanity testing
4) Any of software development life cycle,like development phase, QA phase … etc
2132112
Instead of running all test cases, we can run particular group test cases.
This is fast and efficient approach.

In TestNG, We can group the test methods or test cases by specifying the group names they
belongs to, using groups attribute of @Test annotation.

Example :
We have three modules Customer, Bank and Transactions.
And five groups functionalTestGroup, customerTestGroup, buildReleaseSanityTestGroup, developmentPhaseTestGroup and QATestGroup.

All these groups are having test cases across all three modules,
2

For all three modules, we have three test suite java classes.
1) CustomerModuleTestSuite.java is for customer module
2) BankModuleTestSuite.java is for bank module
3) TransactionsTestSuite.java is for transaction module

For all five groups, we have five XML testng configuration files,
1) functionalTestGroup.xml
2) customerTestGroup.xml
3) buildReleaseSanityTestGroup.xml
4) developmentPhaseTestGroup.xml
5) QATestGroup.xml
We can run any group or groups test cases, using these XML files with testng tool.

Source Code :
CustomerModuleTestSuite.java

package com.venkatajavasource.testng;

import org.testng.annotations.Test;

public class CustomerModuleTestSuite {
    @Test(groups={"functionalTestSuite","buildReleaseSanityTestSuite","QATestSuite"})
    public void testCase1() {
    	System.out.println("CustomerModuleTestSuite >> testCase1 ");
    }
    
    @Test(groups={"customerTestSuite","developmentPhaseTestSuite"})
    public void testCase2() {
    	System.out.println("CustomerModuleTestSuite >> testCase2 ");
    }
    
    @Test(groups={"functionalTestSuite","buildReleaseSanityTestSuite"})
    public void testCase3() {
        System.out.println("CustomerModuleTestSuite >> testCase3 ");
    }
}

BankModuleTestSuite.java

package com.venkatajavasource.testng;

import org.testng.annotations.Test;

public class BankModuleTestSuite {
	@Test(groups={"customerTestSuite","QATestSuite"})
    public void testCase4() {
    	System.out.println("BankModuleTestSuite >> testCase4 ");
    }
    
    @Test(groups={"functionalTestSuite","developmentPhaseTestSuite"})
    public void testCase5() {
    	System.out.println("BankModuleTestSuite >> testCase5 ");
    }
    
    @Test(groups={"buildReleaseSanityTestSuite", "developmentPhaseTestSuite"})
    public void testCase6() {
        System.out.println("BankModuleTestSuite >> testCase6 ");
    }
}

TransactionsTestSuite.java

package com.venkatajavasource.testng;

import org.testng.annotations.Test;

@Test(groups="QATestSuite")
public class TransactionsTestSuite {    

	@Test(groups={"developmentPhaseTestSuite"})
    public void testCase7() {
    	System.out.println("TransactionsTestSuite >> testCase7 ");
    }
    
    @Test(groups={"functionalTestSuite","buildReleaseSanityTestSuite"})
    public void testCase8() {
    	System.out.println("TransactionsTestSuite >> testCase8 ");
    }
    
    @Test(groups={"buildReleaseSanityTestSuite"})
    public void testCase9() {
        System.out.println("TransactionsTestSuite >> testCase9 ");
    }
    
    @Test(groups={"functionalTestSuite","customerTestSuite"})
    public void testCase10() {
        System.out.println("TransactionsTestSuite >> testCase10 ");
    }
}

Groups XML source code,
functionalTestGroup.xml

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite">	
	<test name="functionalTestGroup">
		<groups>
			<run>
				<include name="functionalTestSuite" />
			</run>
		</groups>
		<classes>
			<class name="com.venkatajavasource.testng.CustomerModuleTestSuite" />
			<class name="com.venkatajavasource.testng.BankModuleTestSuite" />
			<class name="com.venkatajavasource.testng.TransactionsTestSuite" />
		</classes>
	</test>
</suite>

customerTestGroup.xml

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite">	
	<test name="customerTestGroup">
		<groups>
			<run>
				<include name="customerTestSuite" />
			</run>
		</groups>
		<classes>
			<class name="com.venkatajavasource.testng.CustomerModuleTestSuite" />
			<class name="com.venkatajavasource.testng.BankModuleTestSuite" />
			<class name="com.venkatajavasource.testng.TransactionsTestSuite" />
		</classes>
	</test>
</suite>

buildReleaseSanityTestGroup.xml

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite">	
	<test name="buildReleaseSanityTestGroup">
		<groups>
			<run>
				<include name="buildReleaseSanityTestSuite" />				
			</run>
		</groups>
		<classes>
			<class name="com.venkatajavasource.testng.CustomerModuleTestSuite" />
			<class name="com.venkatajavasource.testng.BankModuleTestSuite" />
			<class name="com.venkatajavasource.testng.TransactionsTestSuite" />
		</classes>
	</test>
</suite>

developmentPhaseTestGroup.xml

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite">	
	<test name="developmentPhaseTestGroup">
		<groups>
			<run>
				<include name="developmentPhaseTestSuite" />
			</run>
		</groups>
		<classes>
			<class name="com.venkatajavasource.testng.CustomerModuleTestSuite" />
			<class name="com.venkatajavasource.testng.BankModuleTestSuite" />
			<class name="com.venkatajavasource.testng.TransactionsTestSuite" />
		</classes>
	</test>
</suite>

QATestGroup.xml

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite">	
	<test name="QATestGroup">
		<groups>
			<run>
				<include name="QATestSuite" />		
			</run>
		</groups>
		<classes>
			<class name="com.venkatajavasource.testng.CustomerModuleTestSuite" />
			<class name="com.venkatajavasource.testng.BankModuleTestSuite" />
			<class name="com.venkatajavasource.testng.TransactionsTestSuite" />
		</classes>
	</test>
</suite>

Demo :
Scenario 1:
We can run only functional test cases alone across the modules,
functionalTestCases

Right click on functionalTestGroup.xml and “Run As” -> “TestNG Suite”
eclipse
Out Put:
[TestNG] Running:
C:TestNGtestNGGroupfunctionalTestGroup.xml

CustomerModuleTestSuite >> testCase1
CustomerModuleTestSuite >> testCase3
BankModuleTestSuite >> testCase5
TransactionsTestSuite >> testCase10
TransactionsTestSuite >> testCase8

===============================================
Suite
Total tests run: 5, Failures: 0, Skips: 0
===============================================

1) functionalTestGroup.xml
2) customerTestGroup.xml
3) buildReleaseSanityTestGroup.xml
4) developmentPhaseTestGroup.xml
5) QATestGroup.xml

Scenario 2:
We can run combination of Customer specific and QA test cases across the modules,
customerAndQASpecific
customerAndQATestGroups.xml

<?xml version="1.0" encoding="UTF-8"?>
<suite name="Suite">	
	<test name="customerAndQATestGroups">
		<groups>
			<run>
			    <include name="QATestSuite" />
				<include name="customerTestSuite" />				
			</run>
		</groups>
		<classes>
			<class name="com.venkatajavasource.testng.CustomerModuleTestSuite" />
			<class name="com.venkatajavasource.testng.BankModuleTestSuite" />
			<class name="com.venkatajavasource.testng.TransactionsTestSuite" />
		</classes>
	</test>
</suite>

Right click on customerAndQATestGroups.xml, “Run As” -> “TestNG Suite”
Out Put :
[TestNG] Running:
C:TestNGtestNGGroupcustomerAndQATestGroups.xml

CustomerModuleTestSuite >> testCase1
CustomerModuleTestSuite >> testCase2
BankModuleTestSuite >> testCase4
TransactionsTestSuite >> testCase10
TransactionsTestSuite >> testCase7
TransactionsTestSuite >> testCase8
TransactionsTestSuite >> testCase9

===============================================
Suite
Total tests run: 7, Failures: 0, Skips: 0
===============================================

*** Venkat – Happy leaning ****