テストデータ
トランザクションメールのテストデータは、問題を見つけられるほどリアルに、削除できるほどクリーンに
優れたサンプルは本番データのコピーではなく、境界が明確で、繰り返し生成でき、1回のイベントに紐づけられるテスト用の事実です。
まず4つの原則を決める
テストデータは、識別でき、分離され、再現でき、クリーンアップできる状態にします。メールを見たとき、どの環境で、どのトリガーから、どのテンプレート版で生成されたかをチームがすぐ判断できることが重要です。
同時に、サンプルに実在する顧客情報、本番用トークン、使用可能な決済情報を含めてはいけません。テストシステムが保護されていても、データは最小限に抑えましょう。
テストバッチごとに独立した受信IDを使う
リリース、テンプレート、自動化テストごとに独立した使い捨てアドレスを割り当てると、古いメールが新しいアサーションを満たしてしまうのを防げます。アドレスの有効期間はテスト期間に合わせ、終了後は積極的に交換または破棄します。
日をまたいで監視する必要がある場合は、特定のサービスやシナリオごとに転送先を用意できます。複数人で共有する個人用メールボックスを、すべてのステージングデータの恒久的な保管場所にしないでください。
一意のイベントIDでログとメールをつなぐ
テンプレートで使用できる項目に、環境略称・日付・ランダムな文字列など、機密情報を含まないイベントIDを入れます。アプリケーションログ、キューのジョブ、メール本文で同じIDを使えば、調査時に一連の経路をたどれます。
IDにメールアドレス、氏名、業務上の秘密情報を含めてはいけません。IDの役割は証跡を関連付けることであり、ユーザーの身元を持たせることではありません。
数を積むのではなく、変数の境界をマトリクスでカバーする
認証コードのテストでは、正しいコード、誤ったコード、期限切れ、再利用、再送信のクールダウンを確認します。トランザクション通知では、最短・最長のテキスト、ゼロ値・大きな値、任意項目の欠落、異なるタイムゾーンをカバーします。
多言語テンプレートでは、件名と本文が同じlocaleを使っているか、長い単語がはみ出さないか、日付や数字が地域の慣習に合っているか、翻訳がない場合のフォールバックも確認します。
| メールの種類 | 最小限の正常サンプル | 重要な境界条件 |
|---|---|---|
| 認証コード | 6桁のコード+有効期限 | 期限切れ・再送信・再利用 |
| 注文通知 | 単一商品+標準金額 | 長い商品名・ゼロ値・複数のタイムゾーン |
| セキュリティ通知 | デバイス+時刻+イベントID | 不明なデバイス・場所の欠落 |
| 多言語テンプレート | 対応言語ごとに1通 | フォールバック・長文・文字方向 |
異常系サンプルでは、ユーザーが復旧できるか必ず確認する
エラーメッセージはテストの終点ではありません。認証コードが無効なときに再送信やメールアドレスの修正ができるか、テンプレート変数が欠けたときにジョブが明確に失敗するか、添付ファイルが上限を超えたときに原因を特定できる応答が返るかを確認します。
異常系サンプルごとに、想定状態、画面に表示するメッセージ、復旧操作を定義します。「失敗した」ことだけをアサートすると、使えないフローまで成功したように見えてしまいます。
データはクリーンアップし、機密情報を含まない証跡を残す
テスト終了後は使い捨てアドレスを破棄し、不要になったエイリアスを削除して、チームのルールに従ってスクリーンショットやログを整理します。証跡パッケージに残すのは、テンプレート版、イベントID、時刻、結果、匿名化したスクリーンショットだけで十分です。
サンプルをリリース間で長期保存する必要がある場合は、30日間の配信履歴や個人の受信トレイに頼らず、管理下にあるテストデータリポジトリに保管します。
実行可能なサンプル仕様書
各サンプルについて、前提条件、トリガー操作、変数値、想定件名、想定本文、許容遅延、失敗の証跡、クリーンアップ操作を明記します。別のメンバーが作成者に質問せず再現できれば、データ設計は完成です。
ステージングフローのプランナーを使えば、リリース規模とテンプレートの種類から今回の所要時間を見積もり、引き継ぎやすい実行順序を作成できます。