Selenium-grids

提供:Dev Guides
移動先:案内検索

セレン-グリッド

Selenium Gridは、複数の物理マシンまたは仮想マシンにテストを分散して、スクリプトを並行して(同時に)実行できるようにするツールです。 迅速かつ正確なフィードバックを提供することで、ブラウザー間およびプラットフォーム間のテストプロセスを劇的に加速します。

Selenium Gridを使用すると、同じコードベースを使用するWebDriverまたはSelenium Remote Controlテストの複数のインスタンスを並行して実行できるため、実行するシステムにコードが存在する必要がありません。 selenium-server-standaloneパッケージには、グリッドでスクリプトを実行するためのHub、WebDriver、およびSelenium RCが含まれています。

Selenium Gridには、ハブとノードがあります。

  • ハブ-ハブは、テストがトリガーされる中心点として機能するサーバーとしても理解できます。 Selenium Gridにはハブが1つしかなく、単一のマシンで一度起動されます。
  • ノード-ノードは、テストを実行するハブに接続されているSeleniumインスタンスです。 グリッドには1つ以上のノードがあり、任意のOSであることができ、Seleniumでサポートされているブラウザーを含めることができます。

建築

次の図は、Selenium Gridのアーキテクチャを示しています。

selenium_ide_121

グリッドでの作業

グリッドを使用するには、特定のプロトコルに従う必要があります。 このプロセスに関与する主な手順は次のとおりです-

  • ハブの構成
  • ノードの構成
  • スクリプトを開発してXMLファイルを準備する
  • テスト実行
  • 結果分析

これらの各ステップについて詳しく説明します。

ハブの構成

selenium_ide_45

  • ステップ2 *-次のコマンドを使用してSelenium Serverを起動し、ハブを起動します。 ここで、ポート「4444」を使用してハブを起動します。

-ポート#4444で実行されている他のアプリケーションがないことを確認してください。

java -jar selenium-server-standalone-2.25.0.jar -port 4444 -role hub -nodeTimeout 1000

