4.7 KiB
4.7 KiB
注册 Pool 人工测试清单
目标
验证“通过页面注册 Outlook 账号后,该账号能够进入邮箱池并可被 /api/pool/* 或 /api/external/pool/* 正常领取”的完整链路。
当前检查结论
当前代码已切换为“显式加入池”模式:
- 前端存在“
🔑 注册”按钮,可触发 OAuth 获取 Token。 - 导入弹窗新增“
导入后加入邮箱池”复选框。 - 勾选时,新导入的 Outlook/IMAP 账号会写入
pool_status='available'。 - 不勾选时,账号保持池外,
pool_status为NULL。
结论:当前版本不再采用“注册即自动入池”,而是由用户在导入时显式决定是否加入 Pool。
代码定位
- 前端注册入口:
templates/index.htmlstatic/js/features/groups.jsstatic/js/main.js
- 账号新增入库:
outlook_web/repositories/accounts.py
- 池领取条件:
outlook_web/repositories/pool.py
- 数据库字段默认值:
outlook_web/db.py
测试前置条件
- 本地启动项目:
python start.py
- 准备一个可用的 Outlook OAuth 授权流程。
- 准备至少一个普通分组,不使用“临时邮箱”系统分组。
- 登录系统后台。
人工测试用例
RTP-001 注册按钮可见性
步骤:
- 打开“账号管理”页面。
- 选择任意非“临时邮箱”的分组。
- 观察账号面板右上角是否显示“
🔑 注册”按钮。
预期结果:
- 普通分组显示“
🔑 注册”按钮。 - 选择“临时邮箱”分组时该按钮隐藏。
RTP-002 OAuth 获取 Token
步骤:
- 点击“
🔑 注册”按钮。 - 获取授权链接并完成微软授权。
- 将回调完整 URL 粘贴回弹窗。
- 点击“换取 Token”。
预期结果:
- 能成功换取
refresh_token。 - 页面自动回到“导入账号”弹窗。
- 输入框被预填为
邮箱----密码----client_id----refresh_token格式。
RTP-003 注册 Outlook 账号
步骤:
- 将预填内容中的占位邮箱、密码替换为真实值。
- 点击导入。
- 等待导入成功提示。
- 在当前分组列表中确认账号出现。
预期结果:
- 页面提示导入成功。
- 分组账号列表可见该 Outlook 账号。
RTP-004 注册后是否进入 Pool
步骤:
- 完成 RTP-003。
- 打开数据库,执行以下 SQL:
SELECT email, pool_status, provider, account_type
FROM accounts
WHERE email = '刚注册的邮箱';
预期结果:
- 如果勾选“导入后加入邮箱池”,这里应返回
pool_status = 'available'。 - 如果未勾选,这里应返回
pool_status = NULL。
RTP-005 内部池领取验证
步骤:
- 在系统已登录状态下调用:
curl -X POST http://127.0.0.1:5000/api/pool/claim-random ^
-H "Content-Type: application/json" ^
-d "{\"caller_id\":\"manual_test\",\"task_id\":\"rtp005\"}"
- 观察返回结果。
预期结果:
- 如果注册账号已进池,应返回
success=true,并包含该账号的account_id、email、claim_token。
当前验证重点:
- 勾选加入池时,应能领取到刚注册的账号或至少使池内
available数量增加。 - 不勾选时,即使注册成功,也不应被池领取到。
RTP-006 对外池领取验证
步骤:
- 在设置中开启
pool_external_enabled。 - 准备一个具备
pool_access=true的 API Key。 - 调用:
curl -X POST http://127.0.0.1:5000/api/external/pool/claim-random ^
-H "Content-Type: application/json" ^
-H "X-API-Key: <your-key>" ^
-d "{\"caller_id\":\"manual_test\",\"task_id\":\"rtp006\"}"
预期结果:
- 如果注册账号已进池,应能正常领取。
- 如果注册账号未进池,则依旧可能返回无可用账号。
RTP-007 领取后状态流转
步骤:
- 先确保池内存在一个
available账号。 - 调用
/api/pool/claim-random领取。 - 调用
/api/pool/claim-complete,分别传入:successverification_timeoutprovider_blockedcredential_invalidnetwork_error
预期结果:
- 状态分别流转到:
usedcooldownfrozenretiredavailable
已确认的自动化基线
已执行:
python -m unittest tests.test_pool -v
结果:
39个池相关用例全部通过。- 说明“池本身的 claim/release/complete/stats 逻辑”当前没有明显回归。
- 但这些测试主要覆盖“已有池内账号”的流转,不覆盖“注册后进入池”。
自动化补充
本轮已补充 API 级回归思路:
- 默认导入不入池。
- 勾选
add_to_pool=true时进入available。 provider=auto的 Outlook/IMAP 导入同样支持该开关。