コンテンツにスキップ

Selenium Grid: 概要と設定方法

テストの自動化は、高品質のソフトウェアを迅速に提供するために重要なアクティビティです。ただし、テスト スイートが大きくなるにつれて、実行時間も長くなります。クロスブラウザーのテストは複雑になります。自動化の反復とスケーリングは困難になります。

ここで、分散テスト実行のゲームチェンジャーである Selenium Grid が登場します。

この包括的なガイドでは、Selenium Grid が並列テストによってテストの自動化を強化する方法を学びます。

以下について説明します。

  • Selenium Grid とは何か、どのように機能するか
  • Selenium Grid を使用する利点
  • 一般的な使用例とシナリオ
  • 設定方法と例
  • 最適化のベストプラクティス

始めましょう!

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

Selenium Grid は、Selenium Remote Control (RC) によって実現される分散テスト実行環境です。

これにより、自動化された Selenium テストを複数のマシン、ブラウザ、オペレーティング システム間ですべて中央ハブから並行して実行できます。

Selenium Grid が提供する主な機能は次のとおりです。

  • テストの並列実行 - 複数のノードにわたってテストを同時に実行します。
  • クロスブラウザテスト – 異なるブラウザおよびブラウザバージョン間でテストを実行します。
  • マルチ OS テスト – Windows、Linux、macOS などでテストします。
  • オンデマンドでのスケーリング – ノードを追加することでテスト実行機能をスケールアップします
  • 負荷分散 – ハブがノード間でテストを効率的に分散します。

これらの機能により、Selenium Grid は大規模な自動化や統合テストに非常に役立ちます。

主なコンポーネント

Selenium Grid には 3 つの主要コンポーネントがあります。

セレン グリッド ハブ – ハブは、テスト要求を受信し、実行のためにノードに配布する中央コントローラーです。

Selenium グリッド ノード – ノードは、実際のテストが行​​われるテスト実行環境です。複数のノードをハブに接続できます。

テスト/テストスクリプト – Selenium WebDriver API を使用した自動テスト スクリプト。特定のテスト ケースおよびシナリオを実行するコードが含まれています。

Selenium グリッドの仕組み

Selenium Grid によって分散テストの実行が可能になる方法は次のとおりです。

  1. テスト スクリプトは、テスト ケースを実行するために Grid Hub からテスト セッションを要求するように構成されています。
  2. テスト ケースのブラウザーとプラットフォームの要件に基づいて、ハブはそれらの機能を満たすノードにテスト ケースを割り当てます。
  3. ノードはブラウザを起動し、テスト スクリプトを実行します。
  4. テストの実行ステータスと結果はノードからハブに送信されます。
  5. ハブは結果をテスト スクリプトに伝えます。

この方法でテストの配布とルーティング結果を管理することにより、Selenium Grid は非常にスケーラブルな並列テスト実行を可能にします。

Selenium グリッドを使用する理由

Selenium Grid を使用する主な利点をいくつか見てみましょう。

より高速なテスト実行

これが、ほとんどのチームが Selenium Grid を使用する最大の動機です。

テスト スイートが大きくなるにつれて、テストを順番に実行すると非常に長い時間がかかることがあります。

1000 のテスト ケースを 10 回のテストあたり 167 分で順次実行すると、7 時間、つまり XNUMX 日近くかかります。

しかし、Selenium Grid を使用すると、複数のノード間でテストの実行を簡単に並列化でき、実行時間を大幅に短縮できます。

たとえば、これらの 1000 のテストを 10 ノードに分散すると、全体の実行時間がわずか 17 時間に短縮され、4 倍高速になります。

Testim の調査によると、チームは次のように報告しています。 テスト実行が 70% ~ 90% 高速化 Selenium Grid を実装した後。

強化されたテストカバレッジ

さまざまなブラウザ、バージョン、オペレーティング システムでアプリケーションをテストすることは、品質にとって非常に重要です。

しかし、これらすべてのテスト環境を手動でセットアップするには多大な労力が必要です。

Selenium Grid は、以下を提供する環境の混在で各テスト ケースを実行できるようにすることで、この問題を解決します。

  • クロスブラウザテスト
  • クロスプラットフォームテスト
  • 複数のバージョンでのテスト
  • さまざまな画面解像度でのテスト

これにより、テストが最大限の順列をカバーし、問題を早期に発見できるようになります。

費用対効果

