TestMu AI (formerly LambdaTest) logo

Skill

testng-skill

generate TestNG tests in Java

Covers Java Testing

Description

Generates TestNG tests in Java with groups, data providers, parallel execution, XML suite configuration, and listeners. Use when user mentions "TestNG", "@DataProvider", "testng.xml", "groups". Triggers on: "TestNG", "@DataProvider", "testng.xml", "TestNG suite", "parallel tests Java".

SKILL.md

TestNG Testing Skill

Core Patterns

Basic Test with Groups

import org.testng.annotations.*;
import org.testng.Assert;

public class LoginTest {
    @BeforeMethod
    public void setUp() { /* setup */ }

    @Test(groups = "smoke")
    public void testLoginSuccess() {
        Assert.assertTrue(loginService.login("user@test.com", "password123"));
    }

    @Test(groups = "regression", dependsOnMethods = "testLoginSuccess")
    public void testAccessDashboard() {
        Assert.assertNotNull(dashboard.getContent());
    }

    @Test(expectedExceptions = AuthenticationException.class)
    public void testLoginInvalidPassword() {
        loginService.login("user@test.com", "wrong");
    }

    @AfterMethod
    public void tearDown() { /* cleanup */ }
}

Data Providers

@DataProvider(name = "loginData")
public Object[][] loginData() {
    return new Object[][] {
        {"admin@test.com", "admin123", true},
        {"user@test.com", "password", true},
        {"invalid@test.com", "wrong", false},
    };
}

@Test(dataProvider = "loginData")
public void testLogin(String email, String password, boolean expected) {
    Assert.assertEquals(loginService.login(email, password), expected);
}

TestNG XML Suite

<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd">
<suite name="Regression" parallel="tests" thread-count="5">
  <test name="Smoke">
    <groups><run><include name="smoke"/></run></groups>
    <classes><class name="tests.LoginTest"/></classes>
  </test>
  <test name="Full">
    <groups><run><include name="regression"/><exclude name="flaky"/></run></groups>
    <packages><package name="tests.*"/></packages>
  </test>
</suite>

Parallel Execution

<suite parallel="methods" thread-count="5">   <!-- Method level -->
<suite parallel="classes" thread-count="5">    <!-- Class level -->
<suite parallel="tests" thread-count="5">      <!-- Test level -->

Soft Assertions

SoftAssert soft = new SoftAssert();
soft.assertEquals(user.getName(), "Alice");
soft.assertEquals(user.getAge(), 25);
soft.assertTrue(user.isActive());
soft.assertAll();  // Reports all failures at once

Listeners

public class TestListener implements ITestListener {
    @Override public void onTestFailure(ITestResult result) {
        System.out.println("Failed: " + result.getName());
        // Take screenshot, log, etc.
    }
}

@Listeners(TestListener.class)
public class LoginTest { /* ... */ }

Lifecycle Annotations

@BeforeSuite → @BeforeTest → @BeforeClass → @BeforeMethod → @Test → @AfterMethod → @AfterClass → @AfterTest → @AfterSuite

Anti-Patterns

BadGoodWhy
dependsOnMethods everywhereIndependent testsCascading failures
No groups@Test(groups = "smoke")Can't run subsets
Hard-coded test data@DataProviderReusable
Priority orderingIndependent testsFragile

Quick Reference

TaskCommand
Run suitemvn test -DsuiteXmlFile=testng.xml
Run groupmvn test -Dgroups=smoke
Run classmvn test -Dtest=LoginTest
Reportstest-output/index.html

Deep Patterns → reference/playbook.md

§SectionLines
1Project Setup & ConfigurationMaven + Surefire config
2Suite XML ConfigurationMulti-env, parallel, groups
3BaseTest & Thread-Safe DriverThreadLocal, ConfigReader
4Data Providers (Advanced)Excel, JSON, CSV, parallel, cross-class
5Factory PatternCross-browser matrix
6Listeners (Production Suite)Retry, screenshot, timing
7Soft Assertions & DependenciesGroups, method deps
8Page Object IntegrationPageFactory, fluent POs
9Parallel Execution StrategiesMethod/class/test/mixed
10Reporting IntegrationAllure, ExtentReports
11CI/CD IntegrationGitHub Actions, Jenkins
12Debugging Quick-Reference12 common problems
13Best Practices Checklist14 items

© 2026 YourAI.tools. Every skill from an identity-verified publisher.

Independent catalog. Not affiliated with, endorsed by, or sponsored by Anthropic or any listed publisher. All trademarks belong to their respective owners.