新トレンド1:Seleniumに代わるコード型ツールの台頭
1つ目のトレンドは、Seleniumに代わる新しいコード型のブラウザテストツールの台頭です。
Seleniumは多くのユーザーの支持を集めましたが、「インストール手順が複雑(現在は改善されています)」「コマンドが冗長」「テストに必要な機能が不十分で、他ツールとの組み合わせやユーザー側での作り込みが必要」など、テストに使う上での課題も残っていました。Seleniumは「汎用ブラウザ操作ライブラリ」かつ「Web標準規格」だったため、テスト特化の機能やWeb標準ではないものは採用できなかったことも、課題の解決を難しく(または遅く)していました。
こうした状況を背景に、標準化にこだわらず、インストールがシンプルで、テストに役立つ様々な機能を搭載したブラウザテストツールが2018年前後から登場してきました。それが、JavaScriptベースのエンジンを使うことでシンプルさと利便性を実現した「Cypress」、Chrome DevTools Protocol(CDP)を積極的に活用し高機能性を実現した「Puppeteer」、テストを容易にする数々の便利な機能を盛り込みクロスブラウザテストにも対応した「Playwright」です。
それぞれの概要・特徴を以下の表にまとめます。 表中の「対応デスクトップブラウザ」で()がついているものは、正式サポートされていない、または厳密にはサポートされていると言えないものです。詳細は各ツールの解説内に記載しています。
| Selenium | Cypress | Puppeteer | Playwright | |
|---|---|---|---|---|
| 公開年(バージョン1) | 2009年以前 | 2017年 | 2018年 | 2020年 |
| 対応デスクトップブラウザ | Chrome Firefox Edge Safari | Chrome Firefox Edge (Safari) | Chrome (Firefox) (Edge) | Chrome Firefox Edge (Safari) |
| テストフレームワーク同梱 | x | ○ | x | ○ |
| 操作記録によるスクリプト生成 | ○ | ▲ | ▲ | ○ |
JavaScript関連技術に関するアンケート調査「State of JavaScript 2022」のTestingの項目のアンケート結果によれば、2022年の時点でCypress、Puppeteerの利用率(Usage)はSeleniumと同じか上回っており、継続意向(Retention)はCypress、Puppeteer、PlaywrightともSeleniumを大きく上回っています。
JavaScript開発者に対するアンケートなので偏りはあり、実際のところSeleniumは今でもブラウザテストの有力な選択肢ですが、Selenium一強では無くなってきていることがうかがえます。
以下に各ツールの特徴を簡単にまとめました。検索エンジンを使えば様々な方の書いた比較記事が見つかりますので、興味を持った方はぜひ調べてみてください。使い勝手や利用者の評判など、多くのことがわかります。
Cypress
Cypressは、Cypress社が主導して開発が進められているオープンソースのテストフレームワークで、一部の機能は有料です。
最大の特徴は、他のツールのようにブラウザの外側から自動操作をするのではなく、Webページと同じコンテキストにJavaScriptロジックを挿入しそれを使って自動操作を行うことです。この仕組みによって、利便性の高い様々な機能を実現している一方、「複数タブ・ウィンドウにまたがるテストができない」「複数ドメインにまたがるテストができない」など、この仕組みゆえの制約もあります(実はSeleniumも初期のバージョンは同様の方式だったのですが、複数ドメインなどの問題を解決するために外側から操作する方式に変わった歴史があります)。
また、Cypress AppのGUIからテストを実行すれば、「タイムトラベル」の機能を使ってテスト時のDOMの状況などを詳細に調べることができ、Cypress Cloud(旧Cypress Dashboard)を使えばテストの並列実行やテスト結果の詳細な統計情報も取得できます。Cypress Cloudは本格的に利用する場合は有料プランを検討した方がよいですが、Sorry CypressなどのOSSで代替することも可能です。
Cypress Studioによる操作の自動記録とSafariテスト(WebKitで代用)はExperimentalで、まだ正式版ではありません。
Puppeteer
Puppeteerは、Googleが主導して開発が進められているオープンソースのブラウザ操作自動化ツールです。当初はChromeでのみ利用可能で、Chromeでしか使えないChrome DevTools Protocolの機能を積極的に利用することで、全ブラウザにおける標準化を意識したSeleniumではサポートできなかった様々な機能を提供しました(現在はSeleniumでもBiDirectional APIで同様のことが可能)。
FirefoxのサポートはExperimental、Edgeでも動作しましたが正式版ではないようです。ChromeのDevToolsの機能を使えばブラウザ操作の記録も可能ですが、生成されたスクリプトはあまり精度が高くなさそうでした。
Playwright
Playwrightは、Microsoftが主導して開発が進められているオープンソースのテストフレームワークです。
Puppeteerの初期の開発メンバーがその後Playwrightの開発チームに移り開発を進めていることもあって、Puppeteerから多くのコンセプトを引き継いでおり、Puppeteerよりも多くのブラウザをサポートしていることで魅力的な選択肢となっています。
操作の自動記録はもちろんのこと、Auto Waiting・ビジュアルリグレッションテスト(画像差分比較テスト)・UIモードによる高度なデバッギング・Trace viewerなど機能も充実しており、さらに細かいコマンドも洗練&充実しています。
SafariのテストはWebKitで代用する形です。
