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

4.7 KiB
Raw Permalink Blame History

全站测试体系设计(2026-06-08)

背景与目标

Nexus 6.0 已有 ~60 个 pytest 模块tests/test_api.py 门控脚本、frontend/e2e/full-acceptance.spec.mjs15 条 UI 冒烟)、scripts/run_nexus_acceptance.py 统一验收入口。缺口在于:

  • 单元测试按功能域未全覆盖,前端几乎无单测
  • 集成测试以手写 urllib 为主,缺契约快照与 DB 夹具规范
  • 链条测试(多 API / 多页面 / WS / 后台任务)用例未系统化
  • Agent MCP 浏览器点页有 Playwright MCP,但未沉淀为可重复用例清单

目标:建立四层测试金字塔 + Agent MCP 探索层,全部有编号用例、可 CI、可 run_nexus_acceptance.py 汇总。

方案对比

方案 优点 缺点 结论
A. 仅扩 pytest 与现门控一致 无真实 UI 交互 作为 L1L3 底座
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.mdMCP-* 编号
  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