TestNG チュートリアル

何ですか TestNG?

TestNG NG は「Next Generation」を意味する自動テスト フレームワークです。 TestNG に触発され JUnit 注釈 (@) を使用します。 TestNG ~の欠点を克服します JUnit を作るように設計されています エンドツーエンドのテスト 簡単です。

使い方 TestNGを使用すると、適切なレポートを生成でき、合格したテスト ケースの数、失敗したテスト ケースの数、およびスキップされたテスト ケースの数を簡単に知ることができます。失敗したテスト ケースを個別に実行できます。

具体的な例を挙げますと、以下の通りです。

  • 5 つのテストケースがあり、各テストケースに 1 つのメソッドが記述されているとします (プログラムは testNG を使用せずにメインメソッドを使用して記述されているものとします)。このプログラムを最初に実行すると、3 つのメソッドが正常に実行され、4 番目のメソッドは失敗します。次に、4 番目のメソッドに存在するエラーを修正します。最初の 3 つのメソッドはいずれにしても正常に実行されるため、4 番目のメソッドのみを実行します。これは、 TestNG.
  • 私達の TestNG in Selenium オプションとして、test-output フォルダー内の testng-failed.xml ファイルが用意されています。失敗したテスト ケースのみを実行する場合は、この XML ファイルを実行します。これにより、失敗したテスト ケースのみが実行されます。

上記のコンセプトに加えて、さらに詳しく学びます TestNG、の利点は何ですか? TestNG@test アノテーションを使用してテスト メソッドを作成する方法、これらのクラスをテスト スイート ファイルに変換して Eclipse およびコマンド ラインから実行する方法について説明します。

なぜ使うの? TestNG   Selenium?

デフォルト Selenium テストでは、テスト結果の適切な形式が生成されません。使用する TestNG in Selenium、テスト結果を生成できます。

ブリッジ Selenium ユーザーはこれを以上に使用します ジュニット その利点があるからです。非常に多くの機能があります TestNG, ただし、ここでは、で使用できる最も重要なものだけに焦点を当てます。 Selenium主な特徴は次のとおりです。 Selenium TestNG:

  • 実行されたテスト ケースの数、成功したテスト ケースの数、失敗したテスト ケースの数、スキップされたテスト ケースの数を含むレポートを適切な形式で生成します。
  • 複数のテスト ケースを testng.xml ファイルに変換することで、より簡単にグループ化できます。これにより、どのテスト ケースを最初に実行するかの優先順位を設定できます。
  • 「呼び出し回数」というキーワードを使うだけで、同じテストケースをループなしで複数回実行することができます。
  • testngを使用すると、複数のブラウザで複数のテストケースを実行できます。 ブラウザのテスト.
  • 私達の TestNG フレームワークは次のようなツールと簡単に統合できます。 TestNG メイブン、ジェンキンスなど
  • テストで使用されるアノテーションは非常に理解しやすいです。例: @BeforeMethod、@AfterMethod、@BeforeTest、@AfterTest
  • WebDriver には、レポートを生成するためのネイティブ メカニズムがありません。 TestNG 以下に示すような読み取り可能な形式でレポートを生成できます。
  •   TestNG   Selenium

  • TestNG テストのコーディング方法が簡素化されます。テストでは静的 main メソッドはもう必要ありません。アクションのシーケンスは、メソッドが静的である必要がない、わかりやすいアノテーションによって制御されます。
  •   TestNG   Selenium

      TestNG   Selenium

  • キャッチされなかった例外は自動的に処理されます。 TestNG テストを途中で終了することなく。これらの例外は、レポートで失敗したステップとして報告されます。

のメリット TestNG が JUnit

大きなメリットは3つあります TestNG が JUnit:

  • 注釈がわかりやすくなりました
  • テストケースをより簡単にグループ化できる
  • 並行テストが可能

注釈とは TestNG?

の注釈 TestNG は、その下にあるメソッドの実行方法を制御できるコード行です。。これらの前には常に @ 記号が付きます。とても早くて素早い TestNG 以下にその例を示します。

注釈の入力 TestNG

