11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

E2Eテスト(とUIテスト)ってなんなの?

Posted at

Motivation

上司に「E2Eテスト(ぽいの)担当して」って言われたけど、うーん、なんにもわからん

というわけで調べた

E2Eテストとは

https://martinfowler.com/articles/practical-test-pyramid.html#End-to-endTests
を読んでみた。(以下、ほぼ訳)

E2Eテスト = End to end テスト

ユーザーインターフェース(UI)を介して、デプロイされたアプリケーションをテストすること。
ソフトウエアが動作していることを確認する。

(想定: ブラウザを介したアプリケーション)
ブラウザを開いて、クリックしたり、データを入力したりして、UIを確認する。
後述のUIテストとは違うのは、End to Endで(システム全体を利用して)テストする

E2Eテストの課題

(意図せず)壊れやすい

しばしば期待しない予測不可能な理由で失敗する。この多くは実際は失敗ではなく、誤検知である。
それはブラウザの特徴や、タイミング、アニメーション、期待しないポップアップダイアログが原因である。
誤検知ばかりだと、時間がかかったり、テストの信頼性を失うので注意。

誰が作るの?

マイクロサービスだと、これらのテストの作成は誰が担当するのか、という問題がある。複数のサービスにまたがるので、E2Eテストを作成する責任を負う単一チームがいない
一元化した品質保証(QA)チームがいるならばぴったりだけど、DevO一元化したQAチームを持つことはアンチパターン。
E2Eテストを誰が持つかはかんたんに答えを出せない。
組織に依存するところなので、組織にあったやり方で。

コストが高い

しばしばメンテナンスしなくてはならないし、実行に時間がかかる。
いくつかのマイクロサービスで構成されていると、そもそもローカル環境で実行できない。ローカルで実行するには、すべてのマイクロサービスをローカルで実行する必要がある。

E2Eテストの数は最小限にする。
商品の核となる価値部分のユーザージャーニーを考えて、その部分をE2Eテストに変換する

特殊なケースは、ユニットテストなどの下位テストに任せる。

テストツールなど

  • Selenium ブラウザの自動化ツール https://selenium.dev/
  • 最近までは HeadlessブラウザとしてPhantomJSが有力だったが、ヘッドレスモードが実装されたので、ユーザーが実際に使うブラウザ(Choromium, Firefox)でテストしたほうが良い
  • Nightwatch.js - https://nightwatchjs.org/

ここまできたけど

多分これ上司に期待されているの、これだけじゃなさそうなんだよな。
記事の上に書かれているUIテストも含まれそう。

UIテスト

UIテストはアプリケーションのUIが正しく機能することをテストする。ユーザーの入力が正しくアクションをトリガーし、データがユーザーに表示され、UIの状態は期待通りに変わるということ。

UIテストとE2Eテストは同じものだと言われることがあるが、アプリケーションをE2Eでテストするのは、UIを介してテストを実行することであるが、その逆は当てはまらない。
つまり、UIテストはE2Eで実施する必要はない。使用する技術に応じて、バックエンドはスタブアウトして、フロントエンドのjavascriptの単体テストを記述すれば良い。

アプリケーションのレイアウトが損なわれていないことをテストするのは難しい。
これはコンピュータが「見た目の良さ」を判別し難いから。
(ただし、機械学習アルゴリズムが将来それを解決するかも)

ユーザビリティや見栄えの良さをテストするのは自動テストではなく、探索的テストやユーザービリティテストに頼るべき。

テストツール

react, vue.js, Angular

  • 独自のツールとヘルパーが付属しているはず

vanilla javascript ( = つまりただのjavascript)

伝統的なサーバサイドレンダリング

アプリケーションのレイアウト

まとめ

E2Eテストは、システムを用意して、UIを介してアプリケーションが動作していることを確認すること。

ただし、ユーザーのインプットに対して、

  • 正しくアクションをトリガーして、データが出て、UIの状態が変わること
  • UIのレイアウトが適切であること
  • 期待通りの価値が提供できていること (← ここがE2Eテストの範囲)
  • ユーザービリティが低下していないこと

を同時にテストするのは難しい...(手法、テストの実行時間やメンテナンスコストなどが異なる)
どれをテストするのかきちんと決めてそれぞれにあったやり方を選んでいくべき

あんまりまとまってないですが、こんなところでこの記事は落とし所にします。

参考文献

11
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?