メール認証テストの自動化(Playwright、Cypress、Selenium)
登録やパスワードリセットのフローは、テストが非常に難しいことで知られています。肝心のステップ、つまり認証メールが、アプリの外へ出てしまうからです。解決策は、テスト実行ごとに、コードから読める専用の使い捨て受信トレイを用意することです。このガイドでは、使い捨てメール API を土台に、Playwright、Cypress、Selenium でのパターンを示します。
なぜメールのテストは不安定になるのか
メールは非同期です。SMTP サーバーを経由して届くまで数秒かかることもある一方、テストは速く決定的な結果を期待します。一つの人間用メールボックスを実行ごとに共用すると、混線や古いメッセージが起きます。処方箋はオンデマンドでメールを作ること。テストごとに新しくルーティング可能なアドレスを払い出し、そのメッセージを API 経由で消費します。
パターン
- テスト開始時に一時メールボックスを払い出す(ランダムまたはカスタムのアドレス)。
- 認証メールを発火させる地点まで UI を進める。
- メッセージを待つ — 受信トレイをポーリングするか、遅延ゼロの配信のために webhook に反応する。
- メッセージ本文から認証リンクかワンタイムコードを抽出する。
- フローを続行する(リンクをクリック/コードを入力)し、成功をアサートする。
DRY に保つ:再利用できるヘルパー
受信トレイの API 呼び出しを、すべての spec に散らかさないでください。作成/待機/抽出を一つのモジュールにまとめます。Playwright のフィクスチャ、Cypress のカスタムコマンド、Selenium のヘルパークラスのいずれかに。すると、テストは「受信トレイを作成、登録、認証を待つ、アサート」のように読め、トランスポートの細部がアサーションに漏れ出しません。
フレームワーク別メモ
- Playwright — ヘルパーをフィクスチャとして公開し、各テストが自動で新しい受信トレイを得られるようにする。メッセージ待ちには Web ファーストの
expect.pollを使う。 - Cypress — API 呼び出しを
cy.taskやカスタムコマンドで包む。任意のcy.waitは避け、メッセージが届くまでポーリングする。 - Selenium — 作成・ポーリング・抽出をページオブジェクト風のヘルパーに置き、メッセージには明示的な待機を使う。
信頼性のためのヒント
遅延とリクエスト数を減らすため、きついポーリングより webhook を優先しましょう。並列テストが衝突しないよう、実行ごとに固有のアドレスを与えます。大規模スイートでは月次 API クォータに注意してください。安全な範囲でアサーションをまたいで受信トレイを使い回し、ポーリング間隔を緩めます。すべての呼び出しを X-API-Key ヘッダーの API キー で認証してください。
はじめましょう
プロフィールから API キーを取得し、OpenAPI ドキュメントを読み、受信トレイを作って1通を待つフィクスチャを一つ組んでみてください。使い捨て受信トレイが初めての方は 一時メールとは から始めましょう。