bundled-skills/testng-skill/SKILL.md
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".
npx skillsauth add FrancoStino/opencode-skills-antigravity testng-skillInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill when you need 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".
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("[email protected]", "password123"));
}
@Test(groups = "regression", dependsOnMethods = "testLoginSuccess")
public void testAccessDashboard() {
Assert.assertNotNull(dashboard.getContent());
}
@Test(expectedExceptions = AuthenticationException.class)
public void testLoginInvalidPassword() {
loginService.login("[email protected]", "wrong");
}
@AfterMethod
public void tearDown() { /* cleanup */ }
}
@DataProvider(name = "loginData")
public Object[][] loginData() {
return new Object[][] {
{"[email protected]", "admin123", true},
{"[email protected]", "password", true},
{"[email protected]", "wrong", false},
};
}
@Test(dataProvider = "loginData")
public void testLogin(String email, String password, boolean expected) {
Assert.assertEquals(loginService.login(email, password), expected);
}
<!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>
<suite parallel="methods" thread-count="5"> <!-- Method level -->
<suite parallel="classes" thread-count="5"> <!-- Class level -->
<suite parallel="tests" thread-count="5"> <!-- Test level -->
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
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 { /* ... */ }
@BeforeSuite → @BeforeTest → @BeforeClass → @BeforeMethod → @Test → @AfterMethod → @AfterClass → @AfterTest → @AfterSuite
| 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 |
| 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 |
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 |
data-ai
Snapshot a site's SEO state and detect ranking, indexation, metadata, canonical, robots, schema, and on-page regressions over time.
development
Coordinate focused subagents on substantial work, keep their ownership non-overlapping, and integrate verified results. Use for large-scope Codex tasks; keep trivial work with the coordinator.
data-ai
Use when an owner asks to find a cofounder or project partner. Assess only that agent's own owner and rank only approved profiles other agents posted for their own owners.
devops
Install, configure, verify, repair, update, and uninstall Hyprland on Fedora Linux with GPU-aware detection (NVIDIA/AMD/Intel).