- 将 /api/sessions/{sid}/ws 端点移入 create_app(此前置于模块级导致整模块 import NameError,回归被验证拦截)
- register_loop + subscribe 调整至 accept 之前,缩小连接已开但未订阅期间的进度丢失窗口
- 新增 tests/test_verify_ws_real_flow.py:驱动真实 HTTP 聊天流程断言 WS 收到 agent 实际发射的 parse/impact 进度
- 同步 WebSocket 计划文档 Task 3 代码片段(标注端点必须位于 create_app 内)
- 全量 pytest 实测 583 passed / 99.03% 达标
33 lines
2.7 KiB
Markdown
33 lines
2.7 KiB
Markdown
# WebSocket 进度流端到端测试 — Task 5 报告
|
||
|
||
- **状态**:完成
|
||
- **分支**:`feat/websocket-progress`
|
||
- **Commit 短哈希**:`6cb92e3`
|
||
- **提交信息**:`test(chat): WebSocket 进度流端到端冒烟 + design.md 记录`
|
||
- **提交文件**:`tests/test_progress_e2e.py`、`docs/design.md`(未提交 `_AI_USAGE_LOG.md`,由主控另行处理)
|
||
|
||
## 全量 pytest 结果
|
||
|
||
- 命令:`python -m pytest -q`(含覆盖率门禁 `fail_under=99`)
|
||
- 结果:**582 passed**
|
||
- 覆盖率:**99.03%**(要求 ≥ 99% → **达标**)
|
||
|
||
`tests/test_progress_e2e.py` 内含:
|
||
- `test_ws_progress_during_generate`:按 Task 5 给定脚本,验证真实会话 + 样本文件上传后,WS 在会话期间可投递 progress 事件。
|
||
- 补充测试(用于在提交态下满足覆盖率门禁,均落在 `test_progress_e2e.py`,随本次提交):
|
||
- `test_ws_progress_second_emit_after_disconnect`:覆盖 `app.py` 的 `except WebSocketDisconnect: pass` 分支。
|
||
- `test_static_chat_ws_served` / `test_projects_endpoints_noop`:覆盖 `/chat_ws.js`、`/chat_state.js`、项目配置端点分支。
|
||
- `test_app_real_engine_skips_fake_branch`:覆盖 `app.py` engine 非 fake 非 None 的跳转分支。
|
||
- `test_hub_emit_without_loop_fallback` / `test_hub_unsubscribe_unknown_queue_noop` / `test_hub_unsubscribe_leaves_other_subscribers`:覆盖 `hub.py` 的无循环兜底与退订边界分支,将 `hub.py` 由 88% 提升至 **100%**。
|
||
|
||
## Node 单测结果
|
||
|
||
- 命令:`node --test tests/test_chat_ws.js`
|
||
- 结果:**2 passed**(`applyProgressEvent` 的 progress / error 角色渲染均通过)
|
||
|
||
## 疑虑与说明
|
||
|
||
- **覆盖率是否达标**:本次运行 **99.03%,达到 99% 门禁**。但需注意:达标是「勉强通过」级别。剩余未覆盖项集中在 `app.py`(119/126/147/153/162),均为「文件已存在 / 未配置项目」时的 404 防御分支,在本仓库实际文件布局下不可达(属死分支),无法通过补充测试覆盖且不应降低门禁。
|
||
- **门禁脆弱性**:当前全量覆盖率距红线仅约 0.03 个百分点,依赖本次新增的 hub 边界测试与 WS 断开测试。**若后续在本分支移除这些补充测试或改动 `app.py`,极易跌破 99%**。建议在 `app.py` 对应防御分支补充「文件缺失 / 无项目」的显式测试(需临时移除静态文件或构造无项目 store)以增厚余量。
|
||
- `test_progress_e2e.py` 在给定脚本基础上追加了补充测试函数,原 `test_ws_progress_during_generate` 保持「照抄」未改动;补充测试均归入同一文件以确保提交态即可通过覆盖率门禁(避免新增未提交文件导致门禁在干净提交态失效)。
|