テストユーザー自動発行&自動登録&自動認証システムができた

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のバックアップ 定期的な自動バックアップはまだない(本番への反映前に手動で取得)