TestNG annotations with examples.
TestNG is an automation testing framework which use to handle the automation scripts.
Below are the list of TestNG annotations with examples @BeforeSuite
The method below this annotation will run before the execution of all the test methods in the suite.
@AfterSuite
The method below annotation will run after the execution of all the test methods in the suite.
@BeforeTest
The method below this annotation will execute before the execution of all the test methods of available classes belonging to that folder.
@AfterTest
The method below this annotation will execute after the execution of all the test methods of available classes belonging to that folder.
@BeforeClass
The method below this annotation will execute before the first method of the current class is invoked.
@AfterClass
This method below this annotation will invoke after the execution of all the test methods of the current class.
@BeforeMethod
The method below this annotation will execute before each test method will run.
@AfterMethod
The method below this annotation will run after the execution of each test method.
Java Code-
public class Testing_testNGAnnotation {
@BeforeSuite
public void beforeSuite_testNG(){
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@BeforeClass
public void beforeClass_testNG(){
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@BeforeMethod
public void beforeMethod_testNG(){
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@BeforeTest
public void beforeTest_testNG(){
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@Test
public void testNG1(){
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@Test
public void testNG2(){
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@AfterTest
public void afterTest_testNG(){
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@AfterMethod
public void afterMethod_testNG(){
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@AfterClass
public void afterClass_testNG(){
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@AfterSuite
public void afterSuite_testNG(){
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
}
XML Code-
<?xml version="1.0" encoding="UTF-8"?> <suite name="group"> <test name= "name"> <classes> <class name="org.Testngpro.Testing_testNGAnnotation"></class> </classes> </test> </suite>
Output-
[RemoteTestNG] detected TestNG version 7.4.0 Method name is :beforeSuite_testNG Method name is :beforeTest_testNG Method name is :beforeClass_testNG Method name is :beforeMethod_testNG Method name is :testNG1 Method name is :afterMethod_testNG Method name is :beforeMethod_testNG Method name is :testNG2 Method name is :afterMethod_testNG Method name is :afterClass_testNG Method name is :afterTest_testNG Method name is :afterSuite_testNG =============================================== group Total tests run: 2, Passes: 2, Failures: 0, Skips: 0 ===============================================
@BeforeGroups
This annotation method run only once for a group before the execution of all test cases belonging to that group.
@AfterGroups
This annotation method run only once for a group after the execution of all test cases belonging to that group.
Java Code-
public class Testing_beforeAfterGroup {
@BeforeGroups("testNG")
public void beforeGroup_testNG()
{
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@Test(groups= {"automation"})
public void testNG1()
{
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@Test(groups= {"selenium"})
public void testNG2()
{
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@Test(groups= {"testNG"})
public void testNG3()
{
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@AfterGroups("selenium")
public void afterGroup_testNG()
{
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
}
XML Code-
<?xml version="1.0" encoding="UTF-8"?>
<suite name="group">
<test name= "name">
<groups>
<run>
<include name= "testNG"></include>
<include name= "selenium"></include>
</run>
</groups>
<classes>
<!-- <class name="org.Testngpro.Testing_Grouping"></class>-->
<class name="org.Testngpro.Testing_beforeAfterGroup"></class>
</classes>
</test>
</suite>
Output-
[RemoteTestNG] detected TestNG version 7.4.0 [TestNGContentHandler] [WARN] It is strongly recommended to add "" at the top of the suite file [F:\eclipse\Practice_2022\TestNGMethod\Group.xml] otherwise TestNG may fail or not work as expected. Method name is :testNG2 Method name is :afterGroup_testNG Method name is :beforeGroup_testNG Method name is :testNG3 =============================================== group Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
In above example- Beforegroup executed before it’s group method and aftergroup get executed after it’s group method get executed.
Related topic :-
@Factory Annotation
This annotation is used to invoke methods from multiple classes. In below example, we have invoked 2 different classes methods by calling those classes.
Java Code-
public class Testing_Factory {
@Factory
public Object[] getTestClasses()
{
Object tests[]=new Object[2];
tests[0]=new Testing_Ignore();
tests[1]=new Testing_Enabled();
return tests;
}
}
Outcome-
[RemoteTestNG] detected TestNG version 7.4.0
Method name is :testNG1
Method name is :testNG1
PASSED: testNG1
PASSED: testNG1
===============================================
Default test
Tests run: 2, Failures: 0, Skips: 0
===============================================
===============================================
Default suite
Total tests run: 2, Passes: 2, Failures: 0, Skips: 0
===============================================
@Ignore Annotation
This annotation is used to ignore the method.
Java Code-
public class Testing_Ignore {
@Test
public void testNG1()
{
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
@Ignore
@Test
public void testNG2()
{
String methodName = new Object(){}.getClass().getEnclosingMethod().getName();
System.out.println("Method name is :"+methodName);
}
}
Outcome-
[RemoteTestNG] detected TestNG version 7.4.0
Method name is :testNG1
PASSED: testNG1
===============================================
Default test
Tests run: 1, Failures: 0, Skips: 0
===============================================
===============================================
Default suite
Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
===============================================