testng-configuration

In TestNG, we can use the following annotations to do the configuration for your test class, like setup / clean a database, preparing the dummy data, deploy / shut down the server and etc.

@BeforeSuite - For suite test, run before all tests in this suite have run. 
@AfterSuite -  For suite test, run after all tests in this suite have run.
 
@BeforeTest - For suite test, run before any test method belonging to the classes inside the <test> tag is run. 
@AfterTest - For suite test, run after all the test methods belonging to the classes inside the <test> tag have run. 
 
@BeforeGroups: Run before the first test method that belongs to the group is invoked. 
@AfterGroups: Run after the last test method that belongs to the groups is invoked. 
 
@BeforeClass - Run before the first test method in the current class is invoked. 
@AfterClass - Run after all the test methods in the current class have been run. 
 
@BeforeMethod - Run before each test method. 
@AfterMethod - Run after each test method.

P.S Suite test – Run multiple test classes together.

Review the following examples to see the execution order – which method is called first, and which is next.

1. Single Test Class

Running a single test case, show the use of before/after group, class and method.

TestConfiguration.java
package com.mkyong.testng.examples.configuration;
 
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
 
public class TestConfiguration {
 
	@BeforeGroups("shopping")
	public void beforeGroups() {
		System.out.println("@BeforeGroups");
	}
 
	@AfterGroups("shopping")
	public void afterGroups() {
		System.out.println("@AfterGroups");
	}
 
	@BeforeClass
	public void beforeClass() {
		System.out.println("@BeforeClass");
	}
 
	@AfterClass
	public void afterClass() {
		System.out.println("@AfterClass");
	}
 
	@BeforeMethod
	public void beforeMethod() {
		System.out.println("@BeforeMethod");
	}
 
	@AfterMethod
	public void afterMethod() {
		System.out.println("@AfterMethod");
	}
 
	@Test(groups = "shopping")
	public void runTest1() {
		System.out.println("@Test - runTest1");
	}
 
	@Test
	public void runTest2() {
		System.out.println("@Test - runTest2");
	}
}

Output

 
@BeforeClass 
 
@BeforeGroups 
@BeforeMethod 
@Test - runTest1
@AfterMethod  
@AfterGroups  
 
@BeforeMethod
@Test - runTest2
@AfterMethod
 
@AfterClass
 
PASSED: runTest1
PASSED: runTest2
 
===============================================
    Default test
    Tests run: 2, Failures: 0, Skips: 0
===============================================

2. Suite Test Classes

Create 2 more test classes to show the use of before/after suite and test.

DBConfig.java
package com.mkyong.testng.examples.configuration;
 
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
 
public class DBConfig {
 
	@BeforeSuite()
	public void beforeSuite() {
		System.out.println("@BeforeSuite");
	}
 
	@AfterSuite()
	public void afterSuite() {
		System.out.println("@AfterSuite");
	}
 
	@BeforeTest()
	public void beforeTest() {
		System.out.println("@BeforeTest");
	}
 
	@AfterTest()
	public void afterTest() {
		System.out.println("@AfterTest");
	}
 
}
TestDBConnection.java
package com.mkyong.testng.examples.configuration;
 
import org.testng.annotations.Test;
 
public class TestDBConnection {
 
	@Test
	public void runOtherTest1() {
		System.out.println("@Test - runOtherTest1");
	}
 
	@Test
	public void runOtherTest2() {
		System.out.println("@Test - runOtherTest2");
	}
 
}

Create an XML file to run multiple test cases together. Read the XML comments for self-explanatory.

testng.xml
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
 
<!-- @BeforeSuite -->
<suite name="TestAll">
 
	<!-- @BeforeTest -->
	<test name="case1">
	  <classes>
		<class name="com.mkyong.testng.examples.configuration.TestConfiguration" />
		<class name="com.mkyong.testng.examples.configuration.TestDBConnection" />
		<class name="com.mkyong.testng.examples.configuration.DBConfig" />
	  </classes>
	</test>
	<!-- @AfterTest -->
 
	<!-- @BeforeTest -->
	<test name="case2">
	  <classes>
		<class name="com.mkyong.testng.examples.configuration.TestDBConnection" />
		<class name="com.mkyong.testng.examples.configuration.DBConfig" />
	  </classes>
	</test>
	<!-- @AfterTest -->
 
</suite>
<!-- @AfterSuite -->

Output

 
@BeforeSuite
 
@BeforeTest		//Start {case1}
@BeforeClass
@BeforeGroups
@BeforeMethod
@Test - runTest1
@AfterMethod
@AfterGroups
@BeforeMethod
@Test - runTest2
@AfterMethod
@AfterClass
@Test - runOtherTest1
@Test - runOtherTest2
@AfterTest		//End {case1}
 
 
@BeforeTest		//Start {case2}
@Test - runOtherTest1
@Test - runOtherTest2
@AfterTest		//End {case2}
 
@AfterSuite
 
===============================================
TestAll
Total tests run: 6, Failures: 0, Skips: 0
===============================================

Done.

References

  1. TestNG Documentation
  2. TestNG – Run Multiple Test Classes (Suite Test)
Tags :
< PreviousNext >
TestNG Hello World ExampleIndexTestNG – Expected Exception Test
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider making a donation to the charity, thanks.

Related Posts

Popular Posts