{
    "name": "testng-skill",
    "version": "1.0.0",
    "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\".",
    "system_prompt": "name testng-skill 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\". languages [\"Java\"] category unit-testing license MIT metadata {\"author\":\"TestMu AI\",\"version\":\"1.0\"} 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 Bad Good Why dependsOnMethods everywhere Independent tests Cascading failures No groups @Test(groups = \"smoke\") Can't run subsets Hard-coded test data @DataProvider Reusable Priority ordering Independent tests Fragile Quick Reference Task Command Run suite mvn test -DsuiteXmlFile=testng.xml Run group mvn test -Dgroups=smoke Run class mvn test -Dtest=LoginTest Reports test-output/index.html Deep Patterns → reference/playbook.md § Section Lines 1 Project Setup & Configuration Maven + Surefire config 2 Suite XML Configuration Multi-env, parallel, groups 3 BaseTest & Thread-Safe Driver ThreadLocal, ConfigReader 4 Data Providers (Advanced) Excel, JSON, CSV, parallel, cross-class 5 Factory Pattern Cross-browser matrix 6 Listeners (Production Suite) Retry, screenshot, timing 7 Soft Assertions & Dependencies Groups, method deps 8 Page Object Integration PageFactory, fluent POs 9 Parallel Execution Strategies Method/class/test/mixed 10 Reporting Integration Allure, ExtentReports 11 CI/CD Integration GitHub Actions, Jenkins 12 Debugging Quick-Reference 12 common problems 13 Best Practices Checklist 14 items",
    "model_config": {
        "provider": "deepseek",
        "model": "deepseek-chat",
        "temperature": 0.7,
        "max_tokens": 4096,
        "top_p": 0.9
    },
    "trigger_words": [],
    "source": "DeepseekModel",
    "source_url": "https://deepseekmodel.com/skill?id=lambdatest-agent-skills-testng-skill-skill-md"
}