CodeceptJS、MailSlurpでメールも簡単自動テスト

はじめに

こんにちは、学協会向け会員管理サービスSMOOSYのQA担当をしている鈴木です。
以前に「DockerとCodeceptJSでどこでもE2E自動テスト」という記事で、E2E(End to End)テストに関するフレームワーク「CodeceptJS」をご紹介しましたが、今回はその続きです。
CodeceptJSでは様々なプラグインが提供されておりますが、今回はメール関連のテスト自動化に便利なサービスとプラグインをご紹介します。

メールに関するE2Eテスト

会員登録やパスワード再設定など会員管理定番の機能では、メールと連携して動作する機能があります。機能使用時にメールが送信され、そのメールに含まれるURLへアクセスすることで操作が続けられるというものです。
操作に手間がかかるこのような機能こそ、E2Eテストを自動化したい&することでメリットが感じられる機能だと思います。
メールテストの自動化は、Gmail APIを使用するやり方やメールテスト用の外部サービスを利用するやり方などいろいろありますが、今回はCodeceptJSでプラグインが提供されており、連携が簡単なMailSlurpというサービスを使用します。

MailSlurp

MailSlurpはメールのE2Eテストをサポートするサービスで、メールボックスの作成、メール受信、メール本文の参照などのメール操作をWeb APIでできるクラウドサービスです。
JavaScript、Java、PHPなどの様々な言語やテストフレームワークに対応しており、CodeceptJSではMailSlurpヘルパー(プラグイン)をインストールすることで簡単に利用できます。

環境準備

MailSlurpでAPIキーの取得

MailSlurpを利用するためには、以下の手順でAPIキーを取得しておく必要があります。

  • MailSlurpサインアップでログイン用のメールアドレス、パスワードを登録する(登録済みの場合、MailSlurpログインからログインする)。
  • 確認メールが送信されるのでメールから「Access MailSlurp」をクリックする。
  • Dashboard画面が表示されるのでAPIキーをコピーする。

MailSlurp Dashboard画面

CodeceptJSのMailSlurpヘルパーをインストール

CodeceptJSでMailSlurpを使うため、MailSlurpヘルパーをインストールします。
CodeceptJSは2.3.0以上が必要なため、それ以下のバージョンを使用している場合はバージョンアップしてからインストールします。

CodeceptJSの設定ファイルに、コピーしたAPIキーを指定してMailSlurpヘルパーの設定を追記します。

メール連携テストをしてみよう

テストシナリオ

今回はSMOOSYのパスワード再発行機能をサンプルとして、以下のようなシナリオでテストします。

No. アクション 確認内容
1 パスワード再発行画面で試験用会員の会員番号を入力し、送信ボタンをクリックする 送信完了メッセージが表示されること
2 試験用会員のメールアドレスでパスワード設定URLの通知メールを受信する メールのFrom、件名、本文が正しいこと
3 通知メールのパスワード設定URLへアクセスする パスワード登録画面が表示されること
4 パスワード設定画面で新パスワードを登録する 設定完了画面が表示されること
5 会員ログイン画面で試験用会員の会員番号、再発行した新パスワードを入力し、ログインボタンをクリックする 会員マイページトップ画面が表示されること

テストコードの作成

前項のテストシナリオに従ったCodeceptJSのテストコードを作成します。
テストシナリオを実行する前に、MailSlurpで試験用メールアドレスを生成し、試験用会員のメールアドレスを生成した試験用メールアドレスに変更する準備作業が必要です。
テストを自動化するため、この準備作業も合わせてテストコードで実装します。

テストの実行

テストコードファイル名を指定してCodeceptJSを実行します。
「–steps」オプションを指定して実行するとステップ毎の実行内容が表示されます。

おわりに

メールの送受信、メール本文の参照を連携した機能のテストは自動化に手間がかかり大変ですが、MailSlurpなどのサービスを利用することで意外と簡単に実現でき、リグレッションの防止、システムの品質向上に役立ちます。
メール連携のE2Eテストを検討中の方は、是非お試しください。
今後も自動テストをはじめ、品質やサービス向上につながる試行錯誤は続けていきますので、またの機会にご紹介できればと思います。