Autifyで始めるE2Eテスト
E2Eテストしてますか?
こんばんは。こんにちは。
レバテック開発部で認証基盤を開発している松浪です。
早速ですが皆さん、E2Eテストって実施されていますか?
え?E2Eどころか単体テストすらないって?あるあるですよね。
弊社ではE2EテストツールとしてAutifyを導入しています。
今回は、認証基盤の開発にAutifyを導入してみて、どのようなメリットが得られたのか共有したいと思います。
Autify導入前のE2Eテスト
認証基盤の開発において、Autify導入前はplaywrightというテストフレームワークを使って、E2Eテストを実施していました。しかし、
- テストコードの実装に時間がかかる
- テストの実行結果が安定しない(Flaky Test)
- どの操作が原因で異常終了したかわかりづらい
- 異常終了した原因を調査するに時間がかかる
- 機能を跨ぐようなテストがしづらい
のような課題がありました。
E2Eテストの煩わしさにやる気を削がれながら、もうE2E辞めようかな...と考えていた時、
救世主現る。早速、Autifyに乗り換えてE2Eにおける課題の解決を図りました。
使用状況
Autifyでは利用状況レポートというページがあり、どれくらいAutifyを活用できているか見ることができます。
テスト実行数
6月半ばから本格的にテストシナリオを作成していき、7月実績で527回、8月実績で573回ものテストシナリオを実行しています。
営業日しか実行していないことを踏まえると、約20~30回/1日ほど自動テストしていることになります。素敵。
※ 2024/09/01時点の実績
テストの作成数と実行数
普段は作成したテストプランを定期的に自動実行させています。故にBotくんが最もE2Eテストを実行してくれています。
そして、機能を追加したり改修したりした時にも手動でE2Eテストを実行しています。
統計
認証基盤にはログインやパスワード変更などの基本的な機能があり、それぞれ満遍なく実行できていますね。
ステップ種別
E2Eなのでテストプラン中に要素をクリックしたりテキストを入力したりすることが多いのは予想していましたが、
思いのほかjavascriptをそこそこ多用しているのがわかります。
Playwrightでは利用できないjavascriptを簡単に利用できるのもAutifyならではだと思います。
どのようなテストを実施しているか?
機能を跨ぐような操作
例えば、
-
アカウントを新規に発行する
- 発行したアカウントでログインする
- 発行したアカウントで別サービスにもログインする
- アカウントを退会する
- ログインを再度試みる(ログインできないことを確認)
- アカウントを退会する
- 発行したアカウントで別サービスにもログインする
- 発行したアカウントでログインする
-
ログインする
- メールアドレスを変更する
- 変更前のメールアドレスでログインする(ログインできないことを確認)
- 変更後のメールアドレスでログインする(ログインできることを確認)
- 変更前のメールアドレスでログインする(ログインできないことを確認)
- メールアドレスを変更する
というように一連の流れで機能間で不整合が起きないか検証しています。
メールの受信を必要とする操作
Autifyではランダムなメールアドレスをテストを実行する度に作成することができ、受信ボックスをテストプラン内で開くことができます。
そして、メール本文に含まれる特定のURLにアクセスさせることができます。これは大変便利です。
ドメインを跨ぐ操作
レバテックでは複数のサービスを展開しているので、ドメインも複数あります。
サービスを跨ぐような画面遷移が発生する場合も動作検証がしやすいです。
Autifyの良いところ
エクスポート変数で値を引き継げる
エクスポート変数を利用すれば、1つ手前で使用した値を次のテストプランに引き継げます。
変数なのでランダムな値でも問題なく引き継げるのが良いですね。
実行途中の操作が動画に残る
AutifyにはVideo logという機能があり、自動で動画を取得&保存してくれます。
異常終了が起きた時に動画を元に何が起こったのか調査しやすく、自動でスクリーンショットも取得されているので便利です。
サポートに問い合わせできる
何か想定しない問題が起きた時に、いつでもサポートに問い合わせできます。
ChatBotからの質問に答えていくと、ちゃんと生身の担当者さんが回答をくれます。返信も早いです...!!
何でもかんでも問い合わせればいい訳ではないですが、調査のために自チームのリソースを割かなくてもいいので有難いですね。
Autifyのもう少しなところ
SPがブラウザのEmulator
Chromeの開発者ツールなので、実機と比べると動作やレイアウトの検証には不完全な印象...
ブラウザにSafariやFireFoxも選択できません。
なので、より実機に近い環境で検証したい時は、XcodeやAndroidStudioのシミュレータを利用しています。
テスト結果が安定しない
全く同じテスト内容なのに、特定の実行環境だけ異常終了する場合がある。
よくあるのがシナリオで指定したメールとは異なるメールをAutifyが参照してしまったり、ボタンが活性にならず押せていなかったり、画面遷移しないなどが稀に発生する。
そして、再実行すると正常終了する。
多要素認証を突破できない
ソーシャルログインを必要する機能においては、Autifyではテストできません。
仕方ないので手動もしくはmockを自作してplaywrightでテストして乗り切っています。
(E2Eだから仕方ない??)
Autify導入後のE2Eテスト
結局、Autifyで当初の課題は解決できたのか?と言うと、、
- テストコードの実装に時間がかかる
- ⭕️ ノーコードでテストシナリオが作れる!
- テストの実行結果が安定しない(Flaky Test)
- 🔺 あまり改善されず...
- どの操作が原因で異常終了したかわかりづらい
- ⭕️ スクリーンショットやVideoLogがあるのですぐわかる
- 異常終了した原因を調査するに時間がかかる
- ⭕️ テスト環境にログが残っている、サポートを活用できる
- 機能を跨ぐようなテストがしづらい
- ⭕️ サービスや機能を跨いでテストが作れる
完璧ではないですが、概ね満足です。^^
おわりに
システムは作って終わりではなく、継続して改善・改良を繰り返していくものです。つまり、DevOpsですね。
そして、DevOpsを実現するには、自動化されたテストが必要です。
Autifyなどを活用してE2Eテストを充実させ、バグのない安定した開発を目指しましょう。
レバテック開発部の公式テックブログです! レバテック開発部 Advent Calendar 2024 実施中: qiita.com/advent-calendar/2024/levtech
Discussion