There are questions and answers on this page from TestNG that can help both new graduates and experienced workers get their dream job.
TestNG is one of the most popular open-source Java testing frameworks used by software testers for test automation With powerful annotations, testing configurations, parallel execution support, and rich reporting, TestNG simplifies the test automation process
If you have an upcoming job interview for a test automation role involving TestNG, you need to be well-prepared to impress the interviewers. This comprehensive guide covers the top TestNG interview questions that hiring managers commonly ask with sample answers to help you ace your next job interview.
What is TestNG?
TestNG is a testing framework designed to simplify Java test automation. Inspired by JUnit, it was developed by Cédric Beust and released under the Apache 2.0 license in 2004.
Here are some key features of TestNG
- Annotations – Easy annotations like @Test, @BeforeMethod, @AfterClass etc. to configure tests.
- Test Fixtures – Support for writing test setup and tear down code via annotations.
- Dependent Tests – Ability to define dependencies between test methods.
- Grouping – Group test classes and methods into suites.
- Parameterization – Parameterize test methods to run with different inputs.
- Parallel Execution – Tests can run in parallel for speed.
- Extensive Reporting – Default HTML reports as well as integration with reporting frameworks.
In a nutshell, TestNG makes writing, managing, and executing automated tests much easier through its powerful capabilities.
What are some key advantages of using TestNG over JUnit?
Here are some major advantages of using TestNG over JUnit:
- Annotations are easier to use in TestNG compared to JUnit.
- Supports test fixtures like @BeforeMethod, @AfterClass etc. which JUnit lacks.
- TestNG allows grouping test cases into test suites while JUnit does not have this feature.
- Parallel test execution is supported in TestNG but not in JUnit.
- TestNG provides detailed HTML reports for analyzing test results.
- Dependencies can be defined between test methods in TestNG.
- Supports parameterization of test cases easily.
- TestNG is more flexible and extensible through listeners API.
What are the different annotations used in TestNG?
Some commonly used TestNG annotations include:
- @Test – Marks a method as a test case
- @BeforeMethod – Runs before each test method
- @AfterMethod – Runs after each test method
- @BeforeClass – Runs before each test class once
- @AfterClass – Runs after each test class once
- @BeforeTest – Runs before all tests in <test> tag
- @AfterTest – Runs after all tests in <test> tag
- @BeforeSuite – Runs before all tests in <suite> tag
- @AfterSuite – Runs after all tests in <suite> tag
- @DataProvider – Marks methods as test data providers
- @Test(dataProvider) – Consumes data from methods marked with @DataProvider
How does TestNG identify test methods?
TestNG identifies test methods in two ways:
-
Using @Test annotation – Any method annotated with @Test is treated as a test method.
-
Name conventions – Even without @Test annotation, TestNG can identify test methods. By default, any method starting with “test” is treated as a test method.
So in TestNG, its optional to use @Test annotation. Test methods can be defined just by naming conventions.
What is the typical code structure of a TestNG test?
A TestNG test class typically has the following components:
- Import statements for TestNG annotations
- Class decorated with TestNG annotations like @Test, @BeforeMethod etc.
- A public no-args constructor
- Test setup methods annotated with @BeforeMethod, @BeforeClass etc.
- Test methods annotated with @Test
- Test teardown methods annotated with @AfterMethod, @AfterClass etc.
- Any helper methods needed by the tests
Here is a sample:
import org.testng.annotations.*;public class MyTest { @BeforeSuite public void setupSuite() { // suite setup } @BeforeMethod public void setupTest() { // prepare for each test } @Test public void testOne() { // Test 1 } @Test public void testTwo() { // Test 2 } @AfterMethod public void cleanup() { // cleanup after each test }}
This structure allows logically organizing tests with modular setup/teardown.
How does TestNG find and execute tests?
TestNG provides a test runner that can automatically find and execute tests. The typical steps are:
- Locate classes with TestNG annotations in the codebase
- Identify methods annotated with @Test
- Run @Before* setup annotations before running tests
- Execute @Test methods
- Run @After* teardown annotations after test completion
- Aggregate and present results in a test report
The test runner can be invoked from the command-line, Ant, Maven, Eclipse/IDEA plugins or programatically via TestNG APIs.
How do you execute a TestNG test?
Here are some common ways to execute TestNG tests:
1. Using IDEs like Eclipse and IntelliJ
Install the TestNG plugin and right click + Run As -> TestNG Test
2. From build tools like Maven and Gradle
Add TestNG dependency and use Maven Surefire or Gradle Test task.
3. From the command line
Use the testng
command and pass the path to your test classes.
4. Programmatically
Create a TestNG object, add the test classes and invoke run()
.
What is an ITestListener in TestNG?
ITestListener is an interface provided by TestNG to implement custom event listeners for test runs. By implementing ITestListener, you can track the status and results of test methods and react to test events.
Some important methods in ITestListener are:
onTestStart()
– Called before a test method is executedonTestSuccess()
– Called when a test passesonTestFailure()
– Called when a test failsonTestSkipped()
– Called when a test is skippedonTestFailedButWithinSuccessPercentage()
– Called when a test fails within success percentage
Listeners allow adding logging, reporting, screenshots and other custom behavior to TestNG through event callbacks.
What is the difference between ITestListener and IAnnotationTransformer?
ITestListener is used for adding behavior to a TestNG test run via event callbacks.
IAnnotationTransformer allows modifying or adapting TestNG annotations at runtime before tests are run.
For example, you can use IAnnotationTransformer to add a new @Test annotation or change priority of @Test methods dynamically at runtime.
What is the default report generated by TestNG?
By default, TestNG generates an HTML report called emailable-report.html
in the test output folder.
The report contains details like:
- List of test suites and their tests
- Number of tests passed, failed, skipped
- Stack trace and cause of failure for failed tests
- Summary table of all tests with their runtime, status and more
The HTML report provides a quick and easy way to analyze test run results.
How can you generate custom reports in TestNG?
Here are some ways to generate custom reports with TestNG:
- Extend TestNG’s default HTML reporter
- Implement ITestListener to generate custom reports
- User ReportNG open source reporting library
- Integrate with Allure, ExtentReports and other third-party reporting tools
- Custom JUnit XML ant task to transform results into custom formats
So TestNG provides a lot of flexibility to generate rich, customized reports as needed.
What is a data provider in TestNG?
A data provider in TestNG is a method that provides test data for a test method. It allows separating test data from test logic for easier test maintenance.
Here are some key characteristics of data providers:
- Annotated with @DataProvider
- Returns Object[][] or Iterator<Object[]>
- Accepted by test methods via @Test(dataProvider)
- Allows passing multiple values to a @Test method for data driven testing
- Helps write reusable parameterized test cases
Data providers enable writing concise, powerful yet readable parameterized tests.
Explain the features of TestNG for dependency testing?
TestNG provides a few different ways to implement dependency testing:
dependsOnMethods
Use @Test(dependsOnMethods = { "testLogin" })
to define a test method dependency on completion of other methods.
dependsOnGroups
@Test(dependsOnGroups = { "accounts-tests" })
makes a test depend on a group.
dependsOnConditions
Lambda expressions can define dynamic dependencies @Test(dependsOn = "dependsOnCondition() )
List out various ways in which TestNG can be invoked.
TestNG can be invoked in different ways like
- Using Eclipse
- With ant
- From the command line
- Using IntelliJ’s IDEA
What does the “suite test” does in TestNG?
You use “Suite Test” to run several unit tests at once. This unit test is part of the “Suite Test” group. An XML file is used to run the suite test.
TestNG Interview Questions and Answers || TestNG Framework Interview Questions
FAQ
Why is TestNG used in Selenium?
How many types of annotations are there in TestNG?
How do I stop a test case from running using TestNG?