注釈については、後ほど「注釈で使用される注釈」のセクションで説明します。 TestNG」なので、上記のことを理解していなくても大丈夫です。 TestNG 例はまだです。現時点では、注釈が次の点にあることに注意することが重要です。 TestNG よりもコード化と理解が容易です。 JUnit.

テストを並行して実行する機能は、 TestNG しかしではない JUnitので、 TestNG フレームワークは、テスターが使用する場合に適しています。 Selenium グリッド。

でテストケースを作成する方法 TestNG?

ステップ1) ビジネス ロジックを作成し、 TestNG コード内の注釈。
ステップ2) クラス名、グループ名、パッケージ名などの情報を追加します。
ステップ3) 実行する TestNG.

を使用してテスト ケースを作成する TestNG 注釈

ここで、次を使用して最初のテスト ケースを作成する方法を学びます。 TestNG の注釈 Selenium:

テスト ケースを作成する前に、まず新しいテスト ケースをセットアップする必要があります。 TestNG プロジェクトイン Eclipse 「First」という名前を付けますTestNGプロジェクト"。

新しい TestNG プロジェクト

ステップ1: [ファイル] > [新規作成] > をクリックします。 Java プロジェクト

新しい TestNG プロジェクト

ステップ2: 「最初」と入力しますTestNGプロジェクト名として「Project」を入力し、「次へ」をクリックします。

新しい TestNG プロジェクト

ステップ3: これからインポートを開始します TestNG 私たちのプロジェクトにライブラリを追加します。 「ライブラリ」タブをクリックし、「ライブラリを追加…」をクリックします。

新しい TestNG プロジェクト

ステップ4: [ライブラリの追加]ダイアログで、[TestNG」をクリックし、[次へ]をクリックします。

新しい TestNG プロジェクト

ステップ5: 完了をクリックします。

新しい TestNG プロジェクト

あなたはそれに気付くはずです TestNG ライブラリリストに含まれています。

新しい TestNG プロジェクト

ステップ6: 次に、以下を含む JAR ファイルを追加します。 Selenium API。これらのファイルは Java ダウンロードしたクライアントドライバ https://www.selenium.dev/downloads/ 私たちがインストールしていたとき Selenium および Eclipse 前の章で。

新しい TestNG プロジェクト

次に、 Selenium JAR ファイル。

新しい TestNG プロジェクト

外部 JAR を追加すると、画面は次のようになります。

新しい TestNG プロジェクト

ステップ7: [完了] をクリックして、最初のメッセージが表示されていることを確認します。TestNGプロジェクトは次の場所に表示されます Eclipseのパッケージ エクスプローラー ウィンドウ。

新しい TestNG プロジェクト

新規作成方法 TestNG テストファイル

これでプロジェクトの設定が完了しました TestNG チュートリアル、新しいものを作成しましょう TestNG ファイルにソフトウェアを指定する必要があります。

ステップ1: 「src」をクリックし、「その他」を選択します。
「src」パッケージ フォルダーを右クリックし、[新規] > [その他…] を選択します。

新しいを作成します TestNG テストファイル

ステップ2: 選択する TestNG とに提供されます。
以下を行うには、 TestNG フォルダーを選択し、「TestNG クラス」オプション。 「次へ」をクリックします。

新しいを作成します TestNG テストファイル

ステップ3: 値を入力します。
適切な入力ボックスに以下の値を入力し、「完了」をクリックします。 Java 「最初のTestNGファイル"。

新しいを作成します TestNG テストファイル

ステップ4: テンプレートが作成されました。
Eclipse テンプレートを自動的に作成する必要があります TestNG 以下に示すファイル。

新しいを作成します TestNG テストファイル

初めてのコーディング TestNG テストケースの例

それでは最初のものを作成してみましょう テストケース それはチェックします Mercury ツアーのホームページは正しいです。下記のようにコードを入力してください TestNG 例:

package firsttestngpackage;
import org.openqa.selenium.*;
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/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver ; 
     
  @Test
  public void verifyHomepageTitle() {
       
      System.out.println("launching firefox browser"); 
      System.setProperty("webdriver.gecko.driver", driverPath);
      driver = new FirefoxDriver();
      driver.get(baseUrl);
      String expectedTitle = "Welcome: Mercury Tours";
      String actualTitle = driver.getTitle();
      Assert.assertEquals(actualTitle, expectedTitle);
      driver.close();
  }
}