Selenium Grid は、既存のマシンをノードとして活用できるようにすることで、インフラストラクチャのコストを最小限に抑えます。

追加の物理マシンや仮想マシンは必要ありません。

また、ハブによるテストの配布と一元管理により、テストのメンテナンスコストも削減します。

信頼性の高いテスト

ノード間でテストを分散すると、特定のノードでのテストが失敗した場合でも安定性を維持できます。

ハブは失敗したテストを別の利用可能なノードで自動的に再実行し、信頼性の高い結果をもたらします。

スケーラブル

テスト実行能力をスケールアップする必要がある場合は、新しいノードを Selenium Grid ハブに動的に接続できます。

このテスト環境のオンデマンド プロビジョニングにより、Selenium Grid は非常にスケーラブルになります。

たとえば、Mozilla は、増大するテストのニーズに対応するために、Selenium Grid を 400 ノードから 2500 ノードにスケールアップできます。

Selenium グリッドの使用例

Selenium Grid が作業を大幅に強化できる一般的なテスト自動化シナリオをいくつか示します。

大規模なテストスイート

数千または数万のテスト ケースを含むテスト スイートの場合、並列実行により合計実行時間を数日からわずか数時間に短縮できます。

テストの数逐次実行時間並列実行時間
10001週17 時間 (10 ノード)
50005週間3.5 日 (10 ノード)
1000010週間1週間(20ノード)

統合テスト

CI/CD パイプラインでは、迅速なフィードバックのためにテストの実行速度が重要です。

Selenium Grid は、自動化された UI テストを複数のノードに分散して同時に実行することで、統合テストを高速化します。

Testim は、金融サービスのクライアントが Selenium Grid を使用して CI テストの実行時間を 120 分からわずか 10 分に短縮したのを確認しました。

クロスブラウザテスト

ブラウザー間でのテストは不可欠ですが、リソースを大量に消費します。 Selenium Grid は、テストの配布を自動的に処理することで、クロスブラウザ テストを簡素化します。

1 回のテスト実行で、すべての主要ブラウザ上でアプリケーションがどのように動作するかを確認できます。

地理的に分散したチーム

開発チームが世界中に分散している場合、Selenium Grid ノードをその場所の近くにプロビジョニングできます。

これにより、テストのフィードバックが迅速に提供され、場所固有の問題が検出されます。

テストインフラストラクチャのスケールアップ

成長を続けるチームやアプリケーションにとって、自動化機能を手動でスケールアップするのは面倒です。

Selenium Grid を使用すると、要求に基づいて新しいノードを動的に接続することで、テスト容量を簡単にスケールアップできます。

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

計り知れない利点がわかったので、次は Selenium Grid のアーキテクチャの内部を見てみましょう。

ハブ

Selenium Grid ハブは、以下を処理する制御の中心点です。

  • テスト配布 - テストリクエストを受信し、ノードに割り当てます。
  • ノード処理 – ノードの登録とステータスを追跡します。
  • セッション管理 – ノード全体でアクティブなテスト セッションを管理します。
  • 負荷分散 – 利用可能なノード間でテストを均等に分散します。

テスト スクリプトが接続するための単一のエンドポイントを提供します。

Nodes

ノードは、自動テストを実行するように構成されたテスト実行環境です。

ノードハンドル:

  • テストの実行 – 割り当てられたテスト スクリプトを実行します。
  • ブラウザ管理 – セッション用に設定されたブラウザを起動します
  • レポート – テストのステータスと結果をハブに送信
  • クリーンアップ - テスト実行間の状態のリセット

各ノードを次のように構成できます。

  • ブラウザの種類とバージョン – Chrome、Firefox、Safari など。
  • オペレーティング システム – Windows、Linux、macOS など
  • 画面解像度 – 720p、1080p など

これにより、非常に多様なテスト環境のセットを作成できます。

テストスクリプト

テスト スクリプトには、Selenium WebDriver API を使用して記述された、特定のテスト ケースを実行するための段階的な手順が含まれています。

これらはハブと対話して次のことを行います。

  • 希望するブラウザ/OS 構成のテスト セッションをリクエストします。
  • 割り当てられたセッションのノード上でテスト ステップを実行します。
  • テスト結果をハブに報告する

Java、Python、C#、Ruby などの言語でテスト スクリプトを作成できます。

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

Selenium Grid のセットアップに必要な主要な手順を見てみましょう。

