本日、ウェブアプリのテストと自動化のユースケースを対象とした新しい Chrome フレーバーである Chrome for Testing を発表いたします。この記事では、Chrome チームがこの機能を必要とした理由と、デベロッパーとして Chrome for Testing を活用できる具体的な例について説明します。
背景
ブラウザ テストは、手動で行うか自動で行うかにかかわらず、高品質のウェブ エクスペリエンスを作成するうえで不可欠な要素です。同時に、適切なブラウザ テスト環境のセットアップは非常に難しく、ウェブ デベロッパーの最大の課題として常に 報告されています。本日、この問題を緩和するための変更を発表します。
自動更新: ユーザーには便利だが、デベロッパーには負担
Chrome の最も注目すべき機能の 1 つは、自動更新機能です。ユーザーは、最新のウェブ プラットフォーム機能、ブラウザ機能、バグの修正を含む、最新かつ安全なブラウザ バージョンを常に使用できることを喜んでいます。
ただし、一連のエンドツーエンド テストを実行するデベロッパーは、まったく異なる視点を持っている可能性があります。
- テストを繰り返し実行しても一貫性のある再現可能な結果を得たいが、ブラウザの実行可能ファイルまたはバイナリが 2 回の実行の間に自動更新されると、この結果が得られない可能性がある。
- 特定のブラウザ バージョンを固定し、そのバージョン番号をソースコード リポジトリにチェックインして、古いコミットとブランチをチェックアウトし、その時点のブラウザ バイナリに対してテストを再実行できるようにします。
自動更新されるブラウザ バイナリでは、これらの操作はできません。そのため、自動テストに通常の Chrome インストールを使用しない方がよい場合があります。これは、通常のブラウザ ユーザーにとってのメリットと、自動テストを行うデベロッパーにとってのメリットとの根本的な不一致です。
バージョン管理されたブラウザ バイナリ
自動更新以外にも、特定のバージョンの Chrome バイナリを見つけるのが難しいと感じたことがあるかもしれません。Google は、バージョン番号をユーザーが気にする必要がないように、バージョン付きの Chrome ダウンロードを意図的に提供していません。ユーザーは常にできるだけ早く最新バージョンに更新されるべきです。これはユーザーにとっては便利ですが、古い Chrome バージョンでバグレポートを再現する必要があるデベロッパーにとっては厄介です。
この問題のより具体的な例としては、ブラウザの自動化に ChromeDriver を使用する場合が挙げられます。Chrome バイナリを何らかの方法でダウンロードするだけでなく、2 つのバイナリの互換性を確保するために、対応するバージョンの ChromeDriver バイナリも必要になります。
これらの問題を解決する適切な方法がないため、多くのデベロッパーが Chromium(Chrome ではない)バイナリをダウンロードしていることがわかっています。ただし、このアプローチにはいくつかの欠点があります。まず、これらの Chromium バイナリはすべてのプラットフォームで確実に利用できるわけではありません。第 2 に、Chrome のリリース プロセスとは別に構築、公開されるため、バージョンを実際のユーザー向け Chrome リリースにマッピングすることはできません。3 つ目は、Chromium は Chrome とは異なるということです。
解決策: Chrome for Testing
これらの問題を解決するために設計された Chrome for Testing は、テストのユースケースを対象とした専用の Chrome フレーバーです。自動更新がなく、Chrome リリース プロセスに統合されており、すべての Chrome リリースで利用できます。テストのユースケースに悪影響を与えずに、通常の Chrome にできるだけ近いバージョニングされたバイナリ。
Chrome for Testing を作成するために、Chromium と Chrome のコードベースに変更を加え、すべてのチャンネル(Stable、Beta、Dev、Canary)で Chrome のリリース プロセスと歩調を合わせてバイナリをビルドして一般公開されているバケットにアップロードするインフラストラクチャをセットアップしました。
Chrome for Testing のインフラストラクチャは、Chrome 自体を超えた興味深い機会を切り開きます。たとえば、以前に説明した、一致する Chrome と ChromeDriver バイナリを見つけるのが難しいという問題は、ChromeDriver のリリースプロセスを Chrome for Testing インフラストラクチャに統合することで完全に解消できます。このユーザー向けの課題を解決するだけでなく、ChromeDriver のリリースを Chrome のリリースと同期させ、ChromeDriver の手動リリース プロセスをなくすこともできます。
Chrome for Testing のバイナリを入手するにはどうすればよいですか?
プラットフォーム用の Chrome for Testing バイナリをダウンロードする最も簡単な方法は、npm で利用できる @puppeteer/browsers コマンドライン ユーティリティを使用することです。次に例を示します。
# Download the latest available Chrome for Testing binary corresponding to the Stable channel.
npx @puppeteer/browsers install chrome@stable
# Download a specific Chrome for Testing version.
npx @puppeteer/browsers install chrome@116.0.5793.0
# Download the latest available ChromeDriver version corresponding to the Canary channel.
npx @puppeteer/browsers install chromedriver@canary
# Download a specific ChromeDriver version.
npx @puppeteer/browsers install chromedriver@116.0.5793.0
これらのバイナリをダウンロードするための自動スクリプトを独自に作成したい場合は、次の手順に沿って操作してください。Chrome のリリース チャンネル(Stable、Beta、Dev、Canary)ごとに利用可能な最新バージョンを含む JSON API エンドポイントを提供しています。最新のステータスの概要については、Chrome for Testing の可用性ダッシュボードをご覧ください。