Web-Lite 数据审核平台 - TDD 开发计划
创建时间: 2025-05-22
测试框架: pytest (后端) + vitest (前端)
目标覆盖率: > 60%
测试环境配置
后端 (pytest)
conftest.py 基础配置:
- 使用 SQLite in-memory 数据库
- FastAPI TestClient + async 测试
- 自动创建/销毁表
- 测试用户 fixture
前端 (vitest)
测试计划
Phase 1: 后端 API 测试 (P0 — 阻塞)
目标:确保所有现有 API 行为正确,为前后端对接打基础
1.1 认证模块 tests/test_auth.py
| # |
测试用例 |
优先级 |
状态 |
|
1 |
正确密码登录 → 200 + token + user |
P0 |
|
2 |
错误密码登录 → 401 |
P0 |
|
3 |
用户不存在 → 401 |
P0 |
|
4 |
已禁用用户登录 → 403 |
P0 |
|
5 |
GET /me 无 token → 401 |
P0 |
|
6 |
GET /me 有效 token → 200 + user info |
P0 |
|
7 |
token 过期 → 401 |
P1 |
|
8 |
POST /logout → 200 |
P1 |
1.2 用户管理 tests/test_users.py
| # |
测试用例 |
优先级 |
状态 |
| 1 |
admin 列出用户 → 200 |
P0 |
⬜ |
| 2 |
non-admin 列出用户 → 403 |
P0 |
⬜ |
| 3 |
创建用户(正常) → 201 |
P0 |
⬜ |
| 4 |
创建用户(重复用户名) → 400 |
P0 |
⬜ |
| 5 |
获取单个用户 → 200 |
P1 |
⬜ |
| 6 |
更新用户信息 → 200 |
P1 |
⬜ |
| 7 |
删除用户 → 200 |
P1 |
⬜ |
| 8 |
删除自己 → 400 |
P1 |
⬜ |
1.3 数据源管理 tests/test_instances.py
| # |
测试用例 |
优先级 |
状态 |
|
1 |
列出实例 → 200 |
P0 |
|
2 |
创建实例 → 201 |
P0 |
|
3 |
创建实例(non-admin) → 403 |
P0 |
|
4 |
获取实例详情 → 200 |
P1 |
|
5 |
更新实例 → 200 |
P1 |
|
6 |
删除实例 → 200 |
P1 |
|
7 |
测试连接(MySQL mock) → 测试结果 |
P1 |
|
8 |
列出数据库 → 列表 |
P2 |
|
9 |
列出表 → 列表 |
P2 |
1.4 工单管理 tests/test_tickets.py
| # |
测试用例 |
优先级 |
状态 |
|
1 |
列出工单(developer 只看自己的) → 过滤正确 |
P0 |
|
2 |
列出工单(admin 看全部) → 全部 |
P0 |
|
3 |
创建工单 → 201 |
P0 |
|
4 |
创建工单(实例不存在) → 400 |
P0 |
|
5 |
获取工单详情 → 200 |
P1 |
|
6 |
获取别人工单(developer) → 403 |
P1 |
|
7 |
审批工单(approve) → approved |
P0 |
|
8 |
审批工单(reject) → rejected |
P0 |
|
9 |
审批工单(non-dba) → 403 |
P0 |
|
10 |
审批已执行工单 → 400 |
P1 |
|
11 |
执行工单(已审批) → success |
P0 |
|
12 |
执行工单(未审批) → 400 |
P0 |
|
13 |
执行工单(执行失败) → failed |
P1 |
|
14 |
工单统计 → 正确数字 |
P1 |
|
15 |
分页查询 → 正确分页 |
P1 |
1.5 查询模块 tests/test_query.py
| # |
测试用例 |
优先级 |
状态 |
|
1 |
执行 SELECT 查询 → 结果 |
P0 |
|
2 |
执行 DROP → 拒绝 |
P0 |
|
3 |
执行 DELETE → 拒绝 |
P0 |
|
4 |
无 LIMIT 自动追加 → 限制行数 |
P1 |
|
5 |
guest 无权查询 → 403 |
P1 |
|
6 |
查询超时 → 错误 |
P2 |
|
7 |
审计日志记录 → 有记录 |
P1 |
1.6 仪表盘 tests/test_dashboard.py
| # |
测试用例 |
优先级 |
状态 |
| 1 |
获取统计数据 → 正确结构 |
P1 |
⬜ |
| 2 |
未登录 → 401 |
P1 |
⬜ |
Phase 2: 前端对接 (P0 — v0.2.0) ✅ 已完成
前后端对接已完成,所有页面已替换 mock 数据为真实 API 调用
2.1 API 集成测试
| # |
测试场景 |
优先级 |
状态 |
|
1 |
登录流程:输入→请求→token存储→跳转 |
P0 |
|
2 |
Dashboard 加载:请求stats→渲染卡片 |
P0 |
|
3 |
工单列表:请求→筛选→分页 |
P0 |
|
4 |
新建工单:表单→提交→刷新列表 |
P0 |
|
5 |
实例管理:CRUD→列表刷新 |
P1 |
|
6 |
401 自动跳转登录页 |
P0 |
2.2 组件测试
| # |
测试场景 |
优先级 |
状态 |
| 1 |
LoginPage 渲染 + 表单验证 |
P1 |
⬜ |
| 2 |
Dashboard 统计卡片渲染 |
P1 |
⬜ |
| 3 |
TicketsPage 筛选功能 |
P1 |
⬜ |
| 4 |
RouteGuard 权限拦截 |
P0 |
⬜ |
Phase 3: 新功能 TDD (P1 — v0.3.0)
先写测试,再写代码
3.1 Instance 密码加密 ✅ 已完成
| # |
TDD 步骤 |
状态 |
| 1 |
🔴 写测试:创建实例时密码加密存储 |
✅ test_crypto.py |
| 2 |
🔴 写测试:读取实例时密码解密返回 |
✅ test_crypto.py |
| 3 |
🟢 实现 AES-256-GCM 加密/解密工具 |
✅ app/core/crypto.py |
| 4 |
🟢 集成到 instance endpoint (create/update/decrypt) |
✅ |
| 5 |
✅ 9 个加密相关测试全部通过 |
✅ |
3.2 SQL 审核规则引擎 ✅ 已完成
| # |
TDD 步骤 |
状态 |
| 1 |
🔴 写测试:SELECT * 规则触发 info |
✅ |
| 2 |
🔴 写测试:无 WHERE 的 UPDATE/DELETE 规则触发 error |
✅ |
| 3 |
🔴 写测试:DROP TABLE/TRUNCATE 规则 |
✅ |
| 4 |
🔴 写测试:生产环境额外规则(ALTER TABLE 等) |
✅ |
| 5 |
🟢 实现 10 条规则引擎 |
✅ app/services/audit_engine.py |
| 6 |
🟢 集成到工单创建流程(自动审核+评分) |
✅ |
| 7 |
✅ 23 个审核引擎测试全部通过 |
✅ |
3.3 操作审计日志 ✅ 已完成
| # |
测试用例 |
状态 |
| 1 |
审计日志列表 API (admin/dba) |
✅ |
| 2 |
审计日志列表 API (developer 禁止) |
✅ |
| 3 |
创建实例 → 审计日志 |
✅ |
| 4 |
创建用户 → 审计日志 |
✅ |
| 5 |
创建工单 → 审计日志(含审核评分) |
✅ |
| 6 |
审批工单 → 审计日志 |
✅ |
| 7 |
审计日志分页 |
✅ |
| 8 |
审计日志过滤 |
✅ |
| 9 |
✅ 9 个审计日志测试全部通过 |
✅ |
Phase 4: 安全测试 (P1)
| # |
测试场景 |
状态 |
| 1 |
SQL 注入:DROP TABLE users; -- 被拦截 |
⬜ |
| 2 |
SQL 注入:UNION SELECT * FROM users 被拦截 |
⬜ |
| 3 |
越权:developer 不能审批工单 |
⬜ |
| 4 |
越权:developer 不能访问 admin API |
⬜ |
| 5 |
Token 伪造 → 401 |
⬜ |
| 6 |
并发创建工单不会重复 |
⬜ |
测试目录结构
覆盖率目标
| 阶段 |
目标后端覆盖率 |
目标前端覆盖率 |
| Phase 1 完成 |
40% |
0% |
| Phase 2 完成 |
50% |
30% |
| Phase 3 完成 |
60% |
40% |
| Phase 4 完成 |
70% |
50% |
执行优先级
立刻 — 创建 conftest.py + test_auth.py ✅
v0.2.0 — Phase 1 全部完成 ✅
v0.2.1 — Phase 2 前后端对接 ✅
v0.3.0 — Phase 3 密码加密 + SQL 审核引擎 ✅ (85 tests)
v0.4.0 — Phase 4 SQL AST + 规则管理 + Alembic + Docker ✅ (128 tests)
- v0.5.0 — Phase 5 运维工具 + 真实DB连接 + CI/CD ✅