トップ50 TestNG インタビューの質問と回答 (2026)

の準備 TestNG 面接ですか?自分の強みをアピールできる質問を考えてみましょう。 TestNG 面接の基礎は、採用チームが重視する深み、自信、準備を明らかにします。
この分野における機会は、自動化の発展、フレームワークの進化、そして技術的かつ専門的な経験を必要とする実用的なテストアプリケーションにまで及びます。この分野で働くには、専門知識、分析スキル、そして新入社員、中堅社員、そしてシニアレベルのプロフェッショナルが、技術レベル、基本レベル、そして高度なレベルに至るまで、よくある質問とその回答を解くのに役立つ柔軟なスキルセットが求められます。 続きを読む...
👉 無料の PDF ダウンロード: TestNG インタビューの質問と回答
Top TestNG インタビューの質問と回答
1)とは TestNG なぜ自動テストで使用されるのでしょうか?
TestNG (Test Next Generation)は、 JUnit NUnitをベースに、グループ化、シーケンス処理、パラメータ化、依存関係管理といった高度な機能が追加されています。主に自動テストにおいて、テスト実行の効率化、テスト構成の改善、詳細なHTMLおよびXMLレポートの生成に使用されます。
の主な利点 TestNG 次のとおりです。
- お客様サポート 並列テスト実行、合計実行時間を短縮します。
- 提供 アノテーション テストフローを効果的に制御します。
- オファー データ駆動型テスト を通して以下のようなさまざまな
@DataProvider注釈。 - 生成 カスタマイズ可能なレポート デバッグを向上させるため。
たとえば、 TestNG テスト コードを変更することなく、スモーク テスト、回帰テスト、統合テスト グループを個別に実行できるため、大規模な自動化スイートで柔軟性と拡張性が得られます。
2) 説明 TestNG アノテーションとその実行順序を含むライフサイクル。
私達の TestNG ライフサイクルは、テストの初期化、実行、終了方法を定義します。これは、テストフローに構造と明確さを与えるアノテーションによって制御されます。
| アノテーション | 詳細説明 | 実行順序 |
|---|---|---|
@BeforeSuite |
スイート内のすべてのテストの前に実行されます | 1 |
@BeforeTest |
実行前に <test> XMLのタグ |
2 |
@BeforeClass |
現在のクラスの最初のメソッドの前に実行されます | 3 |
@BeforeMethod |
各テストメソッドの前に実行されます | 4 |
@Test |
実際のテストロジックが含まれています | 5 |
@AfterMethod |
各テストメソッドの後に実行される | 6 |
@AfterClass |
クラス内のすべてのメソッドの後に実行されます | 7 |
@AfterTest |
追いかける <test> XMLのタグ |
8 |
@AfterSuite |
スイート内のすべてのテストの後に実行します | 9 |
この構造化された順序により、テストのセットアップとティアダウンが予測可能になり、テストの独立性を維持するために重要になります。
3) どのように TestNG とは異なる JUnit?
どちらのフレームワークもユニットテストに使用されますが、 TestNG より堅牢な構成と並列実行機能を提供します。
| 機能 | JUnit | TestNG |
|---|---|---|
| 並列実行 | 限定サポート | フルサポート |
| 注釈 | 少ない (@Before, @After) |
よりリッチ(@BeforeSuite, @DataProvider) |
| 依存関係管理 | 無し | 利用可能 dependsOnMethods |
| グループ化 | サポートされていません | サポートされている groups |
| パラメータ化 | 外部ランナーを通じて | XMLまたは @DataProvider |
要約すれば、 TestNG に好ましい エンタープライズレベルの自動テスト 次のようなツールとの統合 Selenium、一方、 JUnit より単純な単体テストに最適です。
4) とは何ですか TestNG 注釈とその利点は何ですか?
の注釈 TestNG 定義します テスト方法の構造と動作コード内で直接宣言型のテスト制御を提供することにより、複雑な XML 構成の必要性がなくなります。
よく使用される注釈は次のとおりです。
@BeforeSuite,@BeforeTest,@BeforeClass,@BeforeMethod@Test@AfterMethod,@AfterClass,@AfterTest,@AfterSuite
例:
@BeforeMethod
public void setup() {
System.out.println("Initializing browser...");
}
@Test
public void verifyLogin() {
System.out.println("Executing login test...");
}
これにより、開発者はテスト実行を論理的に整理し、セットアップ、テスト実行、およびティアダウンが定義された順序で実行されるようになります。
5) グループ化の概念を説明する TestNG.
グループ化 TestNG テストを「スモーク」、「回帰」、「健全性」などのより小さく管理しやすいセットに論理的に分類できます。
例:
@Test(groups = {"Smoke"})
public void loginTest() { ... }
@Test(groups = {"Regression"})
public void paymentTest() { ... }
特定のグループを実行するように XML スイートを構成できます。
<groups>
<run>
<include name="Smoke"/>
</run>
</groups>
メリット:
- テストケースの選択的な実行を容易にします。
- CI/CD パイプラインの柔軟性を向上させます。
- 増分ビルド中の実行時間を節約します。
6) パラメータ化はどのようにして実現できるのか TestNG?
パラメータ化によりデータ駆動型テストが可能になり、複数の入力データセットでテストを実行できるようになります。 TestNG 2 つの主な方法をサポートします。
- 使い方
@ParametersXMLによる注釈: - 使い方
@DataProvider:
<parameter name="browser" value="chrome"/>
@Test
@Parameters("browser")
public void launchBrowser(String browser) { ... }
@DataProvider(name="loginData")
public Object[][] getData() {
return new Object[][] {{"user1","pass1"}, {"user2","pass2"}};
}
@Test(dataProvider="loginData")
public void loginTest(String user, String pass) { ... }
この柔軟性により、環境や構成をまたいで大規模なテスト セットを維持および実行することが容易になります。
7) 依存関係とは TestNG そしてそれらはどのように管理されるのでしょうか?
依存関係 TestNG 他のテスト結果に基づいてテスト実行の順序を制御するには、 dependsOnMethods or dependsOnGroups 属性を指定します。
例:
@Test
public void loginTest() { ... }
@Test(dependsOnMethods = {"loginTest"})
public void verifyDashboard() { ... }
依存メソッドが失敗した場合、後続のテストは自動的にスキップされます。
このメカニズムは、無効なテスト実行を防ぎ、 論理テストの整合性これは、ログイン → アクションの実行 → 結果の検証などの複数ステップの機能フローに特に役立ちます。
8) 実行方法にはどのようなものがありますか? TestNG テスト?
TestNG テストは、テストの設定に応じていくつかの柔軟な方法で実行できます。
- IDEから(Eclipse/IntelliJ): クラスを右クリックするか、
XML file→Run as→TestNG Test. - コマンドラインから:
java -cp "path\testng.jar;bin" org.testng.TestNG testng.xml - ビルドツールの使用:
- メイヴン: 構成
surefire-plugininpom.xml. - Gradle:
testng依存関係とタスク構成。
- メイヴン: 構成
- CI/CD パイプラインを通じて: 自動実行のために Jenkins または GitHub Actions と統合されています。
この多様性により、開発、テスト、運用環境間での互換性が確保されます。
9) とは何ですか TestNG リスナーはなぜ重要なのでしょうか?
のリスナー TestNG 開始、成功、失敗、スキップなどのテスト実行イベントを監視して、テストの動作をカスタマイズするためのフックを提供します。
一般的なリスナー:
ITestListener: テスト メソッド レベルのイベントを追跡します。ISuiteListener: スイートレベルのイベントを監視します。IReporter: カスタム レポートを生成します。
例:
public class CustomListener implements ITestListener {
public void onTestFailure(ITestResult result) {
System.out.println("Test Failed: " + result.getName());
}
}
リスナーは、 失敗時のスクリーンショット、生成 カスタムログまたは レポートツールとの統合 Allure や ExtentReports など。
10) 使用することの利点と欠点は何ですか? TestNG?
| 側面 | 優位性 | デメリット |
|---|---|---|
| 柔軟性 | グループ化、依存関係、並列実行をサポート | 大規模スイート向けの複雑な XML 設定 |
| レポート作成 | 詳細なHTMLおよびXMLレポートを提供します | リスナーなしではカスタマイズが制限される |
| 統合 | とシームレスに動作します Selenium CI/CDツール | 学習曲線がわずかに高い |
| パラメータ化 | データ駆動型テストの組み込みサポート | 大規模なデータセットのメンテナンスが必要 |
全体的に見て、 TestNG わずかな構成オーバーヘッドにもかかわらず、最新の自動テスト環境に適した堅牢で柔軟なフレームワークです。
11) テストケースの優先順位をどのように決めるか TestNG?
TestNG 提供する priority の属性 @Test テストメソッドの実行順序を定義するアノテーション。優先度の低いテストが最初に実行されます。
例:
@Test(priority = 1)
public void loginTest() { ... }
@Test(priority = 2)
public void dashboardTest() { ... }
優先度が指定されていない場合、デフォルト値は 0、メソッドはアルファベット順に実行されます。
ベストプラクティス: 優先度の値は控えめに使用してください。過度に使用するとテストの順序が固定化される可能性があります。複雑なフローの場合は、依存関係の管理(dependsOnMethods) は厳密な優先順位付けよりも保守性が高くなります。
12) 並列実行の概念と使用法を説明する TestNG.
並列実行 TestNG 複数のテスト、クラス、またはメソッドを同時に実行できるため、全体的な実行時間が大幅に短縮されます。
この機能は、 testng.xml ファイル:
<suite name="ParallelSuite" parallel="tests" thread-count="3"> <test name="Test1">...</test> <test name="Test2">...</test> </suite>
サポートされている並列モード:
testsclassesmethodsinstances
Advantages:
- フィードバック サイクルが高速化されます。
- マルチコアプロセッサの効率的な利用。
- 大規模な自動化スイートのスケーラビリティ。
ただし、 スレッドセーフ WebDriver やデータベース接続などの共有リソースを使用する場合。
13) データプロバイダーとは TestNG? パラメータとどう違うのでしょうか?
@DataProvider 可能 データ駆動型テスト テスト方法に複数のデータセットを提供することにより。
例:
@DataProvider(name="credentials")
public Object[][] data() {
return new Object[][] {{"user1", "pass1"}, {"user2", "pass2"}};
}
@Test(dataProvider="credentials")
public void login(String username, String password) { ... }
@Parameters と @DataProvider の違い:
| 機能 | @Parameters |
@DataProvider |
|---|---|---|
| 情報元 | XMLファイル | Java 方法 |
| Data Type | 単一のデータセット | 複数のデータセット |
| 柔軟性 | Less | ハイ |
| Use Case | 環境変数 | 繰り返しデータ駆動型テスト |
したがって、 @DataProvider 複数の資格情報によるログインの検証など、複数のデータセットで単一のテストを実行する場合に適しています。
14) テストを無効にしたりスキップしたりするには TestNG?
テストを無効にするには TestNG enabled 属性を使用するか、プログラムでスキップすることによって行います。
1. 使用方法 enabled = false:
@Test(enabled = false)
public void skipTest() {
System.out.println("This test will not run.");
}
2. 実行時にスキップする SkipException:
@Test
public void conditionalSkip() {
throw new SkipException("Skipping this test due to condition.");
}
無効化は次のような場合に便利です 一時的に無効化 不安定なテストや不完全なテストを削除せずにスキップする機能があります。 実行条件サポートされていないブラウザのテストをスキップするなど。
15) testng.xml ファイルの役割と主なコンポーネントは何ですか?
私達の testng.xml ファイルは、 TestNGテスト スイート、テスト グループ、パラメーター、および並列実行の設定を定義します。
構造例:
<suite name="AutomationSuite">
<parameter name="browser" value="chrome"/>
<test name="RegressionTests">
<classes>
<class name="com.test.LoginTest"/>
<class name="com.test.PaymentTest"/>
</classes>
</test>
</suite>
主要コンポーネント:
<suite>– スイート全体を定義します。<test>– テスト ブロックを表します。<classes>– テストクラスを一覧表示します。<methods>– 特定のテスト方法をフィルタリングします。<parameter>– グローバルまたはテストレベルのパラメータを提供します。
XMLファイルは 集中管理 コードを変更せずに過剰実行します。
16) レポートを生成するには TestNG?
TestNG 自動的に生成する 2種類のレポート:
- HTMLレポート (
test-output/index.html) – 合格、不合格、スキップされたテストを要約します。 - XMLレポート – CI/CD ツールとの統合に使用されます。
高度なレポートについては、 TestNG と統合します:
- エクステントレポート – グラフィカルなダッシュボードと詳細なログを提供します。
- アリュールレポート – テスト手順、スクリーンショット、ログを使用した視覚的な分析を提供します。
統合例:
ExtentReports extent = new ExtentReports();
ExtentTest test = extent.createTest("Login Test");
test.pass("Test Passed Successfully");
extent.flush();
これらのレポートは、傾向を追跡し、テスト範囲の弱い領域を特定するために不可欠です。
17) 工場はどこにあるか TestNG、そしてそれらはどのように機能するのでしょうか?
工場 TestNG 作成に使用されます テストクラスの動的インスタンステストを実行する前に、クラスのパラメータ化されたインスタンス化が可能になります。
例:
public class FactoryExample {
private String browser;
public FactoryExample(String browser) {
this.browser = browser;
}
@Factory
public static Object[] factoryMethod() {
return new Object[] { new FactoryExample("Chrome"), new FactoryExample("Firefox") };
}
@Test
public void testBrowser() {
System.out.println("Running test on: " + browser);
}
}
Advantages:
- 有効にする パラメータ化されたオブジェクトの作成.
- 対象デバイス クロスブラウザテスト および マルチ環境での実行.
ファクトリーは、メソッド レベルのデータの変化だけでなく、異なるオブジェクト構成が必要な場合に、DataProviders を補完します。
18) アサーションをどのように使うか TestNG?
アサーションは、テストメソッド内で予想される結果と実際の結果を検証するために使用されます。
アサーションの種類:
- ハードアサーション(Assert クラス):
失敗するとすぐにテストの実行を停止します。 - ソフトアサーション (SoftAssert クラス):
失敗後も実行を継続し、最後にすべての問題を報告します。 - 使用する場合:
- ハードアサーションを使用する 重要な検証 ログイン成功など。
- ソフトアサーションを使用する 複数の検証 単一のテスト方法内で。
Assert.assertEquals(actual, expected); Assert.assertTrue(condition);
SoftAssert soft = new SoftAssert();
soft.assertEquals(actual, expected);
soft.assertAll();
19) @BeforeMethodと@BeforeClassの違いを説明してください。 TestNG.
| 側面 | @BeforeMethod |
@BeforeClass |
|---|---|---|
| 実行 | Active Runs それぞれの前に 試験方法 | Active Runs かつて クラス内の任意のメソッド |
| 対象領域 | 試験方法ごと | テストクラスごと |
| 一般的な使用 | すべてのテストの前にブラウザを初期化する | 設定またはブラウザ設定を一度読み込む |
例:
@BeforeClass
public void setupClass() {
System.out.println("Executed once per class");
}
@BeforeMethod
public void setupMethod() {
System.out.println("Executed before each method");
}
@BeforeMethod 各テストにクリーンな環境が必要な場合、 @BeforeClass 再利用できる負荷の高い初期化タスク用。
20) どうやって TestNG 依存性注入をサポートしていますか? また、その使用例は何ですか?
TestNG サポート 依存性注入 コンテキストや設定オブジェクトの組み込み注入を通じて、 ITestContext, XmlTestまたは Method.
例:
@Test
public void testContextExample(ITestContext context) {
System.out.println("Suite Name: " + context.getSuite().getName());
}
使用事例:
- テストパラメータを動的に取得します。
- スイート名や並列実行設定などの構成情報にアクセスします。
- 依存関係をハードコーディングせずにテストの柔軟性を強化します。
依存性注入により、開発者は モジュール式のコンテキスト認識テストを書く 環境の変化に動的に適応します。
21) @Factoryと@DataProviderの違いは何ですか? TestNG?
両方 @Factory および @DataProvider パラメータ化に役立ちますが、 異なるレベル テスト アーキテクチャで。
| 機能 | @Factory |
@DataProvider |
|---|---|---|
| 対象領域 | クラスレベル | メソッドレベル |
| 目的 | 異なるデータを持つクラスの複数のインスタンスを作成する | 単一のテスト方法にデータを供給 |
| 実行 | 各インスタンスのクラス全体を実行します | 1つのメソッドを複数回実行する |
| 理想的な使用例 | クロスブラウザまたは環境テスト | データ駆動型機能テスト |
例:
- 工場: ブラウザの種類ごとにクラス全体を実行します。
- データプロバイダー: 複数のデータ セットを使用して 1 つのテスト メソッドを実行します。
@Factory オブジェクトのインスタンス化自体が変化するとき、そして @DataProvider 同じオブジェクトインスタンス内での機能入力の変化。
22) 失敗したテストケースを自動的に再試行するにはどうすればいいですか? TestNG?
TestNG メカニズムを提供する 失敗したテストケースを再実行する IRetryAnalyzer インタフェース。
実装例:
public class RetryAnalyzer implements IRetryAnalyzer {
int count = 0;
int maxTry = 2;
public boolean retry(ITestResult result) {
if (count < maxTry) {
count++;
return true;
}
return false;
}
}
使用法:
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testLogin() {
Assert.fail("Intentional Failure");
}
メリット:
- CI パイプラインの不安定性を軽減します。
- 一時的なネットワークまたは環境の問題を処理します。
ベストプラクティス: 断続的な障害をデバッグするために、再試行ロジックを適切なログ記録およびスクリーンショットと組み合わせます。
23) ITestContext の用途は何ですか? TestNG?
ITestContext は、大阪で コンテキスト情報 テスト実行に関する情報(スイート名、テスト名、出力ディレクトリ、パラメータなど)。
例:
@Test
public void contextExample(ITestContext context) {
System.out.println("Suite: " + context.getSuite().getName());
}
主な方法:
getSuite()– スイートレベルの情報を取得します。getName()– テスト名を返します。setAttribute()/getAttribute()– テスト間でデータを共有します。
それは可能にします テストメソッドまたはクラス間でのデータ共有 動的なレポート作成とログ記録を容易にします。
24) テストグループ間の依存関係をどのように作成するか TestNG?
グループ間の依存関係を定義するには、 dependsOnGroups の属性 @Test 注釈。
例:
@Test(groups = "Login")
public void login() { ... }
@Test(dependsOnGroups = "Login")
public void verifyProfile() { ... }
これにより、 verifyProfile グループは、グループ内のすべてのテストが Login グループは正常に通過しました。
特に役立つのは 統合テストここで、モジュールは他のモジュールの実行が成功することに依存します (例: ログイン → プロファイル → ログアウト フロー)。
25) 特定のテスト方法を無視できるのはなぜですか? TestNG XML ファイルですか?
明示的にすることができます 除外方法 XMLスイートファイル内のクラス内で <exclude> タグ。
例:
<class name="com.test.LoginTests">
<methods>
<exclude name="verifyLogout"/>
</methods>
</class>
これにより、テスターは 特定のメソッドを一時的に無効にする を変更せずに、 Java ソース コード - リリース サイクルやスプリントの優先度に基づいて動的な追加または除外が必要な大規模なスイートで役立ちます。
26) どうすれば TestNG 統合される Selenium ウェブドライバー?
TestNG および Selenium UI 自動化のための強力な組み合わせを形成します。
一般的な統合セットアップには、アノテーションを使用したテストの整理、セットアップ/ティアダウンの管理、XML または CI ツールを介したテストの実行が含まれます。
例:
@BeforeMethod
public void setup() {
driver = new ChromeDriver();
}
@Test
public void verifyTitle() {
driver.get("https://example.com");
Assert.assertEquals(driver.getTitle(), "Example Domain");
}
@AfterMethod
public void teardown() {
driver.quit();
}
統合の利点:
- 有効にする 並列ブラウザテスト.
- 簡素化 テストのグループ化とレポート.
- とシームレスに動作します CI / CDパイプライン Jenkins や GitHub Actions など。
27) 使用する際、どのようなベストプラクティスがありますか? TestNG 大規模な自動化フレームワークでは?
ベストプラクティス:
- Descriptive 命名: 実装ではなく動作に基づいてテストに名前を付けます。
- レバレッジのグループ化: 論理テスト グループ (スモーク、回帰) を作成します。
- ハードコーディングを避ける: テスト データにはパラメーターまたはプロパティ ファイルを使用します。
- 依存関係を最小限に抑える: 可能な限りテストケースを独立させてください。
- 構成を一元管理:
testng.xmlスイートのセットアップ用。 - 統合レポート: リスナーまたは ExtentReports などのサードパーティ ツールを使用します。
- 再試行ロジックは慎重に使用してください: 本当の欠陥を隠さないようにしてください。
これらに従うことで スケーラビリティ、保守性、可読性 エンタープライズレベルの自動化において。
28) @BeforeTestと@BeforeSuiteの違いは何ですか? TestNG?
| 機能 | @BeforeTest |
@BeforeSuite |
|---|---|---|
| 対象領域 | それぞれ前に実行される <test> XMLのタグ |
スイート全体の前に1回実行 |
| 周波数 | 複数回(複数の場合 <test> ブロック) |
スイートごとに1回のみ |
| 一般的な使用 | テストレベルの構成を初期化する | グローバルリソースを設定する |
例:
@BeforeSuite
public void setupSuite() {
System.out.println("Global setup for suite.");
}
@BeforeTest
public void setupTest() {
System.out.println("Setup for each <test> tag.");
}
@BeforeSuite の グローバル構成 (例:データベース接続)および @BeforeTest の テスト固有の初期化.
29)できます TestNG API テストに使用できますか? どのように?
Yes. TestNG 効果的に使用できる APIテスト HTTPクライアントライブラリと統合することで 安心してください or HTTPクライアント.
例:
@Test
public void verifyApiResponse() {
Response response = RestAssured.get("https://api.example.com/users");
Assert.assertEquals(response.getStatusCode(), 200);
}
Advantages:
- 有効にする アサーションベースの検証 回答の。
- お客様サポート パラメータ化 および データ駆動型テスト 複数のエンドポイント用。
- 生成 構造化レポート REST API 検証用。
組み合わせることにより TestNG および RestAssured を使用すると、テスターは UI テストと API テストの両方に対して統合された自動化フレームワークを維持できます。
30) コマンドラインからパラメータを渡すにはどうすればいいですか? TestNG?
実行時にシステムプロパティを渡すことでXMLパラメータを上書きすることができます。 -D フラグ。
コマンド例:
mvn test -Dbrowser=chrome -Denv=staging
コード例:
@Parameters("browser")
@Test
public void launch(@Optional("firefox") String browser) {
System.out.println("Running on: " + browser);
}
これにより、 動的環境選択 構成ファイルを変更せずに CI/CD パイプラインで実行できるため、テストの柔軟性が向上します。
31) テスト実行順序を制御するにはどうすればいいですか? TestNG 優先順位を使わずに?
使用する代わりに priority, TestNG 制御を可能にする 依存関係 および XMLメソッドの順序付け.
メソッド:
- 使い方
dependsOnMethods: - XML メソッド シーケンスの使用:
@Test
public void login() { ... }
@Test(dependsOnMethods = "login")
public void verifyDashboard() { ... }
<classes>
<class name="com.test.LoginTests">
<methods>
<include name="login"/>
<include name="verifyDashboard"/>
</methods>
</class>
</classes>
ベストプラクティス: 複雑なフローの場合は、静的な優先順位ではなく論理的な依存関係を優先し、堅牢で保守可能なテスト スイートを確保します。
32) コマンドラインから特定のテストメソッドを実行するにはどうすればいいですか? TestNG?
TestNG ことができます メソッドレベルのテスト実行 XML または Maven Surefire 構成を使用してコマンド ラインから直接実行します。
オプション1: XMLファイルの使用
<class name="com.test.LoginTests">
<methods>
<include name="verifyLogin"/>
</methods>
</class>
オプション2: Mavenコマンド
mvn test -Dtest=com.test.LoginTests#verifyLogin
このアプローチにより、 選択的処刑、個々のメソッドをデバッグしたり、クイック ビルド中に重要な機能を検証したりするのに役立ちます。
33) 外部Excelファイルを使用してテストをパラメータ化するにはどうすればいいですか? TestNG?
Excel 駆動型のパラメーター化は、テスト データが頻繁に変更されるデータ駆動型フレームワークでよく使用されます。
実装手順:
- アパッチ POI or JExcel Excel データを読み取ります。
- それを
@DataProvider方法。
例:
@DataProvider(name = "excelData")
public Object[][] readExcel() throws Exception {
FileInputStream fis = new FileInputStream("data.xlsx");
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0);
Object[][] data = new Object[sheet.getLastRowNum()][2];
for (int i = 0; i < sheet.getLastRowNum(); i++) {
data[i][0] = sheet.getRow(i + 1).getCell(0).getStringCellValue();
data[i][1] = sheet.getRow(i + 1).getCell(1).getStringCellValue();
}
return data;
}
これにより、Excel からの複数の実際のデータ セットで同じテスト メソッドを実行できるようになり、柔軟性とカバレッジが向上します。
34) どうやって走れるの? TestNG Jenkins または CI/CD パイプラインでテストしますか?
TestNG とシームレスに統合 ジェンキンズ, GitLab CIまたは GitHubアクション Maven経由または Gradle ビルド。
Jenkins での手順:
- インストールを開始する Maven統合プラグイン.
- 作る フリースタイルまたはパイプラインジョブ.
- 追加
mvn clean testビルドステップとして。 - ビルド後、HTML レポートを構成します。
- レポートディレクトリ:
test-output - インデックスファイル:
index.html
- レポートディレクトリ:
メリット:
- 自動回帰テストを有効にします。
- スケジュールされたテスト実行と傾向追跡を提供します。
- 環境間で一貫したテスト実行を保証します。
35) @Parameters の目的は何ですか? また、@Optional とどう違うのですか?
どちらの注釈もパラメータ化を扱いますが、目的は異なります。
| 機能 | @Parameters |
@Optional |
|---|---|---|
| 目的 | XMLファイルからパラメータを渡します | パラメータが欠落している場合はデフォルト値を提供します |
| 宣言 | XMLで使用される <parameter> |
内部テスト方法で使用される |
| 行動 | 値が欠落している場合はエラーが発生します | フォールバック値を使用する |
例:
@Test
@Parameters("browser")
public void runTest(@Optional("chrome") String browser) {
System.out.println("Running on: " + browser);
}
使い方 @Optional 確実に テストの安定性 XML 構成が不完全な場合。
36) 異なるクラス間でのテストの依存関係をどのように処理しますか? TestNG?
クラス間の依存関係を作成するには、 TestNG 使用を許可する dependsOnGroups 属性。
例:
@Test(groups = "Login")
public void loginTest() { ... }
@Test(groups = "Dashboard", dependsOnGroups = "Login")
public void dashboardTest() { ... }
このアプローチは、 複数モジュールの依存関係 各クラスはモジュール (ログイン、ダッシュボード、支払いなど) を表します。
これにより、前提条件テストが成功した場合にのみ依存モジュールが実行され、テストの整合性が維持されます。
37) 構成エラーとは TestNG、そしてどのように対処すればよいのでしょうか?
設定エラーは、セットアップまたはティアダウンメソッドに注釈が付けられると発生します。 @Before* or @After* 失敗します。
これらは、 スキップする依存テストたとえそれらのテストが正しいとしても。
一般的な原因:
- WebDriver の初期化が正しくありません。
- データベースまたは環境のセットアップの問題。
- パラメータの設定が間違っています。
ソリューション:
- トライキャッチ セットアップメソッド内のブロック。
- Apply
alwaysRun = true失敗してもクリーンアップが実行されるようにします。
例:
@BeforeMethod(alwaysRun = true)
public void setup() {
// Setup logic
}
これにより、ティアダウン メソッドが引き続き実行され、テスト環境の安定性が維持されます。
38) invocationCount属性とthreadPoolSize属性の用途は何ですか? TestNG?
これらの属性により 繰り返し並列テスト実行 同じ方法です。
例:
@Test(invocationCount = 5, threadPoolSize = 2)
public void loadTest() {
System.out.println("Running load test...");
}
| 属性 | 詳細説明 |
|---|---|
invocationCount |
メソッドの実行回数 |
threadPoolSize |
同時スレッド数 |
使用事例: パフォーマンス テスト、安定性の検証、または複数回の実行による不安定な動作の再現。
39) 失敗したテストケースだけを実行するにはどうすればいいですか? TestNG?
スイートランの後、 TestNG という名前のファイルを生成します testng-failed.xml 会場は test-output ディレクトリにあります。
次のコマンドを実行すると、失敗したテストのみを再実行できます。
java -cp testng.jar org.testng.TestNG test-output/testng-failed.xml
Advantages:
- 成功したテストをスキップすることで時間を節約します。
- 大規模なスイートでのデバッグを容易にします。
- 迅速な再テストのために CI パイプラインでよく使用されます。
再実行用のビルド後スクリプトを使用して、これを Jenkins と統合することもできます。
40) 限界は何ですか? TestNG そして、どうすればそれらを軽減できるのでしょうか?
その堅牢性にもかかわらず、 TestNG いくつかの制限があります。
| 制限 | 緩和戦略 |
|---|---|
| XML構成の複雑さ | アノテーションベースの構成とビルダーを使用する |
| 限定的なネイティブレポート | ExtentReportsまたはAllureを統合する |
| 再試行制御が組み込まれていない | 実施する IRetryAnalyzer |
| 並列実行におけるスレッドの安全性に関する懸念 | スレッドローカルな WebDriver インスタンスを使用する |
| 初心者のための学習曲線 | テンプレートベースのプロジェクト構造を維持する |
適切なフレームワーク設計とベスト プラクティスにより、これらの制限を最小限に抑えることができ、安定した保守可能な自動化ソリューションを確保できます。
41) ログ記録やスクリーンショットのキャプチャにリスナーをどのように使用しますか? Selenium-TestNG?
のリスナー TestNG テスト実行を監視し、ログ記録、スクリーンショットの撮影、結果の動的なレポートなどのアクションを実行するのに役立ちます。
実装例:
public class ScreenshotListener implements ITestListener {
@Override
public void onTestFailure(ITestResult result) {
WebDriver driver = ((BaseTest) result.getInstance()).getDriver();
File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("screenshots/" + result.getName() + ".png"));
}
}
使用法:
@Listeners(ScreenshotListener.class)
public class LoginTests extends BaseTest { ... }
メリット:
- 障害を自動的にキャプチャします。
- 視覚的な証拠を通じてデバッグを改善します。
- ログを維持するための手作業の労力を削減します。
この手法は、CI/CD 自動化パイプライン、特に失敗したビルドをリモートで診断する場合に重要です。
42) IReporterとITestListenerの違いは何ですか? TestNG?
| 機能 | IReporter |
ITestListener |
|---|---|---|
| 目的 | テスト実行後にカスタムレポートを生成する | 実行時のテストイベントを追跡して反応する |
| 呼び出し | すべてのテストが完了したら | テストライフサイクル中(開始、成功、失敗) |
| 出力 | HTML/XML/JSONレポート | ログファイル、スクリーンショット、ライブダッシュボード |
| 一般的な使用 | ExtentReports、Allure 統合 | ログ記録、障害処理、再試行メカニズム |
例:
-
IReporter構築用 包括的なレポート テスト完了後。 -
ITestListenerの リアルタイムログまたはスクリーンショット.
彼らはまたすることができます 組み合わせた エンドツーエンドの自動化分析システムを構築します。
43) クロスブラウザテストをどうやって行うのですか? TestNG XML 構成?
クロスブラウザテストにより、異なるブラウザ間で同じ機能が動作することが保証されます。
構成例:
<suite name="CrossBrowserSuite" parallel="tests">
<test name="ChromeTest">
<parameter name="browser" value="chrome"/>
<classes><class name="com.test.LoginTest"/></classes>
</test>
<test name="FirefoxTest">
<parameter name="browser" value="firefox"/>
<classes><class name="com.test.LoginTest"/></classes>
</test>
</suite>
Java コード:
@Parameters("browser")
@BeforeClass
public void setup(String browser) {
if(browser.equalsIgnoreCase("chrome"))
driver = new ChromeDriver();
else if(browser.equalsIgnoreCase("firefox"))
driver = new FirefoxDriver();
}
このアプローチにより、 並列、マルチブラウザ実行、プラットフォーム間のテスト範囲を加速します。
44) どのように統合しますか TestNG Dockerまたは Selenium グリッド?
TestNG とシームレスに統合 ドッキング化 Selenium グリッド 分散並列テストを可能にします。
ステップ:
- セットアップ Selenium Dockerのグリッド 公式の使用 Selenium 画像:
docker run -d -p 4444:4444 --name selenium-grid selenium/standalone-chrome
- 更新 TestNG セットアップ:
- Jenkins または CI パイプラインを介してスイートを実行します。
DesiredCapabilities caps = new DesiredCapabilities();
caps.setBrowserName("chrome");
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), caps);
メリット:
- 有効にする スケーラブルな並列テスト.
- 環境設定のオーバーヘッドを削減します。
- 提供 一貫したテスト実行 分散コンテナ間で。
45) スイート、テスト、メソッドレベルでの並列実行の違いは何ですか? TestNG?
| レベル | 並列属性 | 実行動作 |
|---|---|---|
| スイート | parallel="suites" |
複数のスイートを同時に実行 |
| ホイール試乗 | parallel="tests" |
Active Runs <test> 同時にブロックする |
| CLASS | parallel="classes" |
テストクラスを並列に実行する |
| 方法 | parallel="methods" |
個々のテストメソッドを並列に実行します |
例:
<suite name="ParallelTests" parallel="methods" thread-count="3">
<test name="SampleTest">
<classes><class name="com.test.ParallelExample"/></classes>
</test>
</suite>
ベストプラクティス: parallel="classes" 安定性のために Selenium 共有ドライバーの競合を回避するためのテスト。
46) グローバル変数を使わずにテスト間でデータを共有するにはどうすればいいでしょうか? TestNG?
TestNG は、大阪で ITestContext および 依存性注入 データを動的に共有します。
例:
@Test
public void storeData(ITestContext context) {
context.setAttribute("token", "abc123");
}
@Test(dependsOnMethods = "storeData")
public void useData(ITestContext context) {
String token = (String) context.getAttribute("token");
System.out.println("Using token: " + token);
}
これにより、静的変数の使用を避け、スレッドの安全性を維持し、 テスト間のデータ分離.
47) スキップしたテストをキャプチャして記録するにはどうすればいいですか? TestNG?
スキップしたテストをキャプチャするには、 onTestSkipped() 会場は ITestListener インタフェース。
例:
@Override
public void onTestSkipped(ITestResult result) {
System.out.println("Skipped Test: " + result.getName());
}
スキップする理由:
- 依存テストの失敗。
- 条件付きスキップ経由
SkipException. - 環境が利用できません。
ベストプラクティス:
CI レポートまたはダッシュボードで追跡できるように、スキップ理由とスタック トレースを記録します。
48) REST APIテストをパラメータ化する方法を説明します。 TestNG そして安心してください。
TestNGさん @DataProvider エレガントに統合 安心してください API パラメータ化用。
例:
@DataProvider(name = "apiData")
public Object[][] apiData() {
return new Object[][] {
{"https://api.example.com/users/1"},
{"https://api.example.com/users/2"}
};
}
@Test(dataProvider = "apiData")
public void testApi(String url) {
Response response = RestAssured.get(url);
Assert.assertEquals(response.getStatusCode(), 200);
}
Advantages:
- 複数のエンドポイントまたはペイロードに対して同じ API 呼び出しを実行します。
- さまざまな入力セットを持つ API の回帰テストを簡素化します。
- CI ツールおよびレポートとシームレスに統合します。
49) カスタム注釈を作成するには TestNG 再利用可能なテストパターン用ですか?
カスタム アノテーションを使用すると、反復的なテスト構成や検証を標準化できます。
例:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SmokeTest {
String description() default "Smoke Test";
}
使用法:
@SmokeTest(description="Validating Login Functionality")
@Test
public void loginTest() { ... }
リフレクションと組み合わせることで、これらの注釈を動的に読み取ってテストをグループ化したり、条件付き実行を実行したりできます。
この技術は、 フレームワークメタプログラミング 自己文書化テストを構築します。
50) どのように組み合わせれば Cucumber および TestNG ハイブリッド テスト フレームワーク用ですか?
TestNG として機能することができる テストランナー の Cucumber 強力なレポート機能と並列化機能を提供する BDD シナリオ。
ランナー例:
@CucumberOptions(
features = "src/test/resources/features",
glue = "stepDefinitions",
plugin = {"pretty", "html:target/cucumber-report.html"}
)
public class RunCucumberTest extends AbstractTestNGCucumberTests { }
Advantages:
- レバレッジ TestNGさん 注釈、リスナー、レポート.
- お客様サポート 並列機能実行.
- と統合 アリュール および エクステントレポート 簡単に。
このハイブリッドアプローチは BDDの読みやすさ TestNG 柔軟性エンタープライズ グレードのフレームワークに最適です。
🔍 トップ TestNG 現実世界のシナリオと戦略的回答を伴う面接の質問
以下は、現実的でドメインに関連した10の TestNG 面接の質問と明確な期待、そして力強い回答例をご紹介します。
1) 使用することの主な利点を説明してください。 TestNG に比べ JUnit?
応募者に期待すること: 理解を示す TestNGの強化された機能と、それがエンタープライズ自動化によく選ばれる理由について説明します。
回答例: 「TestNG 柔軟なテスト構成、並列実行のサポート、依存テストメソッド、データプロバイダによるデータ駆動型テスト、組み込みレポート機能など、いくつかの利点があります。これらの機能により、 TestNG スケーラビリティを必要とする複雑な自動化フレームワークにとって、より強力になります。」
2) どのように使いますか? TestNG テスト実行フローを制御するためのアノテーション?
応募者に期待すること: 注釈の目的と順序に関する知識。
回答例: 「TestNG @BeforeSuite、@BeforeClass、@BeforeMethod、@Test といったアノテーションと、それらに対応するティアダウンアノテーションが用意されています。これらにより、テストのセットアップとクリーンアップを構造的に整理できます。例えば、@BeforeMethod は各テストメソッドの前に実行されるため、ブラウザの状態を初期化するのに役立ちます。
3) 挑戦的な自動化プロジェクトについて説明してください。 TestNG 重要な役割を果たした。
応募者に期待すること: 実際のプロジェクト経験と問題解決を明確に表現する能力。
回答例: 「以前の職務では、複数の環境にわたる広範な回帰テストを必要とするプロジェクトに携わっていました。 TestNGの並列実行とグループ化機能により、チームは重要なスイートを同時に実行し、信頼性を維持しながら実行時間を大幅に短縮することができました。」
4) どうやって TestNG グループはテストを効率的に整理して実行するのに役立ちますか?
応募者に期待すること: 包含/除外メカニズムを含むグループ化の理解。
回答例: 「グループ TestNG スモーク、回帰、統合といったテストケースの分類が可能です。testng.xmlを使用することで、グループを選択的に実行したり、不安定なテストを除外したり、コード自体を変更することなく異なるテストスイートを管理したりできます。
5) デバッグに失敗しなければならなかった状況について説明してください TestNG テスト。どのようなアプローチをしましたか?
応募者に期待すること: 批判的思考力とトラブルシューティング能力。
回答例: 「以前の職場では、私は一連の失敗に直面しました TestNG ローカルでは成功しているように見えても、CIでは失敗するテストがありました。詳細なログ記録を有効にし、実行順序を確認したところ、テスト間で共有リソースがリセットされていないことがわかりました。そこで、@AfterMethodを使用して適切なティアダウン手順を実装し、テストの分離を確保しました。
6) データ駆動型テストをどのように実装するか TestNG?
応募者に期待すること: DataProvider とユースケースの理解。
回答例: 「Object配列でデータを返す@DataProviderメソッドを作成し、dataProvider属性を使って@Testメソッドにバインドします。これにより、異なる入力セットで同じテストを複数回実行できるようになります。これは、フォームの送信やAPIペイロードのバリエーションを検証するのに役立ちます。」
7) テストの依存関係をどのように管理しますか? TestNG?
応募者に期待すること: dependOnMethods または dependOnGroups を適切に使用します。
回答例: 「TestNG は、dependsOnMethods属性とdependsOnGroups属性を通じてテストの依存関係を許可します。例えば、注文を作成した後にのみ検証するなど、あるテストが正常に完了した後にのみ実行する必要がある場合に依存関係を使用します。
8) どのように使用したか説明してください TestNG 継続的インテグレーションツールを使用します。
応募者に期待すること: 実際の自動化パイプラインの経験。
回答例: 「以前の仕事では、 TestNG JenkinsでMavenビルドを設定して生成する TestNG HTMLおよびXMLレポート。Jenkinsはレポートをアーカイブし、ビルドサイクルごとに結果を表示しました。この統合により、チームは障害を迅速に追跡し、リリースの安定性を維持することができました。
9) 複数の自動化タスクを管理しながら、厳しい期限内で作業をしなければならなかったときのことを教えてください。
応募者に期待すること: 時間管理と優先順位付けの能力。
回答例: 「前職では、既存の TestNG テストスイートを再構築すると同時に、今後のリリースに向けて新しいテストスイートも作成しました。ビジネスへの影響に基づいてタスクの優先順位を付け、最もリスクの高い領域から自動化を行い、 TestNG 完了したセクションをグループ化して早期レビューに活用しました。これにより、品質を損なうことなく、タイムリーな納品を実現できました。
10) スケーラブルな TestNG 大規模アプリケーション用のフレームワークですか?
応募者に期待すること: Archiアーキテクチャの理解、パターン、ベストプラクティス。
回答例: 「ページオブジェクトモデルを使ってモジュールフレームワークを設計し、 TestNG 実行管理にはDataProviderを使用し、データ駆動型のシナリオにはDataProviderを使用します。また、並列実行の設定、ユーティリティの一元管理、構成設定の外部化を行うことで、アプリケーションの拡張に合わせてフレームワークのスケーラビリティと保守性を維持します。
