Selenium Grid チュートリアル: ハブとノードのセットアップ (例)

Seleniumグリッドとは何ですか?

セレングリッド Selenium Suite の一部であり、異なるブラウザ、オペレーティング システム、マシン間で複数のテストを並行して実行することに特化しています。 これは、サーバーがハブとして機能するリモート ブラウザ インスタンスのコマンドをルーティングすることによって実現されます。 テストを実行するには、ユーザーがリモート サーバーを構成する必要があります。

Selenium Grid には、古い Grid 2 と新しい Grid 1 の 2 つのバージョンがあります。Grid 2 は Selenium チームによって徐々に非推奨になっているため、ここでは Grid 1 のみに焦点を当てます。

Selenium グリッド アーキテクチャ

Selenium Grid にはハブとノードのアーキテクチャがあります。

Selenium グリッド アーキテクチャ
Selenium グリッド アーキテクチャ

ハブ

  • ハブは、テストをロードする中心点です。
  • グリッド内にはハブが XNUMX つだけ存在する必要があります。
  • ハブは 7 台のマシン (たとえば、OS が Windows XNUMX でブラウザが IE のコンピュータ) 上でのみ起動されます。
  • ハブを含むマシンでテストが実行されますが、ノード上でブラウザが自動化されていることがわかります。

Nodes

  • ノードは、ハブにロードしたテストを実行する Selenium インスタンスです。
  • グリッドには XNUMX つ以上のノードが存在できます。
  • ノードは、異なるプラットフォームやブラウザを備えた複数のマシン上で起動できます。
  • ノードを実行するマシンは、ハブのプラットフォームと同じプラットフォームである必要はありません。

Selenium Grid はハブ ノードの概念を使用しており、テストは と呼ばれる単一のマシン上でのみ実行します。 ハブ、ただし実行は、と呼ばれる別のマシンによって行われます。 ノード

Selenium グリッドをセットアップするにはどうすればよいですか?

このセクションでは、2 台のマシンを使用します。 最初のマシンはハブを実行するシステムとなり、もう一方のマシンはノードを実行します。 簡単にするために、ハブが実行されるマシンを「マシン A」と呼び、ノードが実行されるマシンを「マシン B」と呼びます。 IP アドレスを記録することも重要です。 マシン A の IP アドレスが 192.168.1.3 で、マシン B の IP アドレスが 192.168.1.4 だとします。

ステップ1) Selenium サーバーを次からダウンロードします。 こちらをクリックすると、ツールが開きます。.

Selenium グリッドのセットアップ

ステップ2) Selenium Server .jar ファイルはハード ドライブのどこにでも配置できます。 ただし、このチュートリアルでは、これをマシン A とマシン B の両方の C ドライブに配置します。これにより、Selenium Grid のインストールは完了です。 次のことwing この手順により、ハブとノードが起動します。

ステップ3)

  • これからハブを起動します。 マシン A に移動します。コマンド プロンプトを使用して、マシン A のルート (C ドライブ) に移動します。これは、Selenium サーバーを配置したディレクトリだからです。
  • コマンド プロンプトで次のように入力します。 java -jar selenium-server-standalone-2.30.0.jar -role ハブ
  • ハブは正常に起動されるはずです。 コマンド プロンプトは次の画像のように表示されるはずです。

Selenium グリッドのセットアップ

ステップ4) ハブが実行されているかどうかを確認するもう 4444 つの方法は、ブラウザを使用することです。 Selenium Grid は、デフォルトで、Web インターフェイスにマシン A のポート XNUMX を使用します。 ブラウザを開いて、次のサイトにアクセスするだけです。 http://localhost:4444/grid/console

Selenium グリッドのセットアップ

また、マシン B がハブの Web インターフェイスにアクセスできるかどうかを確認するには、そこでブラウザを起動し、「iporhostnameofmachineA」にハブが実行されているマシンの IP アドレスまたはホスト名を入力します。 マシン A の IP アドレスは 192.168.1.3 なので、マシン B のブラウザで次のように入力する必要があります。 http://192.168.1.3:4444/grid/console

