🧪

E2Eテストについて

2021/09/25に公開

概要

E2E テストについての個人的なまとめです。

E2E テストとは

E2E(End To End)テストはシステム全体を通して行うテストです。UI テストとも呼ばれます。
E2E テストは以下のような特徴を持ちます。

  • システムの挙動を全体を通して確認することができる。
  • 壊れやすいため、メンテナンスコストがかかる。
  • テスト選定や実行環境を用意する必要があるため、導入コストがかかる。
  • 実行速度が遅い。

Tips

ロケータを使用し、要素を取得する

ロケータは操作や検証の対象となる要素を指定するためものです。
以下の要素が必要になります。

  • 常に一意である。
  • 変更される可能性が少ない。
  • 意味や振る舞いが変わらないものである。

data-* 属性を使用する

data-* 属性は開発者が独自の属性をタグ内に準備するためのカスタムデータ属性です。data-fooといったように定義します。
カスタム定義であるため、故意に変えない限りは影響がないです。
ただ、data-*属性をプロダクトコード側で管理しておく必要があります。

id 属性や class 属性をロケータとして使用しない

JavaScript フレームワークを使用すると、id属性に特定のプレフィックスがついたりと、id属性がフレームワークに管理された状態になるため、あるため使用しないほうがよいです。
class属性に関してはページ内で複数回使用される可能性があり、変更される可能性が高くなるため、class属性に関しても使用しないほうがよいです。

テストケースはすべてを網羅せず、最小限にする

UI に関する一連の流れをスクリプト化したり、実行速度が遅かったり、作成・メンテナンスや実行時間にコストが掛かるため、テストケースは最小限に抑える必要があります。
ユニットテストに比べ、E2E テストが多くなると一般的にアンチパターンになるみたいです。

参考文献

https://commerce-engineer.rakuten.careers/entry/tech/0031
https://qiita.com/mt0m/items/7e18d8802843d9f60d28
https://docs.cypress.io/guides/references/best-practices
https://playwright.dev/docs/selectors#best-practices
https://blog.autify.com/ja/why-id-should-not-be-used
https://qiita.com/akameco/items/519f7e4d5442b2a9d2da

Discussion