次の点に注意してください。

  • TestNG main() メソッドを使用する必要はありません。
  • メソッドは静的である必要はありません。
  • @Test アノテーションを使用しました。 @Test は、その下のメソッドがテスト ケースであることを示すために使用されます。。 この場合、verifyHomepageTitle() メソッドをテスト ケースとして設定したため、その上に「@Test」アノテーションを配置しました。
  • アノテーションを使用するので、 TestNG、パッケージ org.testng.annotations.* をインポートする必要がありました。
  • Assert クラスを使用しました。 Assertクラスは、検証操作を実行するために使用されます。 TestNGこれを使用するには、org.testng.Assert パッケージをインポートする必要があります。

1 つの中に複数のテスト ケース (したがって、複数の @Test アノテーション) が含まれる場合があります。 TestNG これについては、後ほど「 TestNGに設立された地域オフィスに加えて、さらにローカルカスタマーサポートを提供できるようになります。」

テストの実行

テストを実行するには、単にファイルを実行します。 Eclipse いつものように。 Eclipse 2 つの出力が提供されます。1 つはコンソール ウィンドウに、もう 1 つはコンソール ウィンドウに表示されます。 TestNG 結果ウィンドウ。

テストの実行

テストの実行

作成したレポートを確認する TestNG

コンソールウィンドウ Eclipse テストケース結果のテキストベースのレポートを提供します。 TestNG 結果ウィンドウにはグラフィカルな結果が表示されます。

作成したレポートを確認する TestNG

HTMLレポートの生成

TestNG HTML 形式でレポートを生成する機能があります。

ステップ1: 最初の実行後TestNG前のセクションで作成したファイルのプロジェクト名を右クリックします (最初のセクションTestNGプロジェクト) をプロジェクト エクスプローラー ウィンドウで表示し、[更新] オプションをクリックします。

HTMLレポートの生成

ステップ2: 「test-output」フォルダーが作成されたことに注目してください。 それを展開して、index.html ファイルを探します。 この HTML ファイルは、最新のテスト実行の結果のレポートです。

HTMLレポートの生成

ステップ3: Double-index.html ファイルをクリックしてファイル内で開きます Eclipseの内蔵 Web ブラウザ。通常の Web ブラウザと同様に、F5 キーを押すだけで、テストを再実行した後いつでもこのページを更新できます。

HTMLレポートの生成

で使用される注釈 TestNG

前のセクションでは、@Test アノテーションについて説明しました。 ここでは、より高度なアノテーションとその使用法を学習していきます。

複数のテストケース

単一の @Test アノテーションを複数使用できます。 TestNG ファイル。デフォルトでは、@Test アノテーションが付けられたメソッドはアルファベット順に実行されます。以下のコードを参照してください。メソッド c_test、a_test、および b_test はコード内でアルファベット順に配置されていませんが、そのまま実行されます。

で使用される注釈 TestNG

このコードを実行し、生成されたindex.htmlページで「時系列ビュー」をクリックします。

で使用される注釈 TestNG

技術パラメータ

メソッドを別の順序で実行したい場合は、パラメータ「priority」を使用します。 パラメータは、アノテーションの機能を変更するキーワードです.

  • パラメータには値を割り当てる必要があります。 これを行うには、その横に「=」を配置し、その後に値を続けます。
  • パラメータは、以下に示すコード スニペットのように、注釈の直後に配置される一対のかっこで囲まれています。

 技術パラメータ

TestNG @Test アノテーションは、最も低い優先順位値から最大の優先順位値までを使用して実行されます。優先順位の値が連続している必要はありません。

 技術パラメータ

私達の TestNG HTML レポートは、優先度の昇順の値に基づいてメソッドが実行されたことを確認します。

 技術パラメータ

複数のパラメーター

「優先度」とは別に、@Test には「alwaysRun」と呼ばれる別のパラメーターがあり、これは「true」または「false」のいずれかにのみ設定できます。 XNUMX つのアノテーションで XNUMX つ以上のパラメータを使用するには、パラメータをカンマで区切ります。 以下に示すようなものです。

@Test(priority = 0, alwaysRun = true)