ステップ5)

  • ハブがすでにセットアップされているので、ノードを起動します。 マシン B に移動し、そこでコマンド プロンプトを起動します。
  • ドライブ C のルートに移動し、以下のコードを入力します。 IP アドレス 192.168.1.3 を使用したのは、このアドレスでハブが実行されているためです。 ここではポート 5566 も使用しましたが、任意の空きポート番号を選択できます。
  • 注: を使用する場合は、Gecko ドライバーへのパスを指定する必要があります。 Firefox。 使用する必要がある更新されたコードは次のとおりです
java -Dwebdriver.gecko.driver="C:\geckodriver.exe" -jar selenium-server-standalone-3.4.0.jar -role webdriver -hub http://192.168.1.3:4444/grid/register -port 5566

Selenium グリッドのセットアップ

  • Enter キーを押すと、コマンド プロンプトは次の画像のようになります。

Selenium グリッドのセットアップ

ステップ6) Selenium Grid Web インターフェイスに移動し、ページを更新します。 このようなものが表示されるはずです。

Selenium グリッドのセットアップ

この時点で、すでに単純なグリッドが構成されています。 これで、マシン B でリモートからテストを実行する準備が整いました。

Selenium グリッドをいつ使用するか?

次のいずれかまたは両方を実行したい場合は、Selenium Grid を使用する必要があります。wing:

  • さまざまなブラウザ、オペレーティング システム、マシンに対してテストを同時に実行します。 これにより、アプリケーションが確実に テスト は、ブラウザと OS の幅広い組み合わせと完全に互換性があります。
  • テストスイートの実行時間を節約します。 たとえば、一度に 4 つのテストを実行するように Selenium Grid を設定すると、スイート全体を約 4 倍の速さで完了できるようになります。

グリッド 1.0 とグリッド 2.0

Following Selenium Grid 1 と 2 の主な違いは次のとおりです。

グリッド1 グリッド2
Selenium Grid 1 には、Selenium RC サーバーとは異なる独自のリモート コントロールがあります。 これらは XNUMX つの異なるプログラムです。 Selenium Grid 2 が Selenium Server jar ファイルにバンドルされるようになりました
インストールして設定する必要があります アパッチ グリッド 1 を使用する前に、まず Ant を実行してください。 Grid 2 に Apache Ant をインストールする必要はありません。
Selenium RC コマンド/スクリプトのみをサポートできます。 Selenium RC スクリプトと WebDriver スクリプトの両方をサポートできます。
リモコンごとに自動化できるブラウザは XNUMX つだけです。 5 つのリモコンで最大 XNUMX つのブラウザを自動化できます。

Selenium グリッドは XNUMX つの異なる方法でセットアップできます。 XNUMX つはコマンドライン経由、もう XNUMX つは JSON 構成ファイル経由です。

グリッド上で実行できるテスト スクリプトの設計

グリッド上で実行されるテスト スクリプトを設計するには、次を使用する必要があります。 求められる能力リモートウェブドライバー オブジェクト。

  • 求められる能力 のタイプを設定するために使用されます ブラウザ > OS 自動化するということです。
  • リモートウェブドライバー は、テストを実行するノード (またはマシン) を設定するために使用されます。

使用するには 求められる能力 オブジェクトを使用するには、まずこのパッケージをインポートする必要があります

グリッド上で実行できるテスト スクリプトの設計

使用するには リモートウェブドライバー オブジェクトの場合、これらのパッケージをインポートする必要があります。

グリッド上で実行できるテスト スクリプトの設計

DesiredCapabilites オブジェクトの使用

Grid の Web インターフェイスに移動し、自動化するブラウザの画像の上にマウスを置きます。 注意してください プラットフォーム、ブラウザ名 ツールチップで表示されます。

DesiredCapabilites オブジェクトの使用

この場合、プラットフォームは「XP」、ブラウザ名は「」です。Firefoxに設立された地域オフィスに加えて、さらにローカルカスタマーサポートを提供できるようになります。」

以下に示すように、WebDriver でプラットフォームとブラウザ名を使用します (もちろん、最初に必要なパッケージをインポートする必要があります)。

