# 测试方案:导出 STL、保存分割结果与项目库复核 测试方案文档路径:`工程分析/测试方案-2026-05-20-03-19-25.md` ## 静态检查 - 运行 `npm run lint`,确认 TypeScript 类型检查通过。 - 运行 `git diff --check`,确认无空白错误。 结果:已通过。 ## 构建检查 - 在 `WebSite/` 执行 `npm run build`,确认生产构建通过。 结果:已通过。Vite 仍有单 bundle 超过 500 kB 的既有提示,不影响本次功能。 ## 关键业务场景验证 - 调用 `POST /api/projects/head-ct-demo/segmentation-results`,确认返回项目包含保存记录。 - 调用 `/api/projects/head-ct-demo/export-bundle?targets=stl`,确认压缩包内包含原始 STL 文件。 - 调用 `/api/projects/head-ct-demo/export-bundle?targets=segmentation,pose,stl`,确认分割、位姿与 STL 可共包导出。 - 验证项目库 `分割结果` 右侧导出菜单参数与逆向工作区一致。 结果:已通过。 - 临时服务 `127.0.0.1:4100` 下保存接口返回 `segmentationResults`,并可看到默认 `最佳位姿`。 - `targets=stl` 返回 HTTP 200,压缩包约 `116M`,目录包含 9 个原始 STL:会厌、气管上段、气管狭窄段、气管下段、气管整体、声门、头部、头颅、肿瘤。 - `targets=segmentation,pose,stl` 返回 HTTP 200,约 `121433464` bytes,用时约 `7.58s`,包内包含分割 NIfTI、labels JSON、pose JSON 和 STL 原始模型。 ## 医学影像数据相关边界验证 - 分割导出仍保持 DICOM 同维度 NIfTI。 - 保存的分割结果导出时使用保存时位姿。 - `visible/all` 分割范围继续影响 Label Map 与 labels JSON。 结果:已覆盖导出包结构验证;分割 NIfTI 生成逻辑未改变,继续复用上一轮完整 STL 网格实体导出链路。 ## UI 验证 - 逆向工作区顶部出现 `保存至项目库`。 - 三栏布局中左侧融合视角变窄,中部工具栏和右侧映射视图变宽。 - 右侧图例只显示当前 slice 中有边或填充像素的构件;无构件时显示空状态。 - 项目库分割结果区域显示保存记录和导出入口。 ## 文档验证 - `Agent.md` 存在。 - `Agent.md` 包含当前系统使用方式。 - `主要功能` 说明在 500~1300 字范围内。 结果:已通过。`Agent.md` 总字数约 `1105` 字符,主要功能段落在 500~1300 字范围内。 ## 部署验证 - 重新部署后验证: - `http://127.0.0.1:4000/api/health` - `http://127.0.0.1:4000/` - 部署后验证导出包接口。 结果:已通过。 - `tmux` 会话 `revoxelseg-dicom` 已重启,服务输出 `ReVoxelSeg DICOM server ready at http://0.0.0.0:4000/`。 - `/api/health` 返回 `{"ok":true,"service":"revoxelseg-dicom"}`。 - 首页 HTTP 200。 - 部署后 `targets=stl` 导出返回 HTTP 200,约 `121372189` bytes,压缩包内包含 9 个 STL 原始模型。 ## Git/Gitea 备份验证 - 提交信息包含 `2026-05-20-03-19-25` 和本次修改摘要。 - 推送到 Gitea 成功。 结果:本地 Git commit 已完成;Gitea 推送重试 2 次均失败,错误为 `No route to host`,说明当前环境到 `192.168.31.5:5002` 网络不可达。待网络恢复后执行 `git push origin main` 即可补推。 ## 风险与回归关注点 - STL 原始模型打包体积较大,接口验证可先用 `targets=stl` 查看目录,不反复下载全量组合。 - 临时保存接口测试会修改 `WebSite/data/state.json`,该运行态文件不纳入提交。 - 旧的未暂存历史删除状态不应混入提交。