TestNG @テストの優先順位 Selenium
TestNG テスト 単体テスト、機能テスト、エンドツーエンド テスト、UI テスト、統合テストなど、さまざまなタイプのテスト設計をカバーするフレームワークです。
単一または複数のテスト ケースを実行できます。 テスト コード。
複数のテスト ケースの実行中にテストの優先順位が定義されていない場合、 TestNG すべての @Test に優先順位をゼロ(0) として割り当てます。
さて、ランニング中。 優先度の低いものが最初にスケジュールされます。
のデモ TestNG 優先度のないコード
すべてのテスト ケースに合格するためにシーケンス処理が必要になるシナリオを考えてみましょう。
シナリオ: 「Facebook」などの特定のキーワードを使用して Google 検索を実行する必要があるコードを生成します。 ここで、ブラウザのタイトルが「Facebook – Google 検索」に変更されていることを確認します。
注: コードを作成する各ステップは、別個のメソッドに含める必要があります。
方法1: ブラウザを開いて言う Firefox (openBrowser())
方法2: Google.com を起動します (launchGoogle())
方法3:「Facebook」を使用して検索を実行します(performSearchAndClick1stLink())
方法4: Google 検索ページのタイトルを確認します (FaceBookPageTitleVerification())
シナリオのコード:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Brower say Firefox @Test public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
コードの説明
上で述べたように、独立したメソッドで各アクションを実行するための 4 つのテスト ケースを作成しました。
- 最初の方法 (ブラウザを開く) 初期化する状態 Firefox ブラウザ。
- 第二の方法 (Googleを起動) 初期化されたブラウザで Google.com が起動されることを示します。
- XNUMX番目の方法 (SeachAndClick1stLink を実行)検索ボックスで検索を実行する状態(xpathを使用) (「.//*[@title='検索']」) 検索語を次のように指定すると Facebook および
- XNUMX番目で最後の方法 (FaceBookPageTitleVerification) Google の検索アイコンをクリックし、ブラウザのタイトルが に変更されたことを確認すると述べています。 Facebook – Google 検索。
動画で示されているように、testNGを使用してこのコードを実行すると、 テストケース 失敗しています。 失敗の理由: 合格する前のテスト ケースの依存関係があるため、現在実行中のテスト ケースのみが合格します。
この場合、
- 最初に実行されるメソッドは openBrowser()。 依存関係がないためパスされました。
- XNUMX番目に実行されるメソッドは、 FaceBookPageTitleVerification(); 検索ボタンをクリックしてブラウザのタイトルを確認しようとしているため、失敗します。
- 検索アクティビティが処理されていない場合、他のステップがどのように渡されるのかがわかります。 したがって、これが私のテストケースが失敗する理由です。
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
のデモ TestNG アルファベット順の優先順位のないコード
優先順位を指定しない場合、testng はコード内の実装場所に関係なく、メソッド名のアルファベット順に基づいて @Test メソッドを実行します。
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test public void c_method(){ System.out.println("I'm in method C"); } @Test public void b_method(){ System.out.println("I'm in method B"); } @Test public void a_method(){ System.out.println("I'm in method A"); } @Test public void e_method(){ System.out.println("I'm in method E"); } @Test public void d_method(){ System.out.println("I'm in method D"); } }
出力
I'm in method A I'm in method B I'm in method C I'm in method D I'm in method E
メソッドをランダムな方法 (c、b、a、e、d) で定義しましたが、testng はメソッド名に基づいてアルファベット順を考慮してメソッドを実行し、出力にもそれが反映されました。
優先順位の設定方法 TestNG
前の例で示したように、このシナリオを通過するにはシーケンス処理が必要であるため、前のコード部分を次のように変更します。 優先度パラメータ したがって、各テストは、割り当てられた優先順位に従って実行される必要があります。
ご覧のとおり、各テスト ケースに優先度を割り当てました。これは、優先度の低い値のテスト ケースが最初に実行されることを意味します。
testNG の優先度の実際の動作
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Browser say Firefox @Test (priority=1) public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test (priority=2) public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test (priority=3) public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test (priority=4) public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
コードの説明
各テストケースに優先順位を割り当てた後、下記のビデオ 2 に示すように、testNG を使用して上記のコードを実行します。
ここでは、テスト ケースに優先順位が付けられていることがわかります。 優先順位の低いテスト ケースが最初に実行されます。つまり、テスト ケースの優先順位に従って順次実行されます。 したがって、現在はすべてのテスト ケースが合格しています。
Eclipse のコンソールに注意してください:
出力 :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
番号 0 の優先順位が最も高く (最初に実行されます)、優先順位は指定された番号に基づいて続きます。つまり、0 は 1 よりも高い優先順位を持ち、1 は 2 よりも高い優先順位を持ちます。
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=1) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
出力
I'm in method E I'm in method A I'm in method D I'm in method C I'm in method B
ここでは、優先順位を 0,1,3,6,9、0、1、XNUMX、XNUMX として指定しています。 したがって、優先度 XNUMX のメソッドが最初に実行され、次に優先度 XNUMX のメソッドが実行されます。 ここでは、優先順位を指定したため、アルファベット順のメソッド名は考慮されません。
同じ優先度のメソッド
メソッドに同じ優先度が含まれる可能性があります。その場合、testng は優先度が同じメソッド名のアルファベット順を考慮します。
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
出力
I'm in method E I'm in method D I'm in method A I'm in method C I'm in method B
ここで、'e' と 'd' は優先度の値に基づいて実行されます。しかし、メソッド 'a' と 'c' には同じ優先度の値 (6) が含まれています。したがって、ここで testng は 'a' と 'c' のアルファベット順を考慮し、それに応じて実行します。
優先(優先度が同じ)方法と非優先方法の両方を組み合わせる
この場合、1 つのテストクラスで 2 つのケースをカバーします。
- 同じ優先度値を持つメソッド。
- 複数の非優先メソッド。
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test() public void c_method(){ System.out.println("I'm in method C"); } @Test() public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=6) public void d_method(){ System.out.println("I'm in method D"); } }
出力:
I'm in method B I'm in method C I'm in method E I'm in method A I'm in method D
PASSED: b_method PASSED: c_method PASSED: e_method PASSED: a_method PASSED: d_method
説明:
第一希望: 優先順位のないメソッド: 'c' および 'b': アルファベット順に基づき、'b' が最初に実行され、次に 'c' が実行されます。
第二希望: 優先メソッド: 'a'、'e'、'd': 'e' は最も高い優先度 (0) を持つため、最初に実行されました。'a' メソッドと 'd' メソッドの優先度は同じであるため、testng はメソッド名のアルファベット順を考慮しました。そのため、'a' が最初に実行され、次に 'd' が実行されました。
大文字と小文字を区別する TestNG
ご参考までに、testNGで優先度を定義するための標準的な構文があります。 @テスト (優先度=4)、他の構文で定義しているとします。 @テスト (優先順位=1) IDE ではコンパイル エラーとして表示されます。 以下の画像を参照してください。
まとめ:
ご覧のとおり、一連のテストケースを特定の順序で実行する必要がある場合は、次のコマンドを使用して簡単に実行できます。 優先 実行ツールとして testNG を使用します。
このチュートリアルはRamandeep SinghとRamaの貢献により実現しました。 Krishna ガッド