Chrome for Testing: ブラウザの自動化のための信頼性の高いダウンロード

このたび Chrome for Testing をリリースすることになりました。これは、ウェブアプリのテストと自動化のユースケースに特化した新しい Chrome フレーバーです。この記事では、Chrome チームがこの機能が必要であると判断した理由と、Chrome for Testing がデベロッパーにとって役立つ具体的な例について説明します。

背景

ブラウザのテストは、手動か自動かにかかわらず、質の高いウェブ エクスペリエンスを生み出すために不可欠な要素です。それと同時に、適切なブラウザのテスト環境をセットアップすることは非常に困難であり、ウェブ デベロッパーにとって最大の問題点として一貫して 報告されています。本日は、こうした課題が軽減されることを願っております。

自動更新: ユーザーにとって最適だがデベロッパーにとっては厄介

Chrome の目玉機能の一つは自動更新機能です。ユーザーは、最新のウェブ プラットフォーム機能、ブラウザの機能、バグ修正など、常に最新かつ安全なバージョンのブラウザを使用していることに満足しています。

しかし、エンドツーエンドのテストスイートを実行するデベロッパーは、まったく異なる視点を持っている可能性があります。

  • テストを繰り返し実行しても、一貫性があり、再現可能な結果を得る必要がありますが、ブラウザの実行ファイルまたはバイナリが 2 回の実行の間に自身を更新することを決定した場合には、このような結果が得られない可能性があります。
  • 特定のブラウザ バージョンを固定し、そのバージョン番号をソースコード リポジトリにチェックインすると、古い commit やブランチをチェックアウトして、その時点からブラウザのバイナリに対してテストを再実行できます。

自動更新のブラウザ バイナリでは、これらはどれも不可能です。そのため、通常の Chrome インストールを自動テストに使用しないことをおすすめします。これは、通常のブラウザ ユーザーにとって良いことと、自動テストを行うデベロッパーにとって良いこととの間の根本的なミスマッチです。

バージョン管理されたブラウザ バイナリ

自動更新は別にして、特定のバージョンの Chrome バイナリを見つけるのが難しいと感じたこともあります。Google では、バージョン管理された Chrome のダウンロードを意図的に公開していません。ユーザーがバージョン番号を気にする必要がないためです。可能な限り、常に最新バージョンに更新する必要があります。これはユーザーにとっては便利ですが、デベロッパーが古いバージョンの Chrome でバグレポートを再現しなければならない場合は手間がかかります。

この問題のより具体的な例としては、ブラウザの自動化に ChromeDriver を使用する場合が挙げられます。なんらかの方法で Chrome バイナリをダウンロードするだけでなく、2 つのバイナリの互換性を確保するために、対応するバージョンの ChromeDriver バイナリも必要です。

これらの問題を解決する適切な方法がないため、多くのデベロッパーが Chrome ではなく Chromium のバイナリをダウンロードしていますが、この方法にはいくつかの欠陥があります。まず、これらの Chromium バイナリは、すべてのプラットフォームで確実に利用できるわけではありません。第二に、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 にとどまらない興味深い機能をもたらします。たとえば、前述した 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

これらのバイナリをダウンロードする自動スクリプトを独自に構築したい方のために、Google がサポートいたします。Chrome リリース チャンネルごとに、利用可能な最新バージョン(Stable、Beta、Dev、Canary)の JSON API エンドポイントを提供しています。最新のステータスの概要については、Chrome for Testing の提供状況ダッシュボードをご覧ください。