Files
opsxsql/TDD_PLAN.md
T

8.3 KiB

Web-Lite 数据审核平台 - TDD 开发计划

创建时间: 2025-05-22 测试框架: pytest (后端) + vitest (前端) 目标覆盖率: > 60%


测试环境配置

后端 (pytest)

pip install pytest pytest-asyncio httpx aiomysql

conftest.py 基础配置:

  • 使用 SQLite in-memory 数据库
  • FastAPI TestClient + async 测试
  • 自动创建/销毁表
  • 测试用户 fixture

前端 (vitest)

npm install -D vitest @testing-library/react @testing-library/jest-dom jsdom

测试计划

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 并发创建工单不会重复 ⬜

测试目录结构

backend/
├── tests/
│   ├── conftest.py          # fixtures: db, client, users, token, test_instance
│   ├── test_auth.py         # 认证测试 (8)
│   ├── test_users.py        # 用户管理测试 (8)
│   ├── test_instances.py    # 数据源测试 (8)
│   ├── test_tickets.py      # 工单测试 (11)
│   ├── test_query.py        # 查询测试 (4)
│   ├── test_dashboard.py    # 仪表盘测试 (2)
│   ├── test_crypto.py       # 加密测试 (9)
│   ├── test_audit_engine.py # SQL审核引擎测试 (23)
│   ├── test_audit_logs.py   # 审计日志测试 (9)
│   ├── test_sql_analyzer.py # SQL AST测试 (34)
│   └── test_audit_rules.py  # 审核规则CRUD测试 (14)

frontend/
├── src/
│   ├── __tests__/
│   │   ├── setup.ts         # vitest setup
│   │   ├── LoginPage.test.tsx
│   │   ├── Dashboard.test.tsx
│   │   ├── TicketsPage.test.tsx
│   │   └── RouteGuard.test.tsx

覆盖率目标

阶段 目标后端覆盖率 目标前端覆盖率
Phase 1 完成 40% 0%
Phase 2 完成 50% 30%
Phase 3 完成 60% 40%
Phase 4 完成 70% 50%

执行优先级

  1. 立刻 — 创建 conftest.py + test_auth.py ✅
  2. v0.2.0 — Phase 1 全部完成 ✅
  3. v0.2.1 — Phase 2 前后端对接 ✅
  4. v0.3.0 — Phase 3 密码加密 + SQL 审核引擎 ✅ (85 tests)
  5. v0.4.0 — Phase 4 SQL AST + 规则管理 + Alembic + Docker ✅ (128 tests)
  6. v0.5.0 — Phase 5 运维工具 + 真实DB连接 + CI/CD ✅