での並列実行 Selenium: セッション処理と TestNG 依存関係
スクリプトを並列実行する方法を理解するには、まず次のことを理解しましょう。
なぜセッション処理が必要なのでしょうか?
テストの実行中、 Selenium WebDriver は、指定されたコマンドを実行するために常にブラウザと対話する必要があります。実行時、現在の実行が完了する前に、他の誰かが同じマシンおよび同じ種類のブラウザで別のスクリプトの実行を開始する可能性もあります。
このような状況では、2 つの異なる実行が互いに重ならないメカニズムが必要です。これは、セッション処理を使用して実現できます。 Selenium.
でセッション処理を実現する方法 Selenium ウェブドライバー?
ソースコードを確認してみると、 Selenium WebDriver では、「sessionId」という名前の変数が見つかります。 WebDriver オブジェクトの新しいインスタンスを作成するたびに、新しい「sessionId」が生成され、その特定のセッション ID が付加されます。 Firefox/Chrome/IE ドライバー ()。
したがって、これ以降に行うことはすべて、その特定の環境でのみ実行されます。 Firefox ブラウザセッション。
これは組み込み機能であるため、セッション ID を明示的に割り当てる必要はありません。
コード例: ここでは、XNUMX つの異なる WebDriver に対して XNUMX つの異なるセッションが生成されます。
import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class SessionHandling { public static void main(String...strings ){ //First session of WebDriver WebDriver driver = new FirefoxDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //Second session of WebDriver WebDriver driver2 = new FirefoxDriver(); //Goto guru99 site driver2.get("https://demo.guru99.com/V4/"); } }
並列テストを実行する方法 Selenium
複数のテストを同時に実行したい場合があります。
このような場合は、「Parallel」属性を使用できます。
スイート タグの並列属性は、次の XNUMX つの値を受け入れることができます。
テスト | すべてのテストケースが含まれていますのタグ テスト xml ファイルは並列実行されます。 |
クラス | 内のすべてのテスト ケース Java クラスは並行して実行されます |
メソッド | @Test アノテーションが付いたすべてのメソッドは並列実行されます。 |
インスタンス | 同じインスタンス内のテスト ケースは並列実行されますが、XNUMX つの異なるインスタンスの XNUMX つのメソッドは別のスレッドで実行されます。 |
属性 thread-count を使用すると、この実行に割り当てるスレッドの数を指定できます。
完全な例: この例では、XNUMX つのテスト ケースが並行して実行され、ログイン データが入力されます。 https://demo.guru99.com/
完成したプロジェクトは次のようになります。
TestGuru99MultipleSession.java
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.testng.annotations.Test; public class TestGuru99MultipleSession { @Test public void executSessionOne(){ //First session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 1"); } @Test public void executeSessionTwo(){ //Second session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 2"); } @Test public void executSessionThree(){ //Third session of WebDriver System.setProperty("webdriver.chrome.driver","chromedriver.exe"); WebDriver driver = new ChromeDriver(); //Goto guru99 site driver.get("https://demo.guru99.com/V4/"); //find user name text box and fill it driver.findElement(By.name("uid")).sendKeys("Driver 3"); } }
TestNG.XML
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods" > <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"> </class> </classes> </test> </suite>
テストケースの順序と依存関係
順序と依存関係を設定できます テストケース 実行。
「testGuru99TC1」と「testGuru99TC2」という 99 つのテスト ケースがあり、「testGuru2TC99」の前にテスト ケース「testGuru1TCXNUMX」を実行するとします。 その場合、「dependsOnMethods」属性を使用して依存関係と実行順序を作成します。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd"> <suite name="TestSuite" thread-count="3" parallel="methods" > <test name="testGuru"> <classes> <class name="TestGuru99MultipleSession"> <include value="testGuru99TC1" dependsOnMethods=" testGuru99TC2"/> <include value="testGuru99TC2"/> </class> </classes> </test> </suite>
製品概要
- WebDriver の新しいインスタンスに対して新しい sessionID が作成されます。
- XNUMX つのセッションは XNUMX つの特定のブラウザーにバインドされます。
- 属性 thread とParallel を使用して、スクリプトを並列実行します。
- 属性の依存関係を使用して、テストの実行順序を設定できます。