独自の Grid 3 のセットアップ
Selenium Grid を使用するには、ノード用の独自のインフラストラクチャを維持する必要があります。これは面倒で時間のかかる作業になる可能性があるため、多くの組織は Amazon EC2 や Google Compute などの IaaS プロバイダーを利用してこのインフラストラクチャを提供しています。
その他のオプションとしては、クラウドで Selenium Grid をサービスとして提供している Sauce Labs や Testing Bot などのプロバイダーを利用することが挙げられます。また、独自のハードウェアでノードを実行することももちろん可能です。この章では、独自のノードインフラストラクチャを備えた独自の Grid を実行するという選択肢について詳しく説明します。
クイックスタート
この例では、Selenium 2 Grid Hub を起動し、WebDriver ノードと Selenium 1 RC レガシーノードの両方を登録する方法を示します。また、Java から Grid を呼び出す方法も示します。ここでは Hub とノードが同じマシン上で実行されている様子を示していますが、もちろん selenium-server-standalone を複数のマシンにコピーすることもできます。
selenium-server-standalone
パッケージには、Grid を実行するために必要な Hub、WebDriver、およびレガシー RC が含まれており、*ant* はもう必要ありません。selenium-server-standalone.jar
は https://selenium.dokyumento.jp/downloads/ からダウンロードできます。
ステップ 1: Hub を起動する
Hub は、テスト要求を受信し、適切なノードに配布する中心点です。配布は capabilities ベースで行われます。つまり、capabilities のセットを必要とするテストは、そのセットまたはサブセットの capabilities を提供するノードにのみ配布されます。
テストで要求される capabilities は、名前が示すとおり *desired (要求されるもの)* に過ぎないため、Hub は要求された capabilities セットに完全に一致するノードを見つけることを保証できません。
コマンドプロンプトを開き、selenium-server-standalone.jar
ファイルをコピーしたディレクトリに移動します。スタンドアロンサーバーに -role hub
フラグを渡すことで Hub を起動します。
java -jar selenium-server-standalone.jar -role hub
Hub はデフォルトでポート 4444 をリッスンします。ブラウザウィンドウを開き、https://:4444/grid/console にアクセスすると、Hub のステータスを確認できます。
デフォルトポートを変更するには、コマンドを実行するときにリッスンするポートを表す整数を指定して、オプションの -port
フラグを追加できます。また、JSON 設定ファイル (下記参照) に表示されている他のすべてのオプションは、コマンドラインフラグとして使用できます。
上記の簡単なコマンドだけでも十分ですが、より高度な設定が必要な場合は、便宜上、JSON 形式の設定ファイルを指定して、Hub の起動時に設定することもできます。次のようにして実行できます。
java -jar selenium-server-standalone.jar -role hub -hubConfig hubConfig.json -debug
以下に hubConfig.json
ファイルの例を示します。ステップ 2 では、ノード設定ファイルを提供する方法について詳しく説明します。
{
"_comment" : "Configuration for Hub - hubConfig.json",
"host": ip,
"maxSession": 5,
"port": 4444,
"cleanupCycle": 5000,
"timeout": 300000,
"newSessionWaitTimeout": -1,
"servlets": [],
"prioritizer": null,
"capabilityMatcher": "org.openqa.grid.internal.utils.DefaultCapabilityMatcher",
"throwOnCapabilityNotPresent": true,
"nodePolling": 180000,
"platform": "WINDOWS"}
ステップ 2: ノードを起動する
新しい WebDriver 機能を持つ Grid、Selenium 1 RC 機能を持つ Grid、またはその両方を同時に実行する場合でも、同じ selenium-server-standalone.jar
ファイルを使用してノードを起動します。
java -jar selenium-server-standalone.jar -role node -hub https://:4444
-port
フラグでポートが指定されていない場合、空いているポートが選択されます。1 台のマシンで複数のノードを実行できますが、その場合は、システムのメモリリソースと、テストでスクリーンショットを撮る場合のスクリーンショットの問題に注意する必要があります。
オプションを使用したノードの設定
前述のように、下位互換性のために、「wd」および「rc」ロールは依然として「node」ロールの有効なサブセットです。ただし、これらのロールはリモート接続のタイプを対応する API に制限しますが、「node」は RC と WebDriver の両方のリモート接続を許可します。
コマンドラインで JVM プロパティ ( -D
フラグを *-jar 引数の前* に使用) も渡すと、これらが取得され、ノードに伝播されます。
-Dwebdriver.chrome.driver=chromedriver.exe
JSON を使用したノードの設定
JSON 設定ファイルで設定された Grid ノードを起動することもできます。
java -Dwebdriver.chrome.driver=chromedriver.exe -jar selenium-server-standalone.jar -role node -nodeConfig node1Config.json
こちらは nodeConfig.json
ファイルの例です。
{
"capabilities": [
{
"browserName": "firefox",
"acceptSslCerts": true,
"javascriptEnabled": true,
"takesScreenshot": false,
"firefox_profile": "",
"browser-version": "27",
"platform": "WINDOWS",
"maxInstances": 5,
"firefox_binary": "",
"cleanSession": true
},
{
"browserName": "chrome",
"maxInstances": 5,
"platform": "WINDOWS",
"webdriver.chrome.driver": "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe"
},
{
"browserName": "internet explorer",
"maxInstances": 1,
"platform": "WINDOWS",
"webdriver.ie.driver": "C:/Program Files (x86)/Internet Explorer/iexplore.exe"
}
],
"configuration": {
"_comment" : "Configuration for Node",
"cleanUpCycle": 2000,
"timeout": 30000,
"proxy": "org.openqa.grid.selenium.proxy.WebDriverRemoteProxy",
"port": 5555,
"host": ip,
"register": true,
"hubPort": 4444,
"maxSession": 5
}
}
-host
フラグに関する注意点
Hub とノードの両方で、-host
フラグが指定されていない場合、デフォルトで 0.0.0.0
が使用されます。これは、マシンのすべてのパブリック (非ループバック) IPv4 インターフェースにバインドされます。特別なネットワーク構成や、追加のネットワークインターフェースを作成するコンポーネントがある場合は、Hub/ノードが別のマシンから到達できるようにする値を -host
フラグに設定することをお勧めします。
ポートの指定
Hub で使用されるデフォルトの TCP/IP ポートは 4444 です。ポートを変更する必要がある場合は、上記の構成を使用してください。
トラブルシューティング
ログファイルの使用
高度なトラブルシューティングのために、システムメッセージをログに記録するログファイルを指定できます。Selenium GRID Hub またはノードを -log 引数で起動します。以下の例を参照してください。
java -jar selenium-server-standalone.jar -role hub -log log.txt
問題が発生した場合は、お気に入りのテキストエディタを使用してログファイル (上記の例では log.txt) を開き、「ERROR」ログを見つけてください。
-debug
引数の使用
また、-debug
引数を使用して、デバッグログをコンソールに出力することもできます。Selenium Grid Hub またはノードを -debug
引数で起動します。以下の例を参照してください。
java -jar selenium-server-standalone.jar -role hub -debug
警告
Selenium Grid は、適切なファイアウォール許可を使用して外部アクセスから保護する必要があります。
Grid を保護しないと、次のいずれかまたは複数が起こる可能性があります。
- Grid インフラストラクチャへのオープンアクセスを提供することになります。
- サードパーティが内部 Web アプリケーションやファイルにアクセスできるようになります。
- サードパーティがカスタムバイナリを実行できるようになります。
公開されている Grid がどのように悪用される可能性があるかについて概説している、Detectify のこちらのブログ記事を参照してください: Grid を公開したままにしないでください。
Docker Selenium
Docker は、コンテナと呼ばれるユニットで Selenium Grid インフラストラクチャをプロビジョニングおよびスケーリングするための便利な方法を提供します。コンテナは、目的のアプリケーションを実行するために必要なすべて (すべての依存関係を含む) を、さまざまなマシン上で信頼性が高く再現可能な方法で含む、標準化されたソフトウェアユニットです。
Selenium プロジェクトは、Docker イメージのセットを管理しており、これをダウンロードして実行すると、すぐに動作する Grid を起動して実行できます。ノードは Firefox と Chrome の両方で利用できます。Grid をプロビジョニングする方法の詳細については、Docker Selenium リポジトリを参照してください。
前提条件
Grid を実行するための唯一の要件は、Docker がインストールされ、動作していることです。 Docker をインストールしてください。