Seleniumは現在、ブラウザでのテスト実行を自動化するための事実上の標準です。 すべての一般的なブラウザは、すぐにサポートされており、アーキテクチャはよく知られています。 お金のためにセレンを提供している会社さえあります。 しかし、テストのローカルデバッグには通常のSeleniumサーバーが便利ですか?
問題
Web開発者またはテスト自動化エンジニアとして、標準のSeleniumサーバーを使用する場合、次の欠点に直面する可能性があります。
- コンピューターにいくつかの異なるブラウザーをインストールする必要があります。 通常、Chromeなどの1つのブラウザーを使用しますが、FirefoxとOperaをインストールして、Seleniumテストをデバッグする必要があります。
- 同じブラウザの複数のバージョンをインストールして使用することは困難です。 パッケージからブラウザをインストールする場合、通常、インストールできるバージョンは1つだけです。 さらに、SeleniumとそのWebドライバーは通常、特定のパスで実行可能なブラウザーを探します。 したがって、複数のバージョンを使用するのは難しい作業になる可能性があります。
- オペレーティングシステムにインストールされているブラウザを実行すると、一時ファイルとキャッシュの内容でディスク領域が詰まります。
- ブラウザの設定が常にクリーンインストール後と同じ状態に維持される保証はありません。 たとえば、誤ってプロキシサーバーのアドレスやセキュリティ設定を変更する場合があります。 これにより、以前に実行したテストが失敗する可能性があります。
- 異なるブラウザで複数のテストを並行して実行することは困難です。 通常、これを行おうとすると、さまざまな問題が発生します。つまり、ウィンドウがフォーカスを奪い合い、トリガーをかけないイベント、予期しないCSSスタイルなどを獲得します。
- どのバージョンのSeleniumがどのバージョンのブラウザと互換性があるかを知る必要があります。 Webドライバーの実行可能ファイル(Chromedriverなど)についても同様です。
上記の欠点のリストは完全にはほど遠い。 しかし、そこで停止して、Seleniumテストをローカルでデバッグするはるかに便利な方法を試してみましょう。
セレノイド
以前の記事( パートI 、 パートII )では、Seleniumを操作するための新しいオープンツールであるGgrとSelenoidについて簡単に説明しました 。 Ggrは主に大規模なSeleniumクラスターに必要であり、マシンでのテストのデバッグには必要ありません。 今日は、 Dockerコンテナでブラウザを起動するSeleniumハブの代替実装であるSelenoidについて詳しく説明します。
しかし、なぜコンテナでブラウザを起動するのがそんなに便利なのでしょうか? また、SeleniumとSelenoidの開発者が提供するコンテナからブラウザを起動することの違いは何ですか? -Selenoidの主なアイデアは、Seleniumセッションごとに新しいコンテナーを開始し(つまり、新しいブラウザーを要求し)、セッションを閉じた直後にそれらを停止することです。 このアプローチにより、キャッシュ内の状態の保持と、異なるセッションで同じブラウザ設定を使用することに関連するすべての問題が即座に解決されます。 各コンテナには、特定のブラウザーバージョン、このブラウザーをサポートするWebドライバーまたはSeleniumサーバーの正しいバージョン、およびフォント、グラフィックライブラリなどのすべての依存関係が含まれています。 さらに、コンテナはブラウザプロセスの十分なレベルの分離を提供します。 これにより、異なるバージョンのブラウザーを無制限に並行して実行でき、フォーカスの問題を忘れることができます。 もちろん、これらの同じ問題は通常のSeleniumコンテナで解決できます。 ただし、Dockerに加えてSelenoidに似た動作を得るには、通常、 AnsibleやSaltなどの複雑な管理ツールを使用する必要があります。
設置
Selenoidを少し宣伝したので、Selenoidを使用するのがいかに簡単かを示します。 Seleniumを機能させるには、3つの短い手順に従う必要があります。
Dockerをインストールします。 これは通常、 APT 、 Yum 、 Homebrewなどのオペレーティングシステムの標準パッケージマネージャーを使用して行われます。 詳細については、Dockerのドキュメントを参照してください。
Selenoid設定を保存するディレクトリを作成し、設定ファイルを生成します。
# mkdir -p /etc/selenoid # docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aerokube/cm:1.0.0 selenoid \ --last-versions 2 --tmpfs 128 --pull > /etc/selenoid/browsers.json
後者のコマンドは、Firefox、Chrome、およびOperaの最新の2つのバージョンのDockerコンテナーイメージもダウンロードし、Selenoidの正しい構成ファイルを生成します。
- Selenoidを起動します。
# docker run -d --name selenoid -p 4444:4444 -v /etc/selenoid:/etc/selenoid:ro \ -v /var/run/docker.sock:/var/run/docker.sock aerokube/selenoid:1.1.1
それだけです-60秒が経過し、セレノイドは準備ができています。 JavaをインストールしてSeleniumを手動でダウンロードする必要はありません。 通常のSeleniumサーバーと同じURLを使用してテストを実行するだけです。
http://localhost:4444/wd/hub
銃口と統計の収集
Selenoidは、Ggrと組み合わせて使用して大規模なSeleniumクラスターを構成できるため、通常のSeleniumのGrid Consoleのようなグラフィカルインターフェイスはありません。 ブラウザの消費量を表示するには、2つの方法があります。
I. Selenoid UIでオプションの軽量コンテナーを起動します。 これは次のコマンドで実行されます。
# docker run -d --name selenoid-ui --net host aerokube/selenoid-ui:1.0.0
銃口はブラウザのhttp://localhost:8080/
で利用できます:
II。 Selenoid統計を外部システム( Graphite 、 InfluxDB 、 ElasticSearchなど )に送信します。 セレノイド統計は、次のURLで取得できます。
http://localhost:4444/status
データは、次の形式のJSONとして送信されます。
$ curl http://localhost:4444/status { "total": 80, "used": 14, "queued": 0, "pending": 1, "browsers": { "firefox": { "46.0": { "user1": 5, "user2": 6 }, "48.0": { "user2": 3 } } } }
Selenoidは、同時に開始できるコンテナーの数( 合計 )、現在実行中のコンテナーの数( 使用 )、キューで待機している要求の数( キューに入れられた )、まだ開始されているコンテナーの数( 保留中 )を返します。 browsers要素には、さまざまなユーザーによるブラウザの消費に関する情報が含まれています。 ユーザー名は、公開されている場合は基本HTTPヘッダーから取得され、公開されていない場合は不明に公開されます。 スクリプトを使用して、表示されたJSONを手動で解析できますが、この目的にはTelegrafを使用することをお勧めします。 Telegrafの使用方法の詳細については、ドキュメントのこのセクションをご覧ください。
ブラウザを備えたレディコンテナ
同意します。異なるブラウザでコンテナを自動的に起動するツールがあるのはクールです。 ただし、人気のあるブラウザのさまざまなバージョンを備えた既製のコンテナのセットを用意する方がさらに便利です。 Firefox、Chrome、Operaのさまざまなバージョンで多くの作業を行い、コンテナイメージを準備しました。 selenoid @ DockerHubで完全なリストを参照してください。
ブラウザの最新バージョンのセットを常に保持するには、時々コマンドを実行するだけです。
# docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aerokube/cm:1.0.0 \ selenoid --last-versions 2 --tmpfs 128 --pull > /etc/selenoid/browsers.json
このコマンドは、コンテナーの最新バージョンを自動的にダウンロードし、Selenoidの新しいJSON構成を生成します。 新しいブラウザーの使用を開始するには、Selenoidコマンドを送信して構成を再読み取りします(負荷がかかった状態で実行できます)。
# docker kill -s HUP selenoid
コンテナは、任意の画面解像度を設定する機能もサポートしています(デフォルトは1920x1080x24
)。 解像度を設定するには、ケーパビリティscreenResolution
渡すだけscreenResolution
。
screenResolution: "1280x1024x24"
おわりに
この記事では、Selenoidを使用してさまざまなブラウザーを効果的に管理する方法について説明しました。 私を信じて、Seleniumでの作業は快適になります。 効果的なテストインフラストラクチャの構築に関心がある場合は、 Githubで組織内の他のオープンツールをご覧になるか、Twitter @aerokubeを購読してください。
すばらしい絵の作者に感謝して、 それがどのように描かれたかを見てください。