DesiredCapabilites オブジェクトの使用

RemoteWebDriver オブジェクトの使用

RemoteWebDriver に必要なパッケージをインポートし、上で作成した DesiredCapabilities オブジェクトを RemoteWebDriver オブジェクトのパラメーターとして渡します。

RemoteWebDriver オブジェクトの使用

グリッド上でサンプル テスト ケースを実行する

以下は単純な WebDriver です テスト で作成できるコード Eclipse これを実行すると、マシン B で自動化が実行されます。

import org.openqa.selenium.*; 
import org.openqa.selenium.remote.DesiredCapabilities; 
import java.net.MalformedURLException; 
import java.net.URL; 
import org.openqa.selenium.remote.RemoteWebDriver; 
import org.testng.Assert;
import org.testng.annotations.*; 

public class Grid_2 {
 WebDriver driver;
 String baseUrl, nodeURL; 
 @BeforeTest 
 public void setUpWthrows MalformedURLException {
 baseUrl = "http://newtours.demoaut.com/";
 nodeURL = "http://192.168.1.4:5566/wd/hub"; 
 DesiredCapabilities capability = DesiredCapabilities.firefox();
 capability. setBrowserName("firefox");
 capability. setPlatform(Platform.XP);
 driver = new RemoteWebDriver(new URL(nodeURL), capability); 
} 
@AfterTest 
public void afterTest() {
 driver.quit(); 
 }
@Test 
public void simpleTest() { 
driver.get(baseUr1);
 Assert.assertEquas("Welcome: Mercury Tours", driver.getTitle()); } 
} 

テストはパスするはずです。

サンプル テスト ケースをグリッド上で実行する サンプル テスト ケースをグリッド上で実行する

JSON ファイルを使用した Selenium グリッド構成

JSON は Javascript Object Notation の略です。 これは、ブラウザと Web サーバー間のデータ交換に使用される標準形式です。 Selenium には、Selenium グリッドのセットアップに使用できる JSON 構成ファイルが組み込まれています。

以下は、JSON 構成ファイルを使用して Selenium グリッドを構成する手順です。

ステップ1) 以下のパスを使用して、JSON 構成ファイルのコードをダウンロードします。

https://github.com/SeleniumHQ/selenium/blob/selenium-3.141.59/java/server/src/org/openqa/grid/common/defaults/DefaultHub.json

これがコードです

{
	  "port": 4444,
	  "newSessionWaitTimeout": -1,
	  "servlets" : [],
	  "withoutServlets": [],
	  "custom": {},
	  "capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
	  "registryClass": "org.openqa.grid.internal.DefaultGridRegistry",
	  "throwOnCapabilityNotPresent": true,
	  "cleanUpCycle": 5000,
	  "role": "hub",
	  "debug": false,
	  "browserTimeout": 0,
	  "timeout": 1800
}

ステップ2) コードをコピーし、拡張子「.json」を付けてメモ帳などのテキスト エディタに貼り付けます。

ステップ3)コマンドプロンプトを使用して以下のコマンドを使用してハブを起動します。

java -jar selenium-server-standalone-2.53.1.jar -role hub -hubConfig hubconfig.json

注意: Selenium スタンドアロン jar ファイルと json ファイルは同じディレクトリに存在する必要があります

ステップ4) ハブが正常にセットアップされたことを示す以下の画面が表示されます。

JSON ファイルを使用した Selenium グリッドの構成

ステップ5) Webブラウザを開いて、以下のURLに接続してみてください。

http://192.168.43.223:4444/grid/console

注意: URL はマシンごとに異なる場合があります。 上の画面で「ノードの登録先」が続く URL を使用する必要があります。

ステップ6) Grid Console 画面が表示され、ハブが稼働中であることが示されます。

JSON ファイルを使用した Selenium グリッドの構成

JSON を使用して NODE を構成する

ステップ1) 以下の URL を使用して、Selenium が提供するサンプル ノード構成ファイルをダウンロードします。

