关于 testng-skill
testng-skill 为使用 TestNG 的 Java 开发者提供测试参考,汇集套件、数据提供器、并行执行、监听器、报告和 CI/CD 的示例与进阶指南。
主要功能
- 01测试、分组与数据提供器
- 02套件 XML 与并行执行
- 03软断言与监听器
- 04进阶配置和集成模式
- 05调试与最佳实践清单
适用场景
- 01将 Java 测试组织为可运行的分组
- 02使用数据集并行运行测试
- 03配置监听器、报告和 CI
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ lambdatest/ agent-skills --skill testng-skill安装后在 Claude Code 中输入/testng-skill确认已加载。
附带文件reference/advanced-patterns.mdreference/playbook.md
详细介绍
TestNG 测试技能
核心模式
带分组的基本测试
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);
}
TestNG XML 套件
<!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">
<suite parallel="classes" thread-count="5">
<suite parallel="tests" thread-count="5">
软断言
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
反模式
| 不佳做法 | 良好做法 | 原因 |
|---|---|---|
到处使用 dependsOnMethods | 独立测试 | 失败级联 |
| 没有分组 | @Test(groups = "smoke") | 无法运行部分测试 |
| 硬编码测试数据 | @DataProvider | 可复用 |
| 按优先级排序 | 独立测试 | 脆弱 |
快速参考
| 任务 | 命令 |
|---|---|
| 运行套件 | mvn test -DsuiteXmlFile=testng.xml |
| 运行分组 | mvn test -Dgroups=smoke |
| 运行类 | mvn test -Dtest=LoginTest |
| 报告 | test-output/index.html |
深入模式 → reference/playbook.md
| § | 部分 | 内容 |
|---|---|---|
| 1 | 项目设置与配置 | Maven + Surefire 配置 |
| 2 | 套件 XML 配置 | 多环境、并行、分组 |
| 3 | BaseTest 与线程安全驱动 | ThreadLocal、ConfigReader |
| 4 | 数据提供器(高级) | Excel、JSON、CSV、并行、跨类 |
| 5 | 工厂模式 | 跨浏览器矩阵 |
| 6 | 监听器(生产套件) | 重试、截图、计时 |
| 7 | 软断言与依赖 | 分组、方法依赖 |
| 8 | Page Object 集成 | PageFactory、流式 PO |
| 9 | 并行执行策略 | 方法/类/测试/混合 |
| 10 | 报告集成 | Allure、ExtentReports |
| 11 | CI/CD 集成 | GitHub Actions、Jenkins |
| 12 | 调试速查 | 12 个常见问题 |
| 13 | 最佳实践检查清单 | 14 项 |
评论
支持 Markdown