Seleniumを使ってテスト自動化。[第5回 発展編. Selenium Gridを使用してマルチノード/マルチスレッドでテスト実施]



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など)
  • データーベースへの結果の出力
  • エビデンス取得処理の追加(スクリーンショット)