TestNG is one of the most widely used test automation frameworks for Java-based testing, especially with Selenium WebDriver. It provides powerful features such as test configuration, annotations, parallel execution, data-driven testing, test grouping, dependency management, and detailed reporting.
When building a scalable Selenium automation framework, TestNG helps testers organize test cases efficiently and execute automated tests with better control and flexibility.
Unlike traditional testing approaches where execution flow is rigid, TestNG allows automation engineers to define how tests should run, manage dependencies between tests, execute tests in parallel, and generate meaningful test reports.
Whether you are a beginner learning Selenium automation testing or an experienced QA engineer building an enterprise-level automation framework, understanding TestNG is essential.
What is TestNG?
TestNG (Test Next Generation) is an open-source testing framework inspired by JUnit and NUnit. It was created by Cedric Beust to overcome limitations of existing Java testing frameworks and provide advanced testing capabilities.
TestNG is mainly used for:
- Selenium WebDriver automation testing
- Unit testing
- Functional testing
- Integration testing
- Regression testing
- End-to-end automation testing
The name “TestNG” represents Test Next Generation, highlighting its enhanced features compared to older testing frameworks.
Why Use TestNG with Selenium?
Selenium WebDriver only provides browser automation capabilities. It does not provide features required for managing and executing large test suites.
TestNG fills this gap by providing:
- Test execution management
- Test lifecycle control
- Assertions
- Test grouping
- Parallel execution
- Parameterization
- Reporting
- Dependency handling
A typical Selenium automation stack looks like:
Java |Selenium WebDriver |TestNG |Maven / Gradle |Jenkins CI/CD |Reports
Using Selenium with TestNG allows teams to build maintainable and scalable automation frameworks.
Features of TestNG Framework
1. TestNG Annotations
Annotations are one of the most important features of TestNG.
They control when and how test methods execute.
Common TestNG annotations include:
| Annotation | Purpose |
|---|---|
| @Test | Defines a test method |
| @BeforeMethod | Executes before every test method |
| @AfterMethod | Executes after every test method |
| @BeforeClass | Executes before the first method in a class |
| @AfterClass | Executes after all methods in a class |
| @BeforeSuite | Executes before the entire test suite |
| @AfterSuite | Executes after the entire test suite |
| @BeforeTest | Executes before a test tag in XML |
| @AfterTest | Executes after a test tag in XML |
Example:
import org.testng.annotations.Test;public class LoginTest { @Test public void verifyLogin() { System.out.println("Login test executed"); }}
TestNG Architecture
The TestNG execution flow follows this hierarchy:
Suite |Test |Class |Methods |@Test
Example:
<suite name="Automation Suite"> <test name="Regression Tests"> <classes> <class name="LoginTest"/> </classes> </test></suite>
A TestNG suite can contain multiple tests, classes, and methods.
Installing TestNG
Prerequisites
Before using TestNG, install:
- Java Development Kit (JDK)
- Eclipse / IntelliJ IDEA
- Maven
- Selenium WebDriver
Adding TestNG Dependency Using Maven
Add the following dependency in your pom.xml:
<dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>7.10.2</version> <scope>test</scope></dependency>
After adding the dependency, update Maven dependencies.
First TestNG Program
Example Selenium TestNG script:
import org.openqa.selenium.WebDriver;import org.openqa.selenium.chrome.ChromeDriver;import org.testng.annotations.Test;public class GoogleTest { @Test public void openGoogle() { WebDriver driver = new ChromeDriver(); driver.get("https://www.google.com"); System.out.println(driver.getTitle()); driver.quit(); }}
Understanding TestNG Annotations in Detail
@Test Annotation
The @Test annotation marks a method as a test case.
Example:
@Testpublic void searchProduct(){ System.out.println("Searching product");}
Before and After Annotations
TestNG provides setup and cleanup methods.
Example:
@BeforeMethodpublic void setup(){ System.out.println("Browser launched");}@Testpublic void testLogin(){ System.out.println("Login executed");}@AfterMethodpublic void tearDown(){ System.out.println("Browser closed");}
Execution:
Setup |Test |Cleanup
TestNG Assertions
Assertions validate expected and actual results.
Common assertions:
- Assert.assertEquals()
- Assert.assertTrue()
- Assert.assertFalse()
- Assert.assertNotNull()
Example:
Assert.assertEquals(actualTitle, expectedTitle);
Assertions help determine whether an automated test passes or fails.
TestNG Test Suite XML
TestNG uses testng.xml to control test execution.
Example:
<suite name="Regression Suite"> <test name="Login Tests"> <classes> <class name="tests.LoginTest"/> </classes> </test></suite>
Benefits of testng.xml:
- Execute selected tests
- Configure parallel execution
- Pass parameters
- Organize test suites
TestNG Groups
Test groups allow testers to categorize test cases.
Example:
@Test(groups={"smoke"})public void loginTest(){}
Execute only smoke tests:
<groups><select><group name="smoke"/></select></groups>
Common groups:
- Smoke Testing
- Regression Testing
- Sanity Testing
- Integration Testing
Data Driven Testing Using TestNG
TestNG supports data-driven testing using @DataProvider.
Example:
@DataProvider(name="loginData")public Object[][] getData(){return new Object[][]{{"user1","password1"},{"user2","password2"}};}@Test(dataProvider="loginData")public void loginTest(String username,String password){System.out.println(username);}
Benefits:
- Execute same test with multiple datasets
- Reduce duplicate code
- Improve test coverage
TestNG Parameterization
Parameters can be passed from XML files.
Example:
<parameter name="browser" value="chrome"/>
Java:
@Parameters("browser")@Testpublic void launchBrowser(String browser){System.out.println(browser);}
Parallel Test Execution in TestNG
One of the biggest advantages of TestNG is parallel execution.
Example:
<suite name="ParallelSuite" parallel="tests"><test name="Chrome Test"></test><test name="Firefox Test"></test></suite>
Benefits:
- Faster execution
- Reduced regression testing time
- Better CI/CD efficiency
TestNG Reports
TestNG automatically generates execution reports.
Default reports include:
- HTML reports
- XML reports
- Emailable reports
Popular reporting integrations:
- Extent Reports
- Allure Reports
- ReportNG
TestNG Listeners
Listeners allow customization of test execution behavior.
Common listeners:
- ITestListener
- ISuiteListener
- IInvokedMethodListener
Example uses:
- Capture screenshots on failure
- Generate custom reports
- Log execution details
TestNG with Maven
Maven helps manage dependencies and execute TestNG tests.
Run tests:
mvn test
Configure TestNG suite:
<suiteXmlFiles><suiteXmlFile>testng.xml</suiteXmlFile></suiteXmlFiles>
TestNG with Jenkins CI/CD
TestNG integrates easily with Jenkins pipelines.
Typical automation pipeline:
Developer Commit | ↓Jenkins Build | ↓Maven Test Execution | ↓TestNG Reports | ↓Notifications
Benefits:
- Continuous testing
- Faster feedback
- Automated regression execution
Best Practices for Using TestNG
Follow these practices when building automation frameworks:
1. Maintain Proper Test Organization
Separate:
- Test classes
- Page objects
- Utilities
- Configuration files
2. Use Meaningful Test Names
Good:
verifyLoginWithValidCredentials()
Avoid:
test1()
3. Avoid Hardcoding Test Data
Use:
- Excel files
- JSON
- Properties files
- Database connections
4. Use Page Object Model
Combine TestNG with Selenium Page Object Model for maintainable automation frameworks.
Common TestNG Interview Questions
What is TestNG?
TestNG is a Java testing framework used for unit, functional, and Selenium automation testing.
Why use TestNG with Selenium?
Because Selenium manages browsers while TestNG manages test execution, reporting, and organization.
Difference between @BeforeTest and @BeforeMethod?
@BeforeTest runs once before all methods inside a <test> tag.
@BeforeMethod runs before every test method.
How do you run tests in parallel using TestNG?
Configure parallel execution in testng.xml.
What is DataProvider in TestNG?
DataProvider enables data-driven testing by passing multiple datasets to test methods.
Frequently Asked Questions About TestNG
Is TestNG required for Selenium?
No, Selenium can work without TestNG, but TestNG provides better test management and reporting capabilities.
Is TestNG only used with Selenium?
No. TestNG can be used for unit testing, API testing, integration testing, and other Java-based automation projects.
Can TestNG execute tests in parallel?
Yes. TestNG supports parallel execution using XML configuration.
Recommended TestNG Learning Path
Follow this order to master TestNG:
- Understand TestNG architecture
- Learn TestNG annotations
- Create test suites
- Learn assertions
- Understand groups
- Implement DataProvider
- Learn parallel execution
- Integrate reports
- Connect with Maven
- Execute through Jenkins
Conclusion
TestNG is a powerful testing framework that helps automation engineers build reliable, scalable, and maintainable test automation solutions.
When combined with Selenium WebDriver, Maven, reporting tools, and CI/CD platforms, TestNG becomes a complete solution for modern automation testing requirements.
Mastering TestNG is an essential step for anyone building a career in Selenium automation testing.