Files
Pre_Seg_Server/doc/09-test-plan.md
admin f020ff3b4f feat: 打通全栈标注闭环、异步拆帧与模型状态
后端能力:

- 新增 Celery app、worker task、ProcessingTask 模型、/api/tasks 查询接口和 media_task_runner,将 /api/media/parse 改为创建后台任务并由 worker 执行 FFmpeg/OpenCV/pydicom 拆帧。

- 新增 Redis 进度事件模块和 FastAPI Redis pub/sub 订阅,将 worker 任务进度广播到 /ws/progress;Dashboard 后端概览接口改为聚合 projects/frames/annotations/templates/processing_tasks。

- 统一项目状态为 pending/parsing/ready/error,新增共享 status 常量,并让前端兼容归一化旧状态值。

- 扩展 AI 后端:新增 SAM registry、SAM2 真实运行状态、SAM3 状态检测与文本语义推理适配入口,以及 /api/ai/models/status GPU/模型状态接口。

- 补齐标注保存/更新/删除、COCO/PNG mask 导出相关后端契约和模板 mapping_rules 打包/解包行为。

前端能力:

- 新增运行时 API/WS 地址推导配置,前端 API 封装对齐 FastAPI 路由、字段映射、任务轮询、标注归档、导出下载和 AI 预测响应转换。

- Dashboard 改为读取 /api/dashboard/overview,并订阅 WebSocket progress/complete/error/status 更新解析队列和实时流转记录。

- 项目库导入视频/DICOM 后创建项目、上传媒体、触发异步解析并刷新真实项目列表。

- 工作区加载真实帧、无帧时触发解析任务、回显已保存标注、保存未归档 mask、更新 dirty mask、清空当前帧后端标注、导出 COCO JSON。

- Canvas 支持当前帧点/框提示调用后端 AI、渲染推理/已保存 mask、应用模板分类并维护保存状态计数;时间轴按项目 fps 播放。

- AI 页面新增 SAM2/SAM3 模型选择,预测请求携带 model;侧边栏和工作区新增真实 GPU/SAM 状态徽标。

- 模板库和本体面板接入真实模板 CRUD、分类编辑、拖拽排序、JSON 导入、默认腹腔镜分类和本地自定义分类选择。

测试与文档:

- 新增 Vitest 配置、前端测试 setup、API/config/websocket/store/组件测试,覆盖登录、项目库、Dashboard、Canvas、工作区、模型状态、时间轴、本体和模板库。

- 新增 pytest 后端测试夹具和 auth/projects/templates/media/AI/export/dashboard/tasks/progress 测试,使用 SQLite、fake MinIO、fake SAM registry 和 Redis monkeypatch 隔离外部服务。

- 新增 doc/ 文档结构,冻结当前需求、设计、接口契约、测试计划、前端逐元素审计、实现地图和后续实施计划,并同步更新 README 与 AGENTS。

验证:

- conda run -n seg_server pytest backend/tests:27 passed。

- npm run test:run:54 passed。

- npm run lint、npm run build、compileall、git diff --check 均通过;Vite 仅提示大 chunk 警告。
2026-05-01 13:29:14 +08:00

3.4 KiB

当前测试计划

本文档把 doc/07-current-requirements-freeze.md 中的冻结需求映射到测试。测试目标是覆盖当前真实行为和明确占位行为。

测试分层

层级 工具 覆盖范围
前端单元/组件 Vitest + Testing Library API 封装、store、组件交互、Mock/UI-only 状态
后端路由 pytest + FastAPI TestClient Auth、Projects、Templates、AI、Export、Media 的接口契约
静态契约 TypeScript / py_compile 类型和 Python 语法

覆盖矩阵

需求 测试文件 覆盖点
R1 登录与会话 src/components/Login.test.tsx, backend/tests/test_auth.py 成功登录、失败提示、后端 401
R2 项目管理 src/lib/api.test.ts, backend/tests/test_projects.py 前端字段映射、PATCH 更新、后端 CRUD、帧列表
R3 媒体上传与拆帧 backend/tests/test_media.py 扩展名校验、自动建项目、关联项目、创建异步任务、worker 注册帧
R4 工作区与帧浏览 src/components/VideoWorkspace.test.tsx, src/components/FrameTimeline.test.tsx 加载帧、无帧触发解析、切帧、播放
R5 工具栏 src/components/ToolsPalette.test.tsx 工具切换、AI 跳转、占位按钮存在
R6 AI 推理 src/lib/api.test.ts, src/components/CanvasArea.test.tsx, src/components/AISegmentation.test.tsx, src/components/ModelStatusBadge.test.tsx, backend/tests/test_ai.py 点/框/semantic 契约、模型选择、GPU/SAM 状态、状态徽标、坐标归一化、正负点 labels、polygons 转 path、后端 fake registry
R7 标注保存 src/components/VideoWorkspace.test.tsx, src/components/CanvasArea.test.tsx, src/lib/api.test.ts, backend/tests/test_ai.py 保存标注、加载回显、更新 dirty 标注、清空删除已保存标注、项目不存在、帧不存在
R8 模板库 src/lib/api.test.ts, backend/tests/test_templates.py mapping_rules 解包/打包、模板 CRUD
R9 本体检查面板 src/components/OntologyInspector.test.tsx 模板选择、分类展示、具体分类选择、自定义分类本地添加
R10 Dashboard 与 WebSocket src/lib/api.test.ts, src/lib/websocket.test.ts, src/components/Dashboard.test.tsx, backend/tests/test_dashboard.py, backend/tests/test_main.py, backend/tests/test_progress_events.py 后端概览接口、任务表驱动队列、Redis 进度事件 payload/发布、地址推导、消息订阅、队列更新、heartbeat
R11 导出 src/components/VideoWorkspace.test.tsx, src/lib/api.test.ts, backend/tests/test_export.py COCO 按钮下载、导出前自动保存、COCO 路径、JSON 结构、mask ZIP
R12 配置 src/lib/config.test.ts env 优先、hostname 推导、WS 推导
R13 文档与测试 doc/09-test-plan.md 测试覆盖矩阵

运行命令

npm run test
npm run test:run
npm run lint
npm run build

pip install -r backend/requirements-dev.txt
pytest backend/tests
python -m py_compile backend/routers/ai.py backend/routers/templates.py backend/schemas.py

当前不做的测试

  • 不启动真实 PostgreSQL、MinIO、Redis 或 SAM 模型。
  • 不做真实视频大文件拆帧性能测试。
  • 不用浏览器 E2E 验证视觉细节。
  • 不把当前明确 Mock/UI-only 的按钮当成真实业务成功路径测试。