版本:v1.0 | 日期:2026-08-08 用途:独立测试 Agent 按此清单逐项验收;结果记录于
test-run-log.md测试环境:本地 docker(PG16/Redis7)+ mock 上游 :19090 + API :8080 测试账号:test-e2e@dotouch.ai/Test1234(admin,余额 $108.80)|demo.user@dotouch.ai/User2026!(user,$50)|admin@dotouch.ai/Admin2026!(admin)
| # | 步骤 | 验收标准 |
|---|---|---|
| 1.1 | POST /v1/auth/send-code {email, purpose:register} | 201 |
| 1.2 | 日志读验证码 | 8 位 [A-Z0-9] |
| 1.3 | 错误验证码注册 | 400 验证码错误 |
| 1.4 | 正确验证码注册 | 201 创建用户 |
| 1.5 | 同邮箱重复注册 | 409 |
| 1.6 | send-code 60 秒内重复 | 429 冷却 |
| # | 步骤 | 验收标准 |
|---|---|---|
| 2.1 | 正确密码登录 | 200 + JWT(含 role) |
| 2.2 | 错误密码 ×5 | 401 ×5 |
| 2.3 | 第 6 次 | 429(约 15 分钟) |
| 2.4 | 弱密码(<8 位/无数字)注册 | 400 |
| 2.5 | GET /v1/auth/me | 200 email/role |
| # | 步骤 | 验收标准 |
|---|---|---|
| 3.1 | POST /v1/auth/forgot(不存在邮箱) | 200 不泄露存在性 |
| 3.2 | 日志读重置验证码 | 8 位 |
| 3.3 | 错误码重置 | 400 |
| 3.4 | 正确码重置为新密码 | 201 |
| 3.5 | 旧密码登录 | 401 |
| 3.6 | 新密码登录 | 200 |
| 3.7 | 恢复原密码(重复 3.1-3.4) | 201 + 旧密码可登录 |
| # | 步骤 | 验收标准 |
|---|---|---|
| 4.1 | POST /v1/keys {name} | 201 完整 dt_ Key 仅返回一次 |
| 4.2 | GET /v1/keys | 脱敏(仅 prefix) |
| 4.3 | POST /v1/keys/:id/rotate | 201 新 Key;旧 Key 调网关 401 |
| 4.4 | DELETE /v1/keys/:id | 200;已撤销 Key 调网关 401 |
| 4.5 | 可选 expiresAt 过期 Key | 过期后调网关 401 |
| 4.6 | 他人 Key 操作(不同用户) | 403 |
| # | 步骤 | 验收标准 |
|---|---|---|
| 5.1 | GET /v1/wallet | 200 余额 + 流水 |
| 5.2 | dev-credit 充值 | 余额增加 + deposit 流水 |
| 9.1 | 非流式调用后余额 | 精确扣减(cost>0) |
| 9.2 | 流式调用后余额 | 预扣-结算-退款净值正确 |
| 9.3 | 余额不足调用 | 402 insufficient_balance |
| 9.4 | 用量记录 costCents | 与扣款一致 |
| # | 步骤 | 验收标准 |
|---|---|---|
| 6.1 | GET /v1/models | ≥236 个,OpenAI 格式 |
| 6.2 | 定价元数据 | glm-5.2 等含 input/output 价格 |
| 6.3 | 未认证网关 | 401 invalid_api_key |
| # | 步骤 | 验收标准 |
|---|---|---|
| 7.1 | chat/completions 非流式 | 200 OpenAI 格式 + usage |
| 7.2 | stream:true | SSE data: 块 + [DONE] |
| 7.3 | 未知模型 | 404 model_not_found |
| 7.4 | 无效 Key | 401 |
| 7.5 | 错误响应体 | {error:{message,type,code,param}} |
| 8.1 | 61 次/分钟(同 Key) | 第 61 次 429 rate_limit_exceeded |
| # | 步骤 | 验收标准 |
|---|---|---|
| 10.1 | GET /v1/usage | 明细含 model/tokens/cost |
| 10.2 | GET /v1/usage/summary | 按日聚合 totalTokens>0 |
| # | 步骤 | 验收标准 |
|---|---|---|
| 11.1 | PUT /v1/keys/:id/limits {dailyRequestLimit:2} | 200 |
| 11.2 | 第 1/2 次调用 | 200 |
| 11.3 | 第 3 次调用 | 429 code=quota_exceeded |
| 11.4 | 清空限额(null) | 调用恢复 200 |
| 11.5 | 预警阈值(alertPct=50,达 50%) | quota-events 出现 alert |
| 11.6 | PUT /v1/account/limits 账号级 | 生效(账号维度拦截) |
| 11.7 | GET /v1/usage/quota | 限额配置 + 当前用量 + pct |
| 11.8 | GET /v1/admin/quotas | 全局视图(用户/Key/状态) |
| 11.9 | GET /v1/admin/quota-events | block/alert 事件 |
| 11.10 | 重复超限 | block 事件 5 分钟节流 |
| # | 步骤 | 验收标准 |
|---|---|---|
| 12.1 | admin 访问 /v1/admin/stats | 200 |
| 12.2 | 普通用户访问 admin | 403 |
| 12.3 | PUT /v1/admin/models/glm-5.2 定价 | 200 且 /v1/models 生效 |
| 12.4 | GET /v1/admin/users 搜索 | 200 分页 |
| 12.5 | PATCH 用户封禁 | 封禁后登录 401/网关 401 |
| 12.6 | POST /v1/admin/models/sync | 501 占位 |
| # | 步骤 | 验收标准 |
|---|---|---|
| 13.1 | POST /v1/wallet/deposit {amountCents:2500}(mock) | 201 订单 pending + paymentUrl |
| 13.2 | GET /v1/payments/mock-pay/:orderId 模拟支付 | 成功 |
| 13.3 | GET /v1/wallet | 余额 +2500¢,deposit 流水 refId=orderId |
| 13.4 | GET /v1/wallet/orders | 订单 status=paid |
| 13.5 | 重复回调同一订单 | 幂等,余额不重复增加 |
| 13.6 | provider=stripe/momo 无凭据 | 501/400 提示配置 |
| 13.7 | amountCents < 100 | 400 |
| 13.8 | 未认证 deposit | 401 |
| # | 步骤 | 验收标准 |
|---|---|---|
| 14.1 | pnpm build | 零错误 |
| 14.2 | /vi /en /zh-CN /zh-TW 渲染 | 4 语言文本正确 |
| 14.3 | 导航 5 项 | 首页/模型/定价/操作文档/控制台 |
| 14.4 | B1 Logo | SVG 渲染正确 |
| 14.5 | 客服 widget | FAB 可开合面板 |
| 14.6 | 认证弹窗 | 登录/注册/重置视图切换 + 8 格验证码输入 |
docs/testing/test-run-log.md