[E2Eテスト自動化]実行できるテスト、再実行できるテスト
こんにちは。SODAでQAエンジニアをやっているokauchiです。
今回は、E2Eテスト自動化で意識したいテストの再実行についてです。
ECサイトの新規会員登録の自動化に挑戦
ECサイトの新規会員登録を例に考えてみましょう。
流れは以下の通りです。
①会員登録画面を開く
②メールアドレス、パスワードを入力する
③会員登録ボタンを選択
④招待メールを開き、本会員登録リンクを選択
⑤会員登録完了画面が表示されていることを確認する
新しく会員データの登録と、メールの検索という操作が出てきます。人の手でやる分にはとても簡単なのですが、テスト自動化におきかえると難しさが出てきますね。ポイント絞って見ていきましょう。
その入力、何回やっても同じ結果になる?
②ステップで、メールアドレスを入力していますね。
初めてそのメールアドレスを登録する場合であれば、実行できるテストと言えます。
2回目以降はどうでしょうか?
同じメールアドレスの再登録
1回目のテストの事後結果としてすでに会員登録済みであれば、
同じメールアドレスで登録をしてしまうことになるので、エラーが発生してしまいますね。
会員登録のテストと退会操作を組み込む
データを作成直後に削除をする操作を組み込むことで、操作の中でユニークなデータしか作られないようにすることも出来ます。データの削除は人の手でも出来るのですが、忙しいと忘れがちになるので出来るだけ自動化をしておきたいですね。
新規会員登録って、これで大丈夫?
同じメールアドレスで会員登録/退会を繰り返す、これは新規会員登録と言えるのでしょうか?
例えば、新規会員限定のクーポン配布や、バナー、チュートリアルの表示があるかも知れません。
新規会員登録で1つのメールアドレスを使い回すのはテストの目的が達成出来ないことも起こりそう。
これらの問題を回避するためには、実行日時や重複が起こりにくいランダム文字列を組み込んだメールアドレスを都度作成するのが良さそうです。テスト自動化ツールによっては実行ごとに独自のメールアドレスを作成してくれるものもあるみたいですね!
今回はメールアドレスを取り上げましたが、同名のデータを作成出来ないというような制約があるようなケースでは、同じように複数回実行しても失敗しないような工夫が必要になります。
その検索結果、何回やっても同じ結果になる?
④ステップで、招待メールのリンクを選択しています。
行いたいことはSTEP③がトリガーとなって、送信されたメールを開くことです。メールボックスからSTEP③で送信されたメールなのか、どう判断したら良いでしょうか?
メールボックスの受信日時の新しいメールを開く
テスト自動化の第一歩としてはOKですね。
運用上の注意として、テスト実行中にそのメールアドレスで招待以外のメールを受信しないようにする制約が必要になります。これだけの制御だと、メールを開くテスト実行を並列に行うことが難しくなってしまいますし、テスト実行中に1通でも別のメールを受信してしまうと先に進まなくなってしまう、壊れやすいテストシナリオになります。
件名を検索して、最新の会員登録メールを開く
招待メールだけを絞るので、前段より壊れにくくなりました。
この件名に登録ユーザー名のようなユニークに出来る文字があるとかなり確度が上がりますね。それが出来なくても招待メールだけに絞られるので、ほぼ同時並行で会員登録を進めない限りは大丈夫でしょう。
他の検索機能でも同じようなことが言えます。メールボックスはまだコントロールがしやすいのですが、staging環境のような開発者全員が同じ環境を触る場合は、検索にノイズが入らないように運用ルールを周知することが必要になりそうですね。
テスト自動化もやはり設計が必要
いかがだったでしょうか?
E2Eのテスト自動化は、人がやっているテストを自動化していく。その中で人であれば柔軟に回避や判断ができることもロジックにしていくことが必要になります。また何回も実行されるというところも大きな違いで、1回のテストでは問題ないことが、複数回繰り返すと破綻してしまうことも。自動化エンジニアの腕の見せ所ですが、自動化に理解が浅いステークホルダーから見ると、なんで実装にそこまで時間がかかるんだろう?とヤキモチされてしまいそうです。組織全体でテスト自動化の解像度を上げて、自動化プロジェクトが燃え尽きないようにしていきましょう!
SODAではテスト自動化を推進して頂けるSETを募集しています!
まずはカジュアル面談を聞きにきてもらうだけでも全然OKです!よろしくお願いします😊
株式会社SODAの開発組織がお届けするZenn Publicationです。 是非Entrance Bookもご覧ください! → recruit.soda-inc.jp/engineer
Discussion