前提条件

  • マシンにインストールされた Java JDK 8+
  • Selenium スタンドアロン サーバーの JAR ファイルがダウンロードされました
  • 構成された各ブラウザの WebDriver

起動ハブ

次のコマンドを実行して、Selenium Grid ハブを起動します。


java -jar selenium-server-.jar hub 

これにより、デフォルトでポート 4444 でハブが起動します。

ノードの登録

ノードとして必要な各マシンで、次を実行します。

  
java -jar selenium-server-.jar node

これにより、マシンがデフォルト構成で登録されます。

次のようにノードのブラウザ機能を指定できます。


java -jar selenium-server-.jar node --browser browserName=chrome,version=109

Selenium ノードとして構成するすべてのマシンでこのコマンドを実行します。

テストスクリプトの構成

URL を指定してハブに接続するようにテスト スクリプトを更新します。


WebDriver driver = new RemoteWebDriver(new URL("http://<hub_ip>:4444/"), options); 

ハブはテストをノードに自動的に配布します。

拡大する

ステップ 2 を繰り返すことで、さらにノードを接続できます。ハブは、使用可能なすべてのノード間で負荷のバランスをとります。

Selenium Grid でのテストの実行

Python の例を使用して、グリッド上で Selenium テストを実行する方法を見てみましょう。

from selenium import webdriver

grid_hub = "http://1.2.3.4:4444/wd/hub"

# Browser options
chrome_options = webdriver.ChromeOptions() 
firefox_options = webdriver.FirefoxOptions()

# Test for Chrome
driver = webdriver.Remote(command_executor=grid_hub, options=chrome_options)
driver.get("http://www.google.com")
print("Chrome title is: " + driver.title)
driver.quit() 

# Test for Firefox
driver = webdriver.Remote(command_executor=grid_hub, options=firefox_options) 
driver.get("http://www.google.com")
print("Firefox title is: " + driver.title)
driver.quit()

このスクリプトは、Selenium Grid を使用して Chrome と Firefox の両方で同じテストを並行して実行する方法を示します。

主なハイライト

  • テスト スクリプトは RemoteWebDriver を使用してハブに接続します。
  • ブラウザ固有のオプションは個別に設定されます
  • ハブはテストを適切なノードに自動的に配布します。
  • スケールアップするには、さらに多くのノードを接続するだけで済みます

Selenium Grid を使用してテスト配布を処理すると、インフラストラクチャの管理ではなく、優れたテスト スクリプトの作成に集中できるようになります。

ベストプラクティス

Selenium Grid セットアップを最適化するためのヒントをいくつか紹介します。

ノード管理を自動化する

Docker や Kubernetes などのツールを使用して、要求に基づいてノードのスピンアップを自動化します。これにより、スケーラビリティが向上します。

ノードのコンテナ化

Docker のようなコンテナ プラットフォームは、同一の軽量ノード環境を一貫して作成するのに役立ちます。

テストスケジューラを使用する

テスト実行をオフピーク時間にスケジュールして、負荷を分散し、リソース使用率を最大化します。

再試行の実装

信頼性を高めるために、失敗したテストを別のノードで自動的に再試行するように構成します。

負荷テストの実行

Selenium Grid デプロイメントの負荷テストを行って、最大容量を測定し、ボトルネックを防ぎます。

使用状況の監視

ノードの使用率を長期的に追跡して、ノードの拡張を計画し、ハブの登録を最適化します。

主要な取り組み

最後に、Selenium Grid について知っておくべき重要な点を以下に示します。

  • 複数のノードにテストを分散することで、高速な並列テスト実行が可能になります。

  • ノードが実際のテストを実行している間、ハブはテストの割り当てを管理します。

  • Selenium Grid は、大規模なテストの自動化を非常に高速かつ効率的に実行します。

  • クロスブラウザーテストと並列実行による統合テストが簡素化されます。

  • セットアップに必要な作業は最小限で、ハブを起動してノードを接続するだけです。

  • オンデマンドでノードを追加することで、テスト機能を簡単にスケールアップできます。

  • コンテナ化およびオーケストレーション ツールにより、管理と利用率が向上します。

したがって、遅くて複雑なテストの自動化や CI のボトルネックに対処している場合は、Selenium Grid が解決策となります。その分散アーキテクチャは、大規模なテスト実行に革命をもたらします。

試してみてください。他にご質問がある場合はお知らせください。

参加する

あなたのメールアドレスは公開されません。 必須フィールドは、マークされています *