概要・注意
E2Eのテスト実行方法に色々グラデーションがあると思いまとめてみました。
※こちらは仕様保証するテストの自動化についての話で、テストファーストなテスト自動化の話ではなく前段階の話なのでご注意ください。
- メリット
- 準備不要で誰でも行うことができる
E2E実現の方法
①手動動作確認
自身のクライアントPC(仕事で使っているノートPCなど)のブラウザで動作確認をする。
②記録されたテスト再現
SeleniumIDEなどを使って操作を記録し、記録した動作確認を再現できるようにする
- メリット
- 挙動がプログラムによって規定されるので、人に依らない
③スクリプトベースの自動化
Pythonなどでブラウザ自動操作ツールのSeleniumなどを使ってブラウザを動かす
- メリット
- プログラム化ゆえのメリットを享受できる
- SeleniumIDEなどの記録ソフトで記録できないこともテスト化可能
- コードの共通化も可能
- 狭義のE2Eと離れるが、やろうと思えば操作の結果DBのデータがどう変わったかも確認できる
- プログラム化ゆえのメリットを享受できる
- 制約
- Pythonなどプログラミング言語を書ける必要がある(②の記録からコードを生成することは可能)
④データ独立の自動化
テスト用のDBをテスト用に持ち、各テストのたびに初期化・クリーンアップを行う
- メリット
- それぞれのテストが独立するため、他のテスト結果の干渉を受けない
- 制約
- ③の制約
- 初期化・クリーンアップのコードを書く必要がある
- テストを行いたいシステムの中に、そのシステムと同じプログラミング言語でテストコードを書く必要がある
- DBのセットアップとクリーンアップを行うのに、DBのスキーマを必要とする
- そのシステムが設定したテスト用DBで動いている必要がある
⑤完全自動化
GUIが使えないサーバでも動くようヘッドレスで起動させ、システムのエコシステムにブラウザを取り込み、実行する環境に依存しないテスト環境を実現する。
- メリット
- サーバ上で実行できるので、誰かのPCでしか動かないという制約にとらわれない
- CIツールでも実行可能なため、人手ではありえない、変更のたびに大量の回帰テストを行うことも可能となる
- 制約
- ④の制約
- ブラウザをシステムで持つ
- GUIを持たないブラウザでも起動できるようにヘッドレスで動かせるようにする
各方法での特徴比較
段階 | 再現性 | 期待値確認方法 | テスト後のデータ | 起動ブラウザ |
---|---|---|---|---|
①手動動作確認 | 実施者の塩梅で粒度が揺れる | 目視 | 自身で手動で消す(消す作業までシナリオに組み込むことは可能) | ローカルクライアントPCのブラウザ |
②記録されたテスト再現 | コードが同じなら同じテストが保証される | 同上 | 同上 | 同上 |
③スクリプトベースの自動化 | 同上 | プログラム内でチェック | 同上 | 同上 |
④データ独立の自動化 | 同上 | 同上 | テストごとに初期化される | 同上 |
⑤完全自動化 | 同上 | 同上 | 同上 | 任意のPCのブラウザ(サーバであろうとローカルクライアントPCであろうと問わない) |