3.6 KiB
3.6 KiB
S-01 · DSP 测试基建 + 缺陷清扫
| 字段 | 值 |
|---|---|
| 项目 | DSP · Desktop/dsp/dsp(backend + web + android) |
| 优先级 | P0 · M2 |
| 建议模型 | deepseek-v4.1-flash(主)/ qwen3.8-flash(用例设计复核) |
| 依赖 | 无 |
| 预估 | 2.5 天 |
一、背景(为什么做)
修正侦察结论:DSP 并非零测试——实测已有 backend/tests/ 1421 行(test_ranking 434 / test_regressions 346 / test_new_modules 314 / test_smoke 212 / test_ws_chat 65)+ web/e2e/ 253 行(smoke.mjs / feed-tabs.mjs)+ 完整 conftest.py(隔离库 + 迁移清空策略)。
真正的问题:测试散在 pytest 与 Node e2e 两套体系里,没有统一入口、没有通过率看板、没有双模式交叉验证(ASGI vs 真实 HTTP),且 12 个 app 中 moderation/catalog 等域覆盖不明。对标 EnglishDrill 的 84/84 双模式 E2E 报告体系(run_e2e.py + report.json + 分组通过率),DSP 缺的是统一化与可汇报,不是从零建。
二、目标(交付物)
- 统一 E2E 入口(参照
english-drill/tests/e2e/设计,适配 DSP 栈):tests/e2e/run_e2e.py:整合现有 pytest 域 + 新增 HTTP 域- 双模式:进程内 ASGI(默认)+ 真实 HTTP(
--http交叉验证) report.json+ 分组通过率产出(对标 ED 的报告格式)- 隔离库沿用现有 conftest 策略(先读 50 行 conftest.py 理解现有迁移/flush/缓存清理逻辑,不许重复造)
- 覆盖补全:先盘点现有 1421 行测试覆盖了哪些域,只补缺口——重点:moderation(审核)、catalog/creator、通知(notifications)、访客(visitors)、搜索边界。目标:统一入口下 ≥60 有效用例(现有可直接复用不重写)。
- 缺陷清扫:统一跑一遍,跑出的 5xx/数据不一致 → 修复 + 回归用例。三大反模式静态自查(ED 教训):
- 外部 id 未归一化就进 ORM(
int()裸调用) - 统计口径不一致(软删过滤缺失)
- 类型混淆(list/dict/1e999 直塞字段操作)
- 外部 id 未归一化就进 ORM(
- 原有测试零删除,双模式统一入口下全绿。
三、执行步骤
1. 先跑现有两套测试(pytest -q + npm run e2e)记录基线通过数
2. 读 backend/conftest.py 与 tests/*.py 盘点覆盖域;读 web/e2e/*.mjs 看前端 e2e 模式
3. 建 tests/e2e/run_e2e.py 统一入口(复用现有 conftest 隔离策略 + 现有用例)
4. 补缺口域用例(moderation/catalog/notifications/visitors/搜索边界)
5. 双模式跑通 → 修缺陷(一缺陷一用例)→ 产出 report.json + 修复清单
四、验收标准
- 统一入口
python tests/e2e/run_e2e.py≥60 用例全绿;--http模式同样全绿 - 原有 1421 行测试 + web e2e 零删除零跳过(基线通过数不减)
- 覆盖缺口域(moderation/catalog/notifications/visitors)明确盘点结论
report.json分组通过率产出(对标 ED 格式)- 每个修复的缺陷都有对应回归用例(清单对照)
- 隔离库确认(原始开发库零改动)
- 发现的 5xx 全部归零(或明确记录未修复项的阻塞原因)
五、验收命令(参考)
cd backend && python tests/e2e/run_e2e.py
python tests/e2e/run_e2e.py --http
cat tests/e2e/report.json
六、边界(不许做)
- 不为过测试改业务断言(修产品代码,不改测试标准)
- 不动 Android 端(本轮 Web/后端)
- 不迁移技术栈
七、交接
写 PROGRESS_S-01.md(含通过率、缺陷修复对照表、双模式输出)。