# 全站测试实施计划（2026-06-08）

> 设计：`docs/design/specs/2026-06-08-full-site-testing-strategy-design.md`  
> 用例 SSOT：`docs/testing/test-case-matrix.md`  
> MCP 规程：`docs/testing/mcp-browser-playbook.md`

## 现状快照

| 资产 | 数量/说明 |
|------|-----------|
| pytest 文件 | ~60（根目录 `tests/test_*.py`） |
| 门控 | `pre_deploy_check` → `tests/test_api.py` |
| UI E2E | `frontend/e2e/full-acceptance.spec.mjs`（15 case，serial） |
| 验收聚合 | `scripts/run_nexus_acceptance.py` + `acceptance_catalog.py` |
| 前端单测 | 无 vitest |
| MCP | Playwright MCP + MySQL MCP 已配置 |

## 实施阶段

### Phase 1 — 文档与编号（本周）

1. 发布 `test-case-matrix.md`（本文档姊妹篇）
2. 发布 `mcp-browser-playbook.md`
3. `acceptance_catalog.py` 增加 `chain` layer 与 `executions` 页

### Phase 2 — 目录与标记（1–2 周）

1. 新增 `tests/unit/`、`tests/integration/`、`tests/chain/`，**新用例只写新目录**
2. `pytest.ini` 或 `pyproject` 注册 markers：`unit`, `integration`, `chain`, `slow`
3. 从现有文件**复制**（非搬家）高价值用例各 1 例作为模板

### Phase 3 — 集成层现代化（2 周）

1. `tests/integration/conftest.py`：`AsyncClient` + 测试 DB 事务回滚
2. 将 `test_api.py` 断言逐步迁为 pytest（保留脚本作门控兼容层）
3. 契约：关键 API 响应 schema 快照（Pydantic model dump）

### Phase 4 — 链条 + UI 拆分（2–3 周）

1. `tests/chain/test_push_async_flow.py`：POST accepted → WS progress mock
2. `tests/chain/test_script_exec_flow.py`：创建脚本 → 执行 → 看板状态
3. 拆分 `full-acceptance.spec.mjs` → `frontend/e2e/pages/*.spec.mjs`
4. 新增 `flows/push-submit.spec.mjs`（非破坏性）

### Phase 5 — CI 与 MCP 闭环（持续）

1. `.gitea/workflows/ci-cd.yml` 增加 `pytest -m "not chain and not slow"`
2. nightly：`run_nexus_acceptance.py --with-unit --with-ui`
3. 每个 sprint 选 3 条 `MCP-*` 沉淀为 Playwright

## 本地命令速查

```bash
# L1 单元
pytest tests/unit tests/test_posix_paths.py -q -m unit

# L2 集成（需 docker + start-dev）
pytest tests/integration -q -m integration

# L3 链条
pytest tests/chain -q -m chain

# L4 UI
cd frontend && NEXUS_E2E_BASE=http://127.0.0.1:8600 NEXUS_E2E_PASSWORD=*** npm run test:e2e

# 全量验收
python scripts/run_nexus_acceptance.py --with-unit --with-ui
```

## 回滚

- 新目录与 marker 均为增量；删除 `tests/unit` 等不影响现门控
- `test_api.py` 在迁移完成前保持不动

## 测试要点（实施自检）

- [ ] 任意新功能 PR 必须标明影响的用例编号（如 `IT-PUSH-003`）
- [ ] MCP 探索报告路径：`docs/reports/mcp-runs/YYYY-MM-DD-<id>.md`
