MoeMail
ブログに戻る

メール認証テストの自動化(Playwright、Cypress、Selenium)

登録やパスワードリセットのフローは、テストが非常に難しいことで知られています。肝心のステップ、つまり認証メールが、アプリの外へ出てしまうからです。解決策は、テスト実行ごとに、コードから読める専用の使い捨て受信トレイを用意することです。このガイドでは、使い捨てメール API を土台に、Playwright、Cypress、Selenium でのパターンを示します。

なぜメールのテストは不安定になるのか

メールは非同期です。SMTP サーバーを経由して届くまで数秒かかることもある一方、テストは速く決定的な結果を期待します。一つの人間用メールボックスを実行ごとに共用すると、混線や古いメッセージが起きます。処方箋はオンデマンドでメールを作ること。テストごとに新しくルーティング可能なアドレスを払い出し、そのメッセージを API 経由で消費します。

パターン

  1. テスト開始時に一時メールボックスを払い出す(ランダムまたはカスタムのアドレス)。
  2. 認証メールを発火させる地点まで UI を進める
  3. メッセージを待つ — 受信トレイをポーリングするか、遅延ゼロの配信のために webhook に反応する。
  4. メッセージ本文から認証リンクかワンタイムコードを抽出する
  5. フローを続行する(リンクをクリック/コードを入力)し、成功をアサートする。

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通を待つフィクスチャを一つ組んでみてください。使い捨て受信トレイが初めての方は 一時メールとは から始めましょう。