用語集 · UI 自動化
Selenium Grid
別名: Selenium Grid 4, セレニウムグリッド, Selenium グリッド
定義
WebDriver のセッションをリモートのブラウザーノードに振り分ける Selenium のサーバーで、多数のブラウザー・バージョン・マシンでテストを並列実行できます。
Selenium Grid を使うと、テストはブラウザーを別の場所に作成できます。テストは RemoteWebDriver を使って Grid の URL を指定します。Grid は条件に合うブラウザーを持つノード(たとえば Linux 上の Chrome)を見つけ、そこでセッションを開始し、すべてのコマンドを中継します。多数のノードが同時にセッションを処理できるため、Grid は Selenium のスイートを並列に、かつ複数ブラウザーで実行するための定番の方法です。
例
公式の Docker イメージで、単一マシンの Grid を起動します。
docker run -d -p 4444:4444 --shm-size="2g" selenium/standalone-chrome
次にテストから接続します(Selenium 4、Java 21)。
ChromeOptions options = new ChromeOptions();
WebDriver driver = new RemoteWebDriver(
URI.create("http://localhost:4444").toURL(), options);
driver.get("https://example.com");
ブラウザーのオプションは、Grid がノードと照合する「ケイパビリティ(capabilities)」です。http://localhost:4444 の Grid UI では、ノード、スロット、実行中のセッションを確認できます。
構成(Grid 4)
Selenium Grid 4 は 3 つのモードで実行できます。
- スタンドアロン(Standalone): すべてを 1 つのプロセスで動かします。ローカルでの利用や小規模な CI ジョブに適しています。
- ハブとノード(Hub and node): 1 つのハブがセッションを受け付け、複数のノードがブラウザーを実行します。
java -jar selenium-server-<version>.jar hubと... nodeで起動します。 - 完全分散(Fully distributed): ハブの内部コンポーネント(Router、Distributor、Session Map、New Session Queue、Event Bus)を別々のプロセスとして実行します。Kubernetes に適しています。
Grid 4 では古い /wd/hub パスも不要になりました(ただし引き続き受け付けます)。
よくある間違い
- Grid がテストを並列化してくれると思い込む。 Grid が提供するのはブラウザーです。テストを並行実行するようにテストランナー(JUnit 5、TestNG)を設定する必要があり、テストは独立している必要があります。
- スロット数よりスレッド数が多い。 余ったセッション要求はキューに入り、タイムアウトすることがあります。ランナーの並列数を利用可能なスロット数に合わせましょう。
- ドライバーを終了しない。
driver.quit()を忘れると、セッションがタイムアウトするまでスロットを占有し続けます。 - Docker の共有メモリが小さい。 コンテナのデフォルトの
/dev/shmでは Chrome がクラッシュします。そのため--shm-sizeフラグを指定します。
クラウドのホスティングサービスも Grid と同じ WebDriver エンドポイントを公開しているため、RemoteWebDriver のコードは同じです。変わるのは URL とケイパビリティだけです。