Django、Cloudflare Email Routing(キャッチオール)、Email Worker、R2、Mailpitで、テストユーザーのデータを自動発行して、test用のmail addressを連番で生成して、指定した外部のWebサイトに自動登録し、受信したmailの認証URLを自動で踏んで、認証まで行うシステムができた。スパム攻撃に使える内容で、それなりに危ないので、一般公開はできないけど。 検証用にdammyの登録form登録を用意して、登録後はBrevoからmailを送って検証。無料版だと一日300通が上限なので、50通ずつ小分けでテストした。
メールテストの登録画面

自動登録後の一覧

テストユーザー作成画面

テスト用のDammy登録form

テストユーザー作成機能は、単独でも使えるように生成画面をわけて、csvでdownloadもできるようにした。 その後、csvから登録用listとしてdbに入れる形。別で作ったり、加工後のcsvデータでも登録可能。
課題
登録先のform、html、jsなどを解析して、登録Pageの仕様にあわせたコネクターを事前に開発・登録する必要がある。
- CAPTCHAありのコネクター(何らかの回避策が必要)
- ブラウザー操作が必要な場合のコネクター(Playwrightなどでの自動操作が必要)
などの整備。
また、テストユーザーデータの精度が甘いので、本格活用するにはもう少し作りこみが必要。
あと、単純に server の spec が低くて、生成時にいろいろと制限を設けている。 もちろん、外部サービスの無料枠の制限もある(本格利用時に有料プランにすればOK)
TestDataFarm システム上限一覧
ログ生成
| 項目 | 上限 | 変更方法 |
|---|---|---|
| 平均リクエスト数 | 100,000件/時(24時間平均) | コード |
| 生成日数 | 10日 | コード |
| 1ジョブの総行数 | 24,000,000行 | 上記2つから決まる |
| 待機中・実行中のジョブ | 1ユーザー1件 | 設定値 LOGSVC_MAX_ACTIVE_JOBS_PER_USER |
| 直近24時間の生成行数 | 1ユーザー24,000,000行 | 設定値 LOGSVC_USER_DAILY_ROW_QUOTA |
| 待機中のジョブ | 全体で20件 | 設定値 LOGSVC_MAX_QUEUED_JOBS |
| 保存条件 | 1ユーザー100件 | 設定値 LOGSVC_MAX_PRESETS_PER_USER |
| 1ジョブの実行時間 | 1時間 | 設定値 LOGSVC_MAX_RUNTIME_SECONDS |
| HDDの最低空き容量 | 20GB(これを割る登録は拒否) | 設定値 LOGSVC_MIN_FREE_BYTES |
| 生成ファイルの保存期間 | 完了から24時間 | 設定値 LOGSVC_RETENTION_HOURS |
| ジョブ履歴の保存期間 | 90日 | 設定値 LOGSVC_JOB_HISTORY_DAYS |
メールテスト
| 項目 | 上限 | 変更方法 |
|---|---|---|
| 1回の実行の件数 | 10,000件 | コード |
| 登録速度 | 20件/秒まで(初期値1件/秒) | 画面の入力範囲 |
| 登録の同時実行数 | 10まで(初期値2) | 画面の入力範囲 |
| 認証の同時実行数 | 10まで(初期値2) | 画面の入力範囲 |
| 一時的な失敗の再試行 | 10回まで(初期値3) | 画面の入力範囲 |
| 実行エンジンの同時処理数 | 全実行の合計で16 | 設定値 MAILTEST_MAX_WORKERS |
| メールの取り込み | 10秒ごとに最大200通(約20通/秒) | 設定値 MAIL_INGEST_BATCH |
| 取り込み失敗の再試行 | 8回まで | 設定値 MAIL_INGEST_MAX_ATTEMPTS |
| メール待ちの期限 | 最大7日 | 画面の入力範囲 |
| 対象サービスへの応答待ち | 30秒 | 設定値 MAILTEST_HTTP_TIMEOUT |
| 対象サービスの応答サイズ | 2MB | コード |
| リダイレクトの追跡 | 5回まで | コード |
| サンプル対象サービスの確認メール | 250通/24時間 | 設定値 SAMPLE_TARGET_DAILY_LIMIT |
テストユーザー
| 項目 | 上限 | 変更方法 |
|---|---|---|
| 1回の生成・ダウンロード | 100,000件 | コード |
| 1つのセットの人数 | 100,000名 | コード |
| 取り込み時に表示する誤り | 100件まで(以降は省略) | コード |
ログイン
| 項目 | 上限 | 変更方法 |
|---|---|---|
| ログインメールの送信 | サービス全体で1日100通 | 設定値 EMAIL_DAILY_LIMIT |
| 同じアドレスへの送信 | 1分1回・1時間5回 | コード |
| 同じ接続元IPからの送信 | 1時間20回 | コード |
| ログインリンクの有効期限 | 15分(1回で失効) | 設定値 MAGIC_LINK_TTL_MINUTES |
| ログイン履歴の保存期間 | 90日 | 設定値 AUTH_LOG_RETENTION_DAYS |
外部サービス側の制限
| 項目 | 制限 | 備考 |
|---|---|---|
| Brevo(無料枠) | 1日300通 | ひとり帳・ログインメール・サンプル対象サービスで共有 |
| Cloudflare Workers(無料枠) | 1日10万回 | 受信メール1通につき1回 |
| Cloudflare R2(無料枠) | 保存10GB、書き込み等 月100万回 | 取り込み後に削除する |
| Cloudflare Email Routing | 1通25MiBまで | 受信速度の保証はない |
上限を設けていないもの(注意)
| 項目 | 状況 |
|---|---|
| 受信メールの保存容量 | 元のメールとMailpitは、実行を削除するまで残る。 |
| DBのバックアップ | 定期的な自動バックアップはまだない(本番への反映前に手動で取得) |