このたび、ウェブアプリのテストと自動化のユースケースに特化した新しい Chrome フレーバー、Chrome for Testing をリリースいたしました。この記事では、Chrome チームがこの機能が必要であると考えた理由を説明し、デベロッパーにとって Chrome for Testing が役立つ具体的な例を紹介します。
背景
ブラウザのテストは、高品質のウェブ エクスペリエンスを生み出すために不可欠な要素です。手動と自動のどちらで行われるかは関係ありません。その一方で、適切なブラウザ テスト環境のセットアップは難しいことで知られており、ウェブ デベロッパーの最大の課題として一貫して 報告されています。本日は、こうした問題を軽減する変更についてお知らせします。
自動更新: ユーザーにとっては便利、デベロッパーにとっては負担が大きい
Chrome の最大の特長の 1 つは自動更新機能です。ユーザーは、最新のウェブ プラットフォーム機能、ブラウザ機能、バグ修正などを含む、最新かつ安全なブラウザ バージョンを使用していることに満足しています。
しかし、一連のエンドツーエンドのテストを実行するデベロッパーは、まったく異なる視点を持っているかもしれません。
- テストの実行を繰り返しても一貫した再現可能な結果を得る必要がありますが、2 回の実行の間にブラウザの実行ファイルまたはバイナリが自身を更新するよう決定した場合は、そうならないことがあります。
- ブラウザの特定のバージョンを固定して、そのバージョン番号をソースコード リポジトリにチェックインすると、古い commit とブランチをチェックアウトして、その時点からブラウザ バイナリに対してテストを再実行できます。
自動更新されるブラウザ バイナリでは、このようなことは不可能です。そのため、自動テストに通常の Chrome インストールを使用することはおすすめしません。これは、通常のブラウザ ユーザーにとって良いことと、自動テストを行うデベロッパーにとって良いこととの間の根本的な不一致です。
バージョン管理されたブラウザのバイナリ
自動更新はさておき、特定のバージョンの Chrome バイナリを見つけるのが難しい場合もあるでしょう。Google では、バージョン管理された Chrome のダウンロードを意図的に行っていません。これは、ユーザーがバージョン番号を気にする必要がないためです。ユーザーはできるだけ早く最新バージョンにアップデートする必要があります。これはユーザーにとっては便利ですが、Chrome の古いバージョンでバグレポートを再現する必要があるデベロッパーにとっては手間がかかります。
この問題のより具体的な例は、ブラウザの自動化に ChromeDriver を使用する場合です。なんらかの方法で Chrome バイナリをダウンロードするだけでなく、2 つのバイナリの互換性を確保するために、対応するバージョンの ChromeDriver バイナリも必要です。
これらの問題を解決する適切な方法がないため、多くのデベロッパーが Chromium の(Chrome ではなく)バイナリをダウンロードします。ただし、この方法にはいくつかの欠陥があります。まず、こうした Chromium バイナリは、すべてのプラットフォームで確実に利用できるわけではありません。2 つ目は、Chrome のリリース プロセスとは別にビルド、公開されるという点です。そのため、各バージョンをユーザー向けの実際の Chrome リリースにマッピングすることはできません。第三に、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 そのもの以外にもさまざまな興味深い機会をもたらします。たとえば、ChromeDriver のリリース プロセスを Chrome for Testing インフラストラクチャに統合することで、たとえば、一致する Chrome と ChromeDriver のバイナリの検索に関する問題について前述したように、問題を完全に排除できます。ユーザーが直面するこの課題を解決するだけでなく、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
これらのバイナリをダウンロードするための自動スクリプトを独自に作成する場合は、Google がサポートします。Chrome リリース チャンネル(Stable、Beta、Dev、Canary)ごとに利用可能な最新のバージョンの JSON API エンドポイントを提供しています。最新のステータスの概要については、Chrome for Testing の提供状況ダッシュボードをご覧ください。