selenium_ide_122

  • ステップ3 *-ブラウザーを開き、ハブ(ステップ#2を実行したシステム)からURL http//localhost:4444に移動します。

selenium_ide_123

  • ステップ4 *-「コンソール」リンクをクリックし、「構成の表示」をクリックします。 ハブの構成は次のように表示されます。 現在のところ、ノードはないため、詳細を確認することはできません。

selenium_ide_124

ノードの構成

  • ステップ1 *-ノード(スクリプトを実行する場所)にログオンし、「selenium-server-standalone-2.42.2」をフォルダーに配置します。 ノードの起動中にselenium-server-standalone JARを指す必要があります。
  • ステップ2 *-以下のコマンドを使用してFireFoxノードを起動します。
java -jar D:\JAR\selenium-server-standalone-2.42.2.jar
   -role node -hub http://10.30.217.157:4444/grid/register
   -browser browserName = firefox -port 5555

どこで、

D:\ JAR \ selenium-server-standalone-2.42.2.jar = Selenium ServerスタンドアロンJarファイルの場所(ノードマシン上)

http://10.30.217.157:4444 =ハブのIPアドレスと4444はハブのポート

browserName = firefox(ノードのブラウザー名を指定するパラメーター)

5555 = Firefoxノードが稼働するポート。

selenium_ide_125

selenium_ide_126

  • ステップ4 *-次に、Internet Explorerノードを起動します。 IEノードを起動するには、Internet Explorerドライバーをノードマシンにダウンロードする必要があります。
  • ステップ5 *-Internet Explorerドライバーをダウンロードするには、http://docs.seleniumhq.org/download/に移動し、OSのアーキテクチャに基づいて適切なファイルをダウンロードします。 ダウンロードした後、exeファイルを解凍し、IEノードを起動するときに参照する必要があるフォルダーにそのファイルを配置します。

selenium_ide_131

  • ステップ6 *-次のコマンドを使用してIEを起動します。
C:\>java -Dwebdriver.ie.driver = D:\IEDriverServer.exe
   -jar D:\JAR\selenium-server-standalone-2.42.2.jar
   -role webdriver -hub http://10.30.217.157:4444/grid/register
   -browser browserName = ie,platform = WINDOWS -port 5558

どこで、

D:\ IEDriverServer.exe =ダウンロードされたIEドライバーの場所(ノードマシン上)

D:\ JAR \ selenium-server-standalone-2.42.2.jar = Selenium ServerスタンドアロンJarファイルの場所(ノードマシン上)

http://10.30.217.157:4444 =ハブのIPアドレスと4444はハブのポート

browserName = ie(ノードのブラウザー名を指定するパラメーター)

5558 = IEノードが稼働しているポート。

selenium_ide_127

selenium_ide_128

  • ステップ8 *-Chromeノードを起動します。 Chromeノードを起動するには、ノードマシンにChromeドライバーをダウンロードする必要があります。
  • ステップ9 *-Chromeドライバーをダウンロードするには、http://docs.seleniumhq.org/download/に移動し、次に[サードパーティブラウザードライバー]領域に移動して、以下に示すようにバージョン番号 '2.10’をクリックします。

selenium_ide_132

  • ステップ10 *-OSのタイプに基づいてドライバーをダウンロードします。 Windows環境で実行するため、Windows Chromeドライバーをダウンロードします。 ダウンロードしたら、exeファイルを解凍し、Chromeノードの起動中に参照する必要があるフォルダーに配置します。

selenium_ide_133

  • ステップ11 *-次のコマンドを使用してChromeを起動します。
C:\>java -Dwebdriver.chrome.driver = D:\chromedriver.exe
   -jar D:\JAR\selenium-server-standalone-2.42.2.jar
   -role webdriver -hub  http://10.30.217.157:4444/grid/register
   -browser browserName = chrome, platform = WINDOWS -port 5557

どこで、

D:\ chromedriver.exe =ダウンロードしたchromeドライバーの場所(ノードマシン上)

D:\ JAR \ selenium-server-standalone-2.42.2.jar = Selenium ServerスタンドアロンJarファイルの場所(ノードマシン上)

http://10.30.217.157:4444 =ハブのIPアドレスと4444はハブのポート

browserName = chrome(ノードのブラウザー名を指定するパラメーター)

5557 = chromeノードが稼働しているポート。

selenium_ide_129

selenium_ide_130

スクリプトを開発してXMLファイルを準備する

  • ステップ1 *-TestNGを使用してテストを開発します。 次の例では、リモートwebDriverを使用してこれらのブラウザーをそれぞれ起動します。 ドライバーがノードで実行するすべての情報を持つように、その機能をドライバーに渡すことができます。

ブラウザパラメータは、「XML」ファイルから渡されます。

package TestNG;

import org.openqa.selenium.*;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;

import java.net.URL;
import java.util.concurrent.TimeUnit;
import java.net.MalformedURLException;

public class TestNGClass {
   public WebDriver driver;
   public String URL, Node;
   protected ThreadLocal<RemoteWebDriver> threadDriver = null;

   @Parameters("browser")
   @BeforeTest
   public void launchapp(String browser) throws MalformedURLException {
      String URL = "http://www.calculator.net";

      if (browser.equalsIgnoreCase("firefox")) {
         System.out.println(" Executing on FireFox");
         String Node = "http://10.112.66.52:5555/wd/hub";
         DesiredCapabilities cap = DesiredCapabilities.firefox();
         cap.setBrowserName("firefox");

         driver = new RemoteWebDriver(new URL(Node), cap);
        //Puts an Implicit wait, Will wait for 10 seconds before throwing exception
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        //Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else if (browser.equalsIgnoreCase("chrome")) {
         System.out.println(" Executing on CHROME");
         DesiredCapabilities cap = DesiredCapabilities.chrome();
         cap.setBrowserName("chrome");
         String Node = "http://10.112.66.52:5557/wd/hub";
         driver = new RemoteWebDriver(new URL(Node), cap);
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        //Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else if (browser.equalsIgnoreCase("ie")) {
         System.out.println(" Executing on IE");
         DesiredCapabilities cap = DesiredCapabilities.chrome();
         cap.setBrowserName("ie");
         String Node = "http://10.112.66.52:5558/wd/hub";
         driver = new RemoteWebDriver(new URL(Node), cap);
         driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

        //Launch website
         driver.navigate().to(URL);
         driver.manage().window().maximize();
      } else {
         throw new IllegalArgumentException("The Browser Type is Undefined");
      }
   }

   @Test
   public void calculatepercent() {
     //Click on Math Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();

     //Click on Percent Calculators
      driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();

     //Enter value 10 in the first number of the percent Calculator
      driver.findElement(By.id("cpar1")).sendKeys("10");

     //Enter value 50 in the second number of the percent Calculator
      driver.findElement(By.id("cpar2")).sendKeys("50");

     //Click Calculate Button
     //driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr/td[2]/input")).click();
     //Get the Result Text based on its xpath
      String result =
         driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/span/font/b")).getText();

     //Print a Log In message to the screen
      System.out.println(" The Result is " + result);

      if(result.equals("5")) {
         System.out.println(" The Result is Pass");
      } else {
         System.out.println(" The Result is Fail");
      }
   }

   @AfterTest
   public void closeBrowser() {
      driver.quit();
   }
}
  • ステップ2 *-ブラウザパラメータはXMLを使用して渡されます。 プロジェクトフォルダーの下にXMLを作成します。

selenium_ide_134

  • ステップ3 *-「一般」から「ファイル」を選択し、「次へ」をクリックします。

selenium_ide_135

  • ステップ4 *-ファイルの名前を入力し、[完了]をクリックします。

selenium_ide_136

  • ステップ5 *-以下に示すように、プロジェクトフォルダーの下にTestNg.XMLが作成されます。

selenium_ide_137

  • ステップ6 *-XMLファイルの内容を以下に示します。 すべてのテストが並行して実行されるように、3つのテストを作成してスイートに入れ、parallel = "tests"に言及します。
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "Suite" parallel = "tests">

   <test name = "FirefoxTest">
   <parameter name = "browser" value = "firefox"/>
      <classes>
         <class name = "TestNG.TestNGClass"/>
      </classes>
   </test>

   <test name = "ChromeTest">
   <parameter name = "browser" value = "chrome"/>
      <classes>
         <class name = "TestNG.TestNGClass"/>
      </classes>
   </test>

   <test name = "IETest">
   <parameter name = "browser" value = "ie"/>
      <classes>
         <class name = "TestNG.TestNGClass"/>
      </classes>
   </test>

</suite>

テスト実行

  • ステップ1 *-作成されたXMLを選択します。右クリックして、「実行」>>「TestNG Suite」を選択します。

selenium_ide_139

  • ステップ2 *-すべてのブラウザノードを起動したノードを開きます。 3つのブラウザがすべて同時に実行されていることがわかります。

selenium_ide_140

結果分析

  • ステップ1 *-実行が完了すると、他の実行と同様に結果を分析できます。 次のスナップショットに示すように、結果の概要がコンソールに出力されます。

selenium_ide_142

  • ステップ2 *-[実行中のスイートの結果]タブに移動すると、TestNGは以下に示すように結果の概要を表示します。

selenium_ide_141

  • ステップ3 *-HTMLを生成すると、テスト結果をHTML形式で見ることができます。

selenium_ide_143