https://github.com/SeleniumHQ/selenium/blob/selenium-2.53.0/java/server/src/org/openqa/grid/common/defaults/DefaultNode.json

注意: Selenium 3.0 以降を使用している場合は、以下の JSON ファイルを使用する必要があります

https://github.com/SeleniumHQ/selenium/blob/selenium-3.141.59/java/server/src/org/openqa/grid/common/defaults/DefaultNodeWebDriver.json

ステップ2) コードをコピーしてメモ帳などのテキスト エディタに貼り付け、拡張子「.json」を付けてファイルを保存します。

ステップ3)

コマンドプロンプトで以下のコマンドを実行します

Java-Dwebdriver.chrome.driver="chromedriver.exe" -Dwebdriver.ie.driver="IEDriverServer.exe" -Dwebdriver.gecko.driver="geckodriver.exe" -jar selenium-server-standalone-2.53.1.jar -role node -nodeConfig node1.json

注意: コマンドを実行する前に、各ブラウザのドライバーがローカル マシンのディレクトリにダウンロードされていることを確認してください。

ステップ4) Enterキーを押すと以下の画面が表示されます

JSON を使用してノードを構成する

ステップ5) グリッド コンソールに移動して、ノードが正常に構成されているかどうかを確認します。

JSON を使用してノードを構成する

ブラウザはグリッド コンソールに表示されます。 したがって、ノードが正常に構成されていることを確認できます。

Selenium グリッド上のサンプル テスト ケース:

 package com.objectrepository.demo;
 import org.openqa.selenium.*;
 import org.openqa.selenium.remote.DesiredCapabilities;
 import java.net.MalformedURLException;
 import java.net.URL;
 import org.openqa.selenium.remote.RemoteWebDriver;
 import org.testng.Assert;
 import org.testng.annotations.*;

 public class SeleniumGrid {

     WebDriver driver;
     String baseURL, nodeURL;

     @BeforeTest
     public void setUp() throws MalformedURLException {
         baseURL = "http://demo.guru99.com/test/guru99home/";
         nodeURL = "http://192.168.43.223:5566/wd/hub";
         DesiredCapabilities capability = DesiredCapabilities.chrome();
         capability.setBrowserName("chrome");
         capability.setPlatform(Platform.WIN10);
         driver = new RemoteWebDriver(new URL(nodeURL), capability);
     }

     @AfterTest
     public void afterTest() {
         driver.quit();
     }
     @Test
     public void sampleTest() {
         driver.get(baseURL);
         

         if (driver.getPageSource().contains("MOBILE TESTING")) {
             Assert.assertTrue(true, "Mobile Testing Link Found");
         } else {
             Assert.assertTrue(false, "Failed: Link not found");
         }

     }

 }

上記のコードは Chrome ブラウザを起動し、「baseURL」変数で指定された URL に移動します。 ページにリンク名「Mobile Testing」が表示されることを確認しました

「nodeURL」変数の URL は、リモート マシンの IP アドレスを反映するように変更できます。 テスト結果は生成されたデフォルトのTestNGレポートで確認できます

まとめ

  • Selenium Grid は複数のテストを同時に実行するために使用されますneo通常、さまざまなブラウザーやプラットフォーム上で使用されます。
  • グリッドはハブノードの概念を使用します。
  • ハブは、テストをロードする中心点です。
  • ノードは、ハブにロードしたテストを実行する Selenium インスタンスです。
  • Selenium Grid をインストールするには、Selenium Server jar ファイルをダウンロードするだけで済みます。このファイルは、Selenium RC テストの実行に使用されるものと同じです。
  • ハブが実行されているかどうかを確認するには 2 つの方法があります。XNUMX つはコマンド プロンプトを使用する方法、もう XNUMX つはブラウザを使用する方法です。
  • グリッド上でテスト スクリプトを実行するには、DesiredCapabilities オブジェクトと RemoteWebDriver オブジェクトを使用する必要があります。
  • DesiredCapabilites は、自動化するブラウザと OS の種類を設定するために使用されます。
  • RemoteWebDriver は、テストを実行するノード (またはマシン) を設定するために使用されます。