TestNG

TestNG is a powerful testing framework for Java that provides advanced features beyond JUnit. It supports data-driven testing, parallel execution, flexible test configuration, and comprehensive reporting. TestNG uses annotations to define test methods and offers features like test groups, dependencies, parameters, and listeners. It's particularly well-suited for integration testing, functional testing, and complex test scenarios with its XML-based configuration and advanced test management capabilities. Checkout simple TestNG.
Generate XML Report
TestNG automatically generates XML reports by default. You can configure additional reporting options using Maven Surefire or Gradle plugins.
Maven Configuration
Configure Maven Surefire plugin in your pom.xml
:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
<reportFormat>xml</reportFormat>
<reportsDirectory>${project.build.directory}/surefire-reports</reportsDirectory>
</configuration>
</plugin>
Gradle Configuration
Configure TestNG in your build.gradle
:
test {
useTestNG() {
suites 'src/test/resources/testng.xml'
}
reports {
junitXml.enabled = true
junitXml.destination = file("$buildDir/test-results/test")
}
testLogging {
events "passed", "skipped", "failed"
}
}
dependencies {
testImplementation 'org.testng:testng:7.8.0'
}
TestNG XML Suite Configuration
Create a testng.xml
file in src/test/resources/
:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="TestSuite" verbose="1">
<test name="TestNGTests">
<classes>
<class name="com.example.tests.SampleTest"/>
</classes>
</test>
</suite>
Install Tacotruck CLI
$ npm install -g @testfiesta/tacotruck
Submit Test Results
tacotruck testfiesta \
run:submit \
--token testfiesta_... \
--handle orgHandle \
--project projectKey \
--name runName \
--data target/surefire-reports/*.xml
GitHub Action
name: testng-tests
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Cache Maven dependencies
uses: actions/cache@v3
with:
path: ~/.m2
key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
restore-keys: ${{ runner.os }}-m2
- name: 🧪 Run TestNG Tests
run: mvn clean test
- name: Report Results
if: always()
uses: testfiesta/tacotruck-action@v1
with:
provider: testfiesta
handle: handle
project: project
base-url: https://api.testfiesta.com
credentials: ${{ secrets.TESTFIESTA_API_KEY }}
run-name: TestNG CI run ${{ github.run_number }}
results-path: ./target/surefire-reports/*.xml
Gradle GitHub Action
For Gradle projects, use this configuration instead:
name: testng-gradle-tests
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/gradle-build-action@v2
- name: 🧪 Run TestNG Tests
run: ./gradlew test
- name: Report Results
if: always()
uses: testfiesta/tacotruck-action@v1
with:
provider: testfiesta
handle: handle
project: project
base-url: https://api.testfiesta.com
credentials: ${{ secrets.TESTFIESTA_API_KEY }}
run-name: TestNG Gradle CI run ${{ github.run_number }}
results-path: ./build/test-results/test/*.xml
TestNG Parallel Execution
TestNG supports parallel test execution. Configure in your testng.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<suite name="ParallelTestSuite" parallel="methods" thread-count="3">
<test name="ParallelTests">
<classes>
<class name="com.example.tests.ParallelTest"/>
</classes>
</test>
</suite>
Or configure parallel execution in Maven:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<parallel>methods</parallel>
<threadCount>3</threadCount>
<suiteXmlFiles>
<suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
Support and Resources
Last updated