複数のパラメーター

@BeforeTest と @AfterTest

@BeforeTest このアノテーションの下にあるメソッドが実行されます 最初のテストケースの前に、 TestNG file.
@アフターテスト このアノテーションの下にあるメソッドが実行されます すべてのテストケースの後、 TestNG ファイルが実行される.

以下のコードを考えてみましょう。

package firsttestngpackage;
import org.openqa.selenium.*;
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/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver ; 
     
     @BeforeTest
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          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.close();
      }
}

上記の表とコードで示されているロジックを適用すると、メソッドが実行される順序は次のように予測できます。

  • 1st – launchBrowser()
  • 2nd –verifyHomepageTitle()
  • 3rd – terminateBrowser()

注釈ブロックの配置は、実行される時系列順序に影響を与えることなく交換できます。。で理解しましょう TestNG 例として、コードが以下のようになるように注釈ブロックを再配置してみてください。

package firsttestngpackage;
import org.openqa.selenium.*;
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/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver ; 
     @AfterTest                            //Jumbled
      public void terminateBrowser(){
          driver.close();
      }
     @BeforeTest                            //Jumbled
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          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.*;
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/";
    String driverPath = "C:\\geckodriver.exe";
    public WebDriver driver; 
    public String expected = null;
    public String actual = null;
        @BeforeTest
      public void launchBrowser() {
          System.out.println("launching firefox browser"); 
          System.setProperty("webdriver.gecko.driver", driverPath);
          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.close();
      }
}

このテストを実行すると、 TestNG 次のシーケンスを報告する必要があります。

複数のパラメーター

簡単に言うと、@BeforeMethod には実行する必要があるメソッドが含まれている必要があります。 @AfterMethod には各テスト ケースに実行する必要があるメソッドが含まれている必要があります After それぞれのテストケース。

の概要 TestNG 注釈

@BeforeSuite: アノテーション付きメソッドは、このスイート内のすべてのテストが実行される前に実行されます。

@アフタースイート: アノテーション付きメソッドは、このスイート内のすべてのテストが実行された後に実行されます。

@BeforeTest: アノテーション付きメソッドは、タグ内のクラスに属するテスト メソッドが実行される前に実行されます。

@アフターテスト: アノテーション付きメソッドは、タグ内のクラスに属するすべてのテスト メソッドが実行された後に実行されます。

@BeforeGroups: この構成メソッドが前に実行されるグループのリスト。 このメソッドは、これらのグループのいずれかに属する最初のテスト メソッドが呼び出される直前に実行されることが保証されています。

@アフターグループ: この構成メソッドが実行されるグループのリスト。 このメソッドは、これらのグループのいずれかに属する最後のテスト メソッドが呼び出された直後に実行されることが保証されます。

@BeforeClass: アノテーション付きメソッドは、現在のクラスの最初のテスト メソッドが呼び出される前に実行されます。

@放課後: アノテーション付きメソッドは、現在のクラスのすべてのテスト メソッドが実行された後に実行されます。

@BeforeMethod: アノテーション付きメソッドは、各テスト メソッドの前に実行されます。

@アフターメソッド: アノテーションが付けられたメソッドは、各テスト メソッドの後に実行されます。

@テスト: アノテーションが付けられたメソッドはテスト ケースの一部です

まとめ

  • TestNG   テスト を実現できるフレームワーク Selenium テストがより理解しやすくなり、理解しやすいレポートが生成されます。
  • の主な利点 TestNG が JUnit 以下です。
    • 注釈は使いやすく、理解しやすくなります。
    • テスト ケースをより簡単にグループ化できます。
    • TestNG 作成できるようになります 並列テスト.
  • コンソールウィンドウ Eclipse テキストベースの結果を生成しますが、 TestNG このウィンドウは、テスト結果のグラフィカルな出力に加えて、次のようなその他の意味のある詳細も提供するため、より便利です。
    • 各メソッドの実行時間。
    • メソッドが実行された時系列順序
  • TestNG HTML ベースのレポートを生成できます。
  • アノテーションは通常の Java TestNG 方法。
  • TestNG データプロバイダーは、1 回の実行でテスト ケースに異なる値を渡すテスト関数にパラメーターを渡す方法です。