Selenium-grids
セレン-グリッド
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のアーキテクチャを示しています。
グリッドでの作業
グリッドを使用するには、特定のプロトコルに従う必要があります。 このプロセスに関与する主な手順は次のとおりです-
- ハブの構成
- ノードの構成
- スクリプトを開発してXMLファイルを準備する
- テスト実行
- 結果分析
これらの各ステップについて詳しく説明します。
ハブの構成
- ステップ1 *-http://docs.seleniumhq.org/download/から最新のSelenium ServerスタンドアロンJARファイルをダウンロードします。 以下に示すバージョンをクリックしてダウンロードします。
- ステップ2 *-次のコマンドを使用してSelenium Serverを起動し、ハブを起動します。 ここで、ポート「4444」を使用してハブを起動します。
注-ポート#4444で実行されている他のアプリケーションがないことを確認してください。
java -jar selenium-server-standalone-2.25.0.jar -port 4444 -role hub -nodeTimeout 1000
- ステップ3 *-ブラウザーを開き、ハブ(ステップ#2を実行したシステム)からURL http//localhost:4444に移動します。
- ステップ4 *-「コンソール」リンクをクリックし、「構成の表示」をクリックします。 ハブの構成は次のように表示されます。 現在のところ、ノードはないため、詳細を確認することはできません。
ノードの構成
- ステップ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ノードが稼働するポート。
- ステップ3 *-コマンドの実行後、ハブに戻ります。 URL(http://10.30.217.157:4444)に移動すると、ハブに接続されたノードが表示されます。
- ステップ4 *-次に、Internet Explorerノードを起動します。 IEノードを起動するには、Internet Explorerドライバーをノードマシンにダウンロードする必要があります。
- ステップ5 *-Internet Explorerドライバーをダウンロードするには、http://docs.seleniumhq.org/download/に移動し、OSのアーキテクチャに基づいて適切なファイルをダウンロードします。 ダウンロードした後、exeファイルを解凍し、IEノードを起動するときに参照する必要があるフォルダーにそのファイルを配置します。
- ステップ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ノードが稼働しているポート。
- ステップ7 *-コマンドの実行後、ハブに戻ります。 URL(http://10.30.217.157:4444)に移動すると、ハブに接続されているIEノードが表示されます。
- ステップ8 *-Chromeノードを起動します。 Chromeノードを起動するには、ノードマシンにChromeドライバーをダウンロードする必要があります。
- ステップ9 *-Chromeドライバーをダウンロードするには、http://docs.seleniumhq.org/download/に移動し、次に[サードパーティブラウザードライバー]領域に移動して、以下に示すようにバージョン番号 '2.10’をクリックします。
- ステップ10 *-OSのタイプに基づいてドライバーをダウンロードします。 Windows環境で実行するため、Windows Chromeドライバーをダウンロードします。 ダウンロードしたら、exeファイルを解凍し、Chromeノードの起動中に参照する必要があるフォルダーに配置します。
- ステップ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ノードが稼働しているポート。
- ステップ12 *-コマンドを実行した後、ハブに戻ります。 URL(http://10.30.217.157:4444)に移動すると、Hubに接続されているChromeノードが表示されます。
スクリプトを開発して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を作成します。
- ステップ3 *-「一般」から「ファイル」を選択し、「次へ」をクリックします。
- ステップ4 *-ファイルの名前を入力し、[完了]をクリックします。
- ステップ5 *-以下に示すように、プロジェクトフォルダーの下にTestNg.XMLが作成されます。
- ステップ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」を選択します。
- ステップ2 *-すべてのブラウザノードを起動したノードを開きます。 3つのブラウザがすべて同時に実行されていることがわかります。
結果分析
- ステップ1 *-実行が完了すると、他の実行と同様に結果を分析できます。 次のスナップショットに示すように、結果の概要がコンソールに出力されます。
- ステップ2 *-[実行中のスイートの結果]タブに移動すると、TestNGは以下に示すように結果の概要を表示します。
- ステップ3 *-HTMLを生成すると、テスト結果をHTML形式で見ることができます。