TestNG チュートリアル
⚡ スマートサマリー
TestNG 次世代 Java テストフレームワークとペアになる Selenium 構造化された自動化、豊富なレポート、並列実行のために。このチュートリアルでは、コア注釈、プロジェクト設定について説明します。 Eclipse最初のテストケースの作成、HTMLレポートの作成、および高度なパラメータの使用方法。

何ですか TestNG?
TestNG は自動化テストフレームワークであり、「NG」は「次世代」を意味します。 TestNG に触発され JUnit そして使用 Java アノテーション(@)を使用してテストフローを制御します。 JUnit以前の制限を克服し、 エンドツーエンドのテスト 容易になります。
自律的AI TestNG 適切なレポートを生成すれば、合格、不合格、スキップされたテストの数をすぐに確認できます。また、不合格だったテストのみを再実行することも可能です。
具体的な例を挙げますと、以下の通りです。
- 5 つのテストケースがあり、それぞれが独自のメソッドで記述されているとします。 TestNG3つは合格したが、4つ目は失敗した。最初の3つは既に合格しているので、4つ目の失敗を修正した後、その4つだけを再実行したい。これを通常のmain()メソッドのコードで行うのは難しい。
- TestNG 提供
testng-failed.xml内のファイルtest-outputフォルダ。そのXMLを実行すると、失敗したケースのみが再実行されます。
さらに、以下の利点を学ぶことができます。 TestNG@Test アノテーションを使用したテスト メソッドの書き方、およびクラスをテスト スイートに変換する方法 Eclipse またはコマンドライン。
なぜ使うの? TestNG Selenium?
デフォルトでは、 Selenium テストでは、きれいにフォーマットされた結果が得られません。 TestNG テストランナーを接続すると、チームと共有できる構造化されたレポートが出力されます。
ブリッジ Selenium ユーザーは好む TestNG が JUnit より幅広い機能セットのため。 Selenium には次の値があります:
- 実行されたテストケースの数、合格したテストケースの数、失敗したテストケースの数、スキップされたテストケースの数を含むレポート。
- 簡単なグループping テストケースを
testng.xmlファイル、実行優先順位付き。 - ループを使用せずにテストを複数回繰り返す
invocationCount. - 複数のブラウザで複数のテストを実行します — クロスブラウザブラウザのテスト サポート。
- Mavenとのスムーズな統合、 Jenkins、その他CIツール。
- Readable アノテーション(例:@BeforeMethod、@AfterMethod、@BeforeTest、@AfterTest)。
- Selenium WebDriverにはネイティブのレポート機能はありません。 TestNG 以下のような、見やすいHTMLレポートでそのギャップを埋めます。
- TestNG テストコードが簡素化されます。静的な main メソッドは不要になり、アノテーションによって実行内容と実行タイミングが決定されます。
- 捕捉されなかった例外は、 TestNGこれらは実行全体を終了することなく、失敗したステップとして報告されます。
のメリット TestNG が JUnit
TestNG 3つの大きな利点を提供する JUnit:
- 注釈は理解しやすく、使いやすい。
- テストケースをグループ化したり、優先順位を付けたりすることで、より少ない労力で作業を進めることができます。
- 並列テスト実行は標準でサポートされています。
アノテーションとは何か TestNG?
の注釈 TestNG メソッドの実行方法を制御するために、メソッドの上に配置されるコード行のことです。 それらは必ず「@」記号で始まります。簡単な例を以下に示します。
注釈については、次のセクションで詳しく説明します。 「注釈の使用例 TestNG このチュートリアルの後半で詳しく説明するので、上記の例はあくまでも期待値を設定するためのものです。 TestNG アノテーションは、 JUnit 同等のものであり、テストを実行する際に不可欠です。 Selenium グリッド 並列実行が重要な場面。
でテストケースを作成する方法 TestNG
ライティング TestNG テストケースは3つのステップで構成されます。
- ビジネスロジックを記述して配置します TestNG 各メソッドの上に注釈を付ける。
- クラス名、グループ名、パッケージ名などのメタデータを追加します。
- 実行する TestNG IDEまたはコマンドラインからクラスを実行します。
テストケースを作成する TestNG 注釈
それでは、最初のテストケースを作成します。 TestNG 注釈 Seleniumテストを作成する前に、新しい TestNG プロジェクトイン Eclipse それを呼び出す 最初TestNGプロジェクト.
新しい設定 TestNG プロジェクト
ステップ1) 詳しくはこちら ファイル > 新規 > Java プロジェクト.
ステップ2) Enter 最初TestNGプロジェクト プロジェクト名としてクリック 次へ.
ステップ3) インポートする TestNG ライブラリ。 ライブラリ タブをクリックして ライブラリを追加….
ステップ4) ライブラリを追加 ダイアログで選択 TestNG をクリックし 次へ.
ステップ5) 詳しくはこちら 仕上げ.
TestNG これで図書館一覧に表示されるはずです。
ステップ6) 含まれるJARファイルを追加します Selenium API。これらは Java クライアントドライバは以下からダウンロードされました selenium.dev/downloads.
フォルダーに移動してください Selenium JARファイルが保存されます。
外部JARファイルを追加すると、画面はこのようになります。
ステップ7) 詳しくはこちら 仕上げ。 新しい 最初TestNGプロジェクト パッケージエクスプローラーに表示されます。
新規作成方法 TestNG テストファイル
プロジェクトの準備ができたら、新しい TestNG ファイルにソフトウェアを指定する必要があります。
ステップ1) を右クリックします。 src フォルダを選択して 新規 > その他….
ステップ2) 拡大する TestNG フォルダ、選択 TestNG class、クリック 次へ.
ステップ3) 下記の値を入力してクリックしてください 仕上げを選択します。 Java ファイルに名前が付けられています 最初TestNGFile.
ステップ4) Eclipse 生成する TestNG 以下にテンプレートを示します。
初めてのコーディング TestNG テストケース
最初のものを作成する テストケース タイトルの正当性を証明する Mercury ツアーのホームページ。
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.Test;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@Test
public void verifyHomepageTitle() {
System.out.println("launching firefox browser");
// Selenium 4 ships Selenium Manager, so the driver path is no longer required.
driver = new FirefoxDriver();
driver.get(baseUrl);
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
driver.quit();
}
}
注目すべき点:
- TestNG 必要ありません
main()方法。 - メソッドは静的である必要はありません。
- その @テスト 注釈マーク
verifyHomepageTitle()テストケースとして。 - 注釈は
org.testng.annotations.*パッケージ。 - その アサート からのクラス
org.testng.Assert検証を推進する。
1つのコード内に複数の@Testアノテーションを含めることができます。 TestNG ファイル。それについては、 「注釈の使用例 TestNG のセクションから無料でダウンロードできます。
テストの実行
ファイルを右クリックして、 TestNG テスト。 Eclipse コンソールウィンドウにテキスト結果、そしてグラフィック結果の 2 つの出力を生成します。 TestNG 結果ウィンドウ。
作成したレポートを確認する TestNG
コンソールウィンドウにはテキストベースの要約が表示されますが、 TestNG 結果ウィンドウにはグラフが表示されます。
HTMLレポートの生成
TestNG 完全なHTMLレポートを生成することもできます。
ステップ1) 実行後 最初TestNGFileプロジェクトを右クリックして、 Refresh.
ステップ2) A テスト出力 フォルダーが表示されます。展開して、 index.html — 最新の実行結果を示すHTMLレポート。
ステップ3) Double-クリック index.html 内側を開ける Eclipseのブラウザです。次回以降はF5キーを押して更新してください。
注釈の使用例 TestNG
既に@Testアノテーションをご覧いただきました。このセクションの残りの部分では、最も便利な高度なアノテーションについて説明します。
複数のテストケース
シングル TestNG ファイルには複数の @Test アノテーションを含めることができます。デフォルトでは、@Test アノテーションが付いたメソッドはアルファベット順に実行されます。以下のコードでは、メソッドは c_test, a_test, b_test 出典順に関係なく、アルファベット順に表示します。
コードを実行して開く index.htmlに設定します。 OK をクリックします。 時系列順表示.
技術パラメータ
デフォルトの順序を上書きするには、 priority パラメータに一致する最初のデバイスのリモートコントロール URL を返します。 パラメータとは、アノテーションの動作を変更するキーワードのことです。
- 値を割り当てる
=. - パラメータは、以下に示すように、注釈の直後に括弧で囲んでください。
TestNG @Test アノテーションを優先度の低いものから高いものへと順に実行します。優先度番号は連続している必要はありません。
HTMLレポートは、メソッドが優先順位の昇順で実行されたことを確認しています。
複数のパラメーター
ほかに priority、@Test は alwaysRun パラメータ(真偽値)。 1つの注釈で2つ以上のパラメータを使用する場合は、それらをカンマで区切ります。
@Test(priority = 0, alwaysRun = true)
@BeforeTest と @AfterTest
| @BeforeTest | この注釈の下にあるメソッドが実行されます 最初のテストケースの前に TestNG file. |
| @アフターテスト | この注釈の下にあるメソッドが実行されます すべてのテストケースの後、 TestNG ファイルの仕上げ. |
以下のコードを考えてみましょう。
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
表とコードから、シーケンスは次のようになると予測できます。
- 1位 —
launchBrowser() - 2番目 —
verifyHomepageTitle() - 3番目 —
terminateBrowser()
ソースファイル内での注釈ブロックの配置は、その実行順序に影響を与えません。 以下に示すように、メソッドの順序を入れ替えてみてください。
package firsttestngpackage;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
@AfterTest // Jumbled
public void terminateBrowser() {
driver.quit();
}
@BeforeTest // Jumbled
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@Test // Jumbled
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
}
コードを実行して結果を確認してください。
@BeforeMethod と @AfterMethod
| @BeforeMethod | この注釈の下にあるメソッドが実行されます 各テスト方法の前に. |
| @アフターメソッド | この注釈の下にあるメソッドが実行されます 各テスト方法の後. |
In Mercury ツアー機能を使って、ホームページからアクセスした2つのターゲットページのタイトルを確認したいとします。
テストの流れは以下のとおりです。
- ホームページを開いて、タイトルを確認してください。
- 「登録」をクリックし、対象ページのタイトルを確認します。
- ホームページに戻ってタイトルを確認してください。
- 「サポート」をクリックし、対象ページのタイトルを確認します。
- ホームページに戻って、タイトルをもう一度確認してください。
以下のコードは、@BeforeMethod と @AfterMethod が繰り返し処理をどのように行うかを示しています。
package firsttestngpackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class FirstTestNGFile {
public String baseUrl = "https://demo.guru99.com/test/newtours/";
public WebDriver driver;
public String expected = null;
public String actual = null;
@BeforeTest
public void launchBrowser() {
System.out.println("launching firefox browser");
driver = new FirefoxDriver();
driver.get(baseUrl);
}
@BeforeMethod
public void verifyHomepageTitle() {
String expectedTitle = "Welcome: Mercury Tours";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
}
@Test(priority = 0)
public void register() {
driver.findElement(By.linkText("REGISTER")).click();
expected = "Register: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@Test(priority = 1)
public void support() {
driver.findElement(By.linkText("SUPPORT")).click();
expected = "Under Construction: Mercury Tours";
actual = driver.getTitle();
Assert.assertEquals(actual, expected);
}
@AfterMethod
public void goBackToHomepage() {
driver.findElement(By.linkText("Home")).click();
}
@AfterTest
public void terminateBrowser() {
driver.quit();
}
}
テストを実行した後、 TestNG 以下のシーケンスを報告します。
要するに、セットアップ手順を @BeforeMethod 内部の清掃またはナビゲーションのリセット @アフターメソッド つまり、各テストケースは既知の状態から始まり、既知の状態で終わる。
の概要 TestNG 注釈
- @BeforeSuite: スイート内のすべてのテストの前に実行されます。
- @AfterSuite: スイート内のすべてのテストの後に実行されます。
- @BeforeTest: クラス内のテスト メソッドの前に実行されますタグ。
- @AfterTest: クラス内のすべてのテスト メソッドの後に実行されます。タグ。
- @BeforeGroups: リストされたグループに属する最初のテストメソッドの直前に実行されます。
- @AfterGroups: リストされたグループに属する最後のテストメソッドの直後に実行されます。
- @BeforeClass: 現在のクラスの最初のテストメソッドの前に実行されます。
- @AfterClass: 現在のクラス内のすべてのテストメソッドの後に実行されます。
- @BeforeMethod: 各テストメソッドの前に実行されます。
- @AfterMethod: 各テストメソッドの後に実行されます。
- @テスト: そのメソッドをテストケースとしてマークする。

































