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
===============================================