testng-skill について
testng-skillは、TestNGを使うJava開発者向けのテスト資料です。スイート、データプロバイダー、並列実行、リスナー、レポート、CI/CDの例と応用ガイドをまとめています。
主な機能
- 01テスト、グループ、データプロバイダー
- 02スイートXMLと並列実行
- 03ソフトアサーションとリスナー
- 04応用設定と統合パターン
- 05デバッグとベストプラクティスの一覧
活用シーン
- 01Javaテストを実行可能なグループに整理
- 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 | ページオブジェクトの統合 | PageFactory、流れるような API を備えた PO |
| 9 | 並列実行の戦略 | メソッド/クラス/テスト/混合 |
| 10 | レポートの統合 | Allure、ExtentReports |
| 11 | CI/CD の統合 | GitHub Actions、Jenkins |
| 12 | デバッグのクイックリファレンス | よくある問題 12 件 |
| 13 | ベストプラクティスのチェックリスト | 14 項目 |
コメント
Markdown 対応