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 browser.
  • 第二の方法 (Googleを起動) 初期化されたブラウザで Google.com が起動されることを示します。
  • XNUMX番目の方法 (SeachAndClick1stLink を実行)検索で検索を実行する州 box (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」のアルファベット順を考慮し、それに応じて実行します。

優先(優先度が同じ)方法と非優先方法の両方を組み合わせる

この場合、XNUMX つの testng クラスで XNUMX つのケースをカバーします。

  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 では大文字と小文字が区別される

まとめ

ご覧のとおり、一連のテストケースを特定の順序で実行する必要がある場合は、次のコマンドを使用して簡単に実行できます。 優先 testNG を実行ツールとして使用します。

このチュートリアルは、Ramandeep Singh と Rama Krishna Gadde の貢献により可能になりました。