Files
Nexus/docs/design/specs/2026-06-08-full-site-testing-strategy-design.md
2026-07-08 22:31:31 +08:00

91 lines
4.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 全站测试体系设计(2026-06-08
## 背景与目标
Nexus 6.0 已有 **~60 个 pytest 模块**、`tests/test_api.py` 门控脚本、`frontend/e2e/full-acceptance.spec.mjs`15 条 UI 冒烟)、`scripts/run_nexus_acceptance.py` 统一验收入口。缺口在于:
- 单元测试按**功能域**未全覆盖,前端几乎无单测
- 集成测试以手写 `urllib` 为主,缺契约快照与 DB 夹具规范
- **链条测试**(多 API / 多页面 / WS / 后台任务)用例未系统化
- Agent **MCP 浏览器点页**有 Playwright MCP,但未沉淀为可重复用例清单
**目标**:建立四层测试金字塔 + Agent MCP 探索层,全部有**编号用例**、可 CI、可 `run_nexus_acceptance.py` 汇总。
## 方案对比
| 方案 | 优点 | 缺点 | 结论 |
|------|------|------|------|
| A. 仅扩 pytest | 与现门控一致 | 无真实 UI 交互 | 作为 L1–L3 底座 |
| B. 仅 Playwright | 贴近用户 | 慢、脆、难测纯逻辑 | 作为 L4 |
| C. MCP 临时点页 | Agent 灵活 | 不可 CI、难回归 | 作为 L5 探索 + 用例沉淀到 B |
| **D. 四层 + MCP 规程(选定)** | 分工清晰、可渐进 | 初期文档/用例工作量大 | ✅ |
## 选定架构
```
┌─────────────────────┐
│ L5 Agent MCP 探索 │ 新功能/回归抽测 → 沉淀为 L4
└──────────┬──────────┘
┌──────────▼──────────┐
│ L4 UI E2E (Playwright)│ frontend/e2e/*.spec.mjs
└──────────┬──────────┘
┌──────────▼──────────┐
│ L3 链条 (Chain) │ tests/chain/ + pytest markers
└──────────┬──────────┘
┌──────────▼──────────┐
│ L2 集成 (API+DB) │ tests/integration/ + test_api.py
└──────────┬──────────┘
┌──────────▼──────────┐
│ L1 单元 (Unit) │ tests/unit/ 按域拆分
└─────────────────────┘
```
### 工具链
| 层 | 工具 | CI | Agent MCP |
|----|------|-----|-----------|
| L1 | pytest + pytest-asyncio + 内存 SQLite/假 Redis | ✅ gitea workflow | 否 |
| L2 | pytest + httpx AsyncClient + docker mysql/redis | ✅ 可选 job | MySQL MCP 验数 |
| L3 | pytest markers `@pytest.mark.chain` | ✅ nightly | 否 |
| L4 | `@playwright/test` | ✅ `--with-ui` | Playwright MCP 对照用例 |
| L5 | Playwright MCP `browser_*` | ❌ 人工触发 Agent | ✅ |
### 目录规划(渐进迁移,不一次性搬空 tests/)
```
tests/
unit/ # 纯函数、schema、utils(从现有 test_*.py 归类迁入)
integration/ # API + DBhttpx TestClient / 活 API
chain/ # 多步业务流
fixtures/ # 共享 conftest 分层
acceptance_catalog.py # 扩展 layer: unit|integration|chain|ui|mcp
frontend/e2e/
pages/ # 每页一个 spec(从 full-acceptance 拆分)
flows/ # 链条:登录→推送→进度→历史
docs/testing/
test-case-matrix.md # 全量用例 SSOT(编号)
mcp-browser-playbook.md # Agent MCP 点页规程
```
### MCP Agent 点页规程(原则)
1. **用例先行**:每个 MCP 探索必须对应 `docs/testing/test-case-matrix.md``MCP-*` 编号
2. **步骤可复现**snapshot → click → assert 文本;截图存 `docs/reports/e2e-screenshots/`
3. **禁止生产破坏性操作**:推送/脚本执行/批量删除仅对 `test-*` 子机或 dry-run
4. **沉淀**:MCP 通过的流程 7 日内写入 Playwright specL4
### 安全与性能约束
- 测试账号:`NEXUS_TEST_ADMIN_*`,禁止写生产密钥入 git
- E2E 默认 `127.0.0.1:8600`;生产 URL 仅只读冒烟且需用户批准
- 链条测试子机:标记 `is_test=1` 或使用 ID 段约定(文档化)
- 单 CI job pytest 目标 < 10minchain/ui 放 nightly
## 验收标准(体系本身)
- [ ] `docs/testing/test-case-matrix.md` 覆盖 15 SPA 页 + 安装向导 + Agent 心跳
- [ ] 每层有 ≥1 个可运行示例用例与命令
- [ ] `run_nexus_acceptance.py` 能 rollup unit/integration/chain/ui 四层
- [ ] Agent 手册 `mcp-browser-playbook.md` 含登录、推送提交、脚本执行看板 3 条标准 MCP 流
- [ ] CIPR 跑 L1+L2main nightly 跑 L3+L4