はじめに
この記事は、以下の記事の後日談です。
E2Eテストの導入から学んだこと
このときからかなり時間が経ち、弊チームのE2Eテストも改善してきたので、それについて書きます。
本記事では、具体的な設定方法は言及せず、ドキュメントのリンクを添付します。
E2Eテストを実施していない方、CIを導入したことのない方が、
E2EテストとCIの連携でどのようなことができるかを知るきっかけになればと思います。
環境
言語:Node.js
ライブラリ:WebdriverIO,Mocha
OS:MacOS, Amazon Linux
ブラウザ:Google Chrome, FireFox
ソース管理:GitHub Enterprise
CI:CircleCI Enterprise
TL;DR
E2Eテストを定期実行・並列実行しました。
これにより、
- 不安定なテストを洗い出し改善したことで、テストの安定性が上がりました。
- リリース作業時間が30分近く短くなりました。
改善ポイント
前回の記事で対策案や、今後の展望を挙げたので、その中で改善したことについて書いてきます。
CircleCIを並列実行することでテストの実行時間を減らした
テストの実行時間が長い
という問題点に対し、CircleCIの機能でコンテナを並列実行しました。
これにより従来と比較し、約1/3の時間でテストを実行できるようになりました。
https://circleci.com/docs/2.0/parallelism-faster-jobs/
並列実行時は、テストデータを共有しないよう工夫が必要です。
テストケースを地道に改善した
テストが安定しない
リダイレクトが多くて失敗していた
という問題に対し、定期実行後によく失敗するテストについて、チームメンバーがテストケースの改善をおこないました。
定期実行することで、どのようなテストが落ちるのか、どのくらいの確率で落ちるのか計測しやすくなります。
テストケースごとにアカウントを分けた
テストケースでアカウントを共有していた
という問題に対し、テストケースと環境(dev,stg)ごとにアカウントを分離しました。
これにより、テストを並列実行できるようになりました。
フィードバックサイクルを整備した
フィードバックサイクルができていない
という問題に対し、CircleCI、GitHub、Slackと連携しました。
これにより、テストを定期実行しその結果をSlack通知できるようになりました。
CircleCIの定期実行方法は以下のドキュメントを参照ください。
c.f. https://circleci.com/docs/2.0/configuration-reference/#schedule
「今後の展望」のその後
以下、今後の展望についてのその後の様子です。
テスト結果のSlack通知
上記のように、テスト結果をSlackに通知しています。
通知にはslack-nodeというライブラリを使っています。
ChatOps化
これを書いたのは、エンジニア以外でも任意のタイミングでテスト結果を知りたいという目的でした。
しかし、テストを定期実行するようになったことで、短い間隔で誰でもテスト結果を知ることができるようになりました。
よって、今のところは実施していません。
テストケースのグループ分け
クリティカルなテストケースにはmochaの@smoke
タグを付け、毎時スモークテストしています。
c.f. https://github.com/mochajs/mocha/wiki/Tagging
まとめ
以上のように、E2Eテストを定期実行・並列実行しました。
これにより、以前はリリース前にE2Eテストを実行していたのですが、定期実行の導入後はリリース時にその結果を確認するだけでよくなりました。
また、定期実行することで不安定なテストを洗い出すことができました。これによってテストの安定性が高まりました。
ポイントとしては、以前の記事でも言及していますが、開発の早い段階でフィードバックサイクルを整えることです。
今回の記事が、E2Eテストの実施に時間がかかったり、テストが安定していない方の参考になれば幸いです。