での並列実行 Selenium: セッション処理と TestNG 依存関係

スクリプトを並列実行する方法を理解するには、まず次のことを理解しましょう。

なぜセッション処理が必要なのでしょうか?

テストの実行中、 Selenium WebDriver は、指定されたコマンドを実行するために常にブラウザと対話する必要があります。実行時、現在の実行が完了する前に、他の誰かが同じマシンおよび同じ種類のブラウザで別のスクリプトの実行を開始する可能性もあります。

セッション処理

このような状況では、2 つの異なる実行が互いに重ならないメカニズムが必要です。これは、セッション処理を使用して実現できます。 Selenium.

でセッション処理を実現する方法 Selenium ウェブドライバー?

ソースコードを確認してみると、 Selenium WebDriver では、「sessionId」という名前の変数が見つかります。 WebDriver オブジェクトの新しいインスタンスを作成するたびに、新しい「sessionId」が生成され、その特定のセッション ID が付加されます。 Firefox/Chrome/IE ドライバー ()。

でセッション処理を実現 Selenium webdriver

したがって、これ以降に行うことはすべて、その特定の環境でのみ実行されます。 Firefox ブラウザセッション。

でセッション処理を実現 Selenium webdriver

これは組み込み機能であるため、セッション 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」属性を使用できます。

並列テストを実行する Selenium

スイート タグの並列属性は、次の XNUMX つの値を受け入れることができます。

テスト すべてのテストケースが含まれていますのタグ テスト xml ファイルは並列実行されます。
クラス 内のすべてのテスト ケース Java クラスは並行して実行されます
メソッド @Test アノテーションが付いたすべてのメソッドは並列実行されます。
インスタンス 同じインスタンス内のテスト ケースは並列実行されますが、XNUMX つの異なるインスタンスの XNUMX つのメソッドは別のスレッドで実行されます。

属性 thread-count を使用すると、この実行に割り当てるスレッドの数を指定できます。

完全な例: この例では、XNUMX つのテスト ケースが並行して実行され、ログイン データが入力されます。 https://demo.guru99.com/

完成したプロジェクトは次のようになります。

並列テストを実行する Selenium

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 を使用して、スクリプトを並列実行します。
  • 属性の依存関係を使用して、テストの実行順序を設定できます。