AWS Lambdaを使い、1時間以上のテスト実行時間を10分以内に
Seleniumなどの実際のUIを伴う自動テストにおいて、テスト実行時間に関する問題は起こりがちです。直列でテストを実行しているとテスト実行時間は簡単に増えてしまい、結果として開発者へのフィードバックが遅くなってしまいます。また、そのテストを並列で実行させる場合でも、
- 実行テストの分散方法
- テスト実行環境のコスト・メンテナンス
- 実行したテスト結果の収集
など、さまざまな問題が発生してしまいます。
Wes Couch氏とKurt Waechter氏によるセッション「Scaling Selenium to infinity using AWS Lambda」では、AWS Lambdaというサーバーレスフレームワークを使って、これらの課題を解決した事例を紹介しました。
結果として、実際にこれまで1時間以上かかっていたテスト実行時間を10分以内にすることができたとのことです。
また、サーバーレスアーキテクチャーによって、
- 簡単にスケールできる(今回だとテストの分散)
- 使った分だけ課金される
- メンテナンスしなければならない部分が少ない
という恩恵を受けられたとのことです。
上記の恩恵と引き換えに、サーバーレスアーキテクチャーの場合、プラットフォームによる制限を考慮しないといけません。特にAWS Lambdaの場合には容量の制限があり、その中にテスト実行環境としてブラウザ(今回だとChrome)とSelenium WebDriverをどう入れたかは、とても興味がありました。
上記の課題にもあった「分散されたテスト実行結果の収集」にはAmazon S3を使い、Allureというオープンソースのレポートツールを使うことによって、HTMLで見やすく収集できるようにしたようです。
また、セッションの中で「Running tests faster will unmask rude tests」という言葉が印象に残りました。UIテストの場合、実装したテストがあらゆる理由によって不安定になってしまうことが大いにあります。テスト実行時間が短縮・フィードバックが早くなることによって、不安定なテストを早期に発見できるのも大きなメリットであると感じました。
今回はJavaとAWS Lambdaを使って紹介されましたが、他のサーバーレスアーキテクチャーや言語でも使えるようになると、このソリューションがより広まるのでは、と感じました。
Docker Containerを使った組織的な自動テスト開発
最後にDerrick Kearney氏による「Jump starting your testing with Selenium Grid Docker Containers, Selene, and pytest」のセッションについてご紹介します。
Selenium GridをDocker Containerで動かしてSeleniumテストを実行させるアプローチは、Seleniumテストを分散実行させるためのソリューションとして、数年前からさまざまな所で紹介されています。しかし、組織的に自動テスト開発をするためのさまざまな工夫が本セッションでは紹介されており、興味を持ちました。
最終的には、3つのmakeコマンドを使うことで、
- Webアプリケーション環境も含めたテスト環境のセットアップ($ make test-env-up)
- Pythonでのテストの実行($ make test)
- テスト結果の収集・テスト環境の破棄($ make test-env-down)
ができるようになります。
また、これらは開発環境・JenkinsなどのCI環境のどちらでも使うことができます。
Seleniumでの自動テストを実行させるには
- 対象となるWebアプリケーション
- テストを実行させる言語(今回だとPython)とそのライブラリ群
- Selenium Grid(Hub, Nodes)
など、複数の要素が必要になります。
それらがバージョンなどを気にせずに環境構築・テストコード修正・テスト実行ができるのは、複数人で開発を行う際にとても重要だと感じていました。そのため、これらを3コマンドまでシンプルにさせて運用していることに驚きました。また、コンテナ内部でのテストコードの実装・デバッグ方法なども工夫されており、テスト自動化を専門としないエンジニアでも開発しやすいと感じました。
これらの工夫の結果によって、組織的にテスト自動化を継続的に行うことができている部分は、私も参考にしたいと思います。
さいごに
その他にもSeleniumテスト安定化・スケールのためのTipsがセッションで多く紹介されていました。実際の運用ですぐ使えるものや、今後継続的にウォッチしたいものなど、バランスの良いカンファレンスだったのではないかと感じました。
来年の4月には東京でもSeleniumConfが行われるので、このコミュニティーが日本を含め、より盛り上がると期待しています。