Selenium Grid によるマルチノード処理の導入
Selenium Grid を使うと複数のPC(ノード)でウエブブラウザを立ち上げ、テストシナリオを実行することができます。以下の図を見てみましょう。
Hubを介して各ノードに処理が振り分けられ、各ノードに配置してあるWebDriverが各ブラウザを立ち上げ処理を実行します。
Selenium公式サイト”https://selenium.dev/documentation/en/grid/“より引用
導入方法
実は導入手順は英文ですが、公式サイトに詳しく記載されています。不明な点があれば、公式サイトを確認することをお勧めします。
それでは実際に行っていきましょう。
Hub側:
これまでスタンドアロンでSeleniumを動かしていたPCをHubにしましょう。Java がインストールされていることを前提とします。
Step 1. Selenium Server(Grid)のダウンロード
https://selenium.dev/downloads/
Step 2. ダウンロードした.jarファイルの実行
ダウンロードした.jarファイルのあるフォルダに移動して、以下のようにコマンドを実行するとhubサーバーとして立ち上がります。(selenium-server-standalone-3.141.59.jar ファイルの場合。)
java -jar selenium-server-standalone-3.141.59.jar -role hub
また、初期設定を記載したJSONファイルを事前に準備して、サーバーを立ち上げる際に読込ませることもできます。
java -jar selenium-server-standalone-3.141.59.jar -role hub -hubConfig hubConfig.json
以下のような情報が出力されると成功です。
この例では画面上で指定されている通り、今後追加される各ノードはこのHubのURL”http://172.16.200.84:4444/grid/register/“に向けて登録(レジスター)する必要があります。
Step3.管理コンソールを開いてみる
“http://<Hub serverのアドレス>:4444/wd”を開くと以下のように管理画面が表示されます。
Hubのセットアップは以上で完了です。
Node側:
手順はほぼHub側と同じです。こちらもPCにJava がインストールされていることを前提とします。
Step 1. Selenium Server(Grid)のダウンロード
https://selenium.dev/downloads/
Step 2. ダウンロードした.jarファイルの実行
ダウンロードした.jarファイルのあるフォルダに移動して、以下のようにコマンドを実行するとNodeサーバーとして立ち上がります。(selenium-server-standalone-3.141.59.jar ファイルの場合。)
java -Dwebdriver.chrome.driver=C:\selenium\chromedriver_79\chromedriver.exe -jar C:\selenium\selenium-server-standalone-3.141.59.jar -role node -nodeConfig node1Config.json -hub http://172.16.200.84:4444/grid/register -port 5566
コマンド内で以下のことを行っています。
- 使用するWebDriverを指定
- jarファイルを指定
- roleを”node”にする
- 起動時に読込む初期設定ファイル(node1Config.json)を指定
- 接続するHubサーバのURLを指定
以下のように”The node is registered to the hub and ready to use“のメッセージが出現すれば成功です。
Step3.再度、管理コンソールを開いてみる
“http://<Hub serverのアドレス>:4444/wd”を開き[console]リンクをクリックしてみましょう。
以下のようにNodeが追加されていることが確認できます。
また、上図中にChromeブラウザアイコンが5つありますが、これは「このノードはあと5つWebdriverを起動してブラウザ操作するキャパシティがあります」という意味です。実はStep2でノードを立ち上げるときに読込まれた設定ファイル(node1Config.json)内でこの最大値が設定されていました。
※ノードの数を増やす際は同じステップを各マシンで繰り返します。
以上でSelenium Gridの設定は終了です。
使用方法
プログラムでのGridの使用方法はスタンドアロンの場合と大きな違いはありません。
例えばスタンドアロンでChromeを利用する場合、以下のようにChromeDriverを利用しますが、
driver = new ChromeDriver(options);
グリッドを利用する場合は以下のようにRemoteWebDriverを利用します。
DesiredCapabilities dc = new DesiredCapabilities(); dc.setBrowserName("chrome"); dc.setPlatform(Platform.WINDOWS); dc.setCapability(ChromeOptions.CAPABILITY, options); driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), dc);
※実際のテストではDesiredCapabilitiesを利用して様々な条件を設定して、起動してくるブラウザを制御します。(初期サイズや位置、モードなど。)
いかがでしたでしょうか。駆け足でしたが、Selenium Gridの紹介でした。興味のある方は公式サイトを訪れてみることをお勧めします。
今回でSeleniumシリーズは終了しますが、紹介しきれなかった点を列挙しておきます。さらなるテストツールのさらなる発展にご利用ください。
- Assertionツールの導入(例:testNGなど)
- ログ出力処理の導入(例:Log4j2など)
- データーベースへの結果の出力
- エビデンス取得処理の追加(スクリーンショット)