# 测试方案 时间戳:2026-05-04-03-21-40 ## 测试目标 验证系统已经从纯前端静态演示升级为前后端协调系统,并确认登录同步、默认项目、恢复出厂设置、NIfTI 导出和部署均可用。 ## 静态检查 - 检查 `server.ts` 是否提供 API 和前端页面服务。 - 检查 `src/lib/api.ts` 是否统一封装 API 请求。 - 检查项目列表、系统管理、逆向工作区是否不再依赖硬编码假数据。 - 检查 `.gitignore` 是否排除 `WebSite/data/`、`WebSite/exports/`、DICOM、STL、依赖和构建产物。 ## 构建与类型检查 在 `WebSite/` 下执行: ```bash npm run lint npm run build ``` 预期结果: - TypeScript 类型检查通过。 - Vite 构建通过。 ## API 验证 启动后端服务后验证: ```bash curl -s http://127.0.0.1:4000/api/health curl -s http://127.0.0.1:4000/api/session curl -s http://127.0.0.1:4000/api/projects curl -s http://127.0.0.1:4000/api/users curl -s -X POST http://127.0.0.1:4000/api/demo/reset ``` 预期结果: - health 返回 `ok`。 - projects 包含默认项目 `head-ct-demo`。 - 默认项目 `dicomCount` 为 `300`。 - 默认项目 STL 模块包含 `Head_CT_ReConstruct` 下的 `.stl` 文件。 - reset 后默认项目仍存在。 ## 登录同步验证 - 浏览器 A 登录 `admin / 123456`。 - 浏览器 B 刷新或等待轮询后读取到已登录状态。 - 浏览器 A 或 B 登出后,另一个浏览器轮询后同步到未登录状态。 命令级验证: ```bash curl -s -X POST http://127.0.0.1:4000/api/login -H 'Content-Type: application/json' -d '{"account":"admin","password":"123456"}' curl -s http://127.0.0.1:4000/api/session curl -s -X POST http://127.0.0.1:4000/api/logout curl -s http://127.0.0.1:4000/api/session ``` ## NIfTI 导出验证 执行: ```bash curl -L -o /tmp/revoxelseg-mask.nii.gz -X POST http://127.0.0.1:4000/api/projects/head-ct-demo/export-mask file /tmp/revoxelseg-mask.nii.gz gzip -t /tmp/revoxelseg-mask.nii.gz ``` 预期结果: - 下载文件存在。 - 文件为 gzip 压缩数据。 - `gzip -t` 校验通过。 - 响应文件名后缀为 `.nii.gz`。 ## 页面验证 - 打开 `http://192.168.3.11:4000/`。 - 登录页可正常登录。 - 总体概况显示后端统计数据。 - 项目库默认显示头部 CT 演示项目。 - 项目详情展示 `Head_CT_DICOM` 和 `Head_CT_ReConstruct` 相关信息。 - 系统管理页点击“恢复演示环境出厂设置”后,项目仍恢复为默认 DICOM/STL。 - 逆向工作区可导出 `nii.gz` mask。 ## 回归风险 - 引入后端后部署方式从纯 Vite 改为 Express + Vite 中间件,需要确认 `4000` 服务由 `server.ts` 托管。 - 后端共享登录状态是演示同步方案,不等同生产级多用户 session。 - NIfTI 文件当前为演示 mask,非医学级真实 STL 体素化结果。 ## 人工审核状态 本次用户明确要求无需人工二次确认。 状态:自动确认,继续执行。 ## 执行结果 - `npm run lint` 执行成功。 - `npm run build` 执行成功。 - Vite 仍有大 chunk 警告,当前不影响本次功能。 - 已新增 Express 后端 `server.ts`,并通过 `npm run serve -- --host 0.0.0.0 --port 4000` 托管前后端。 - `GET /api/health` 返回 `ok: true`。 - `GET /api/projects` 返回默认项目 `head-ct-demo`。 - 默认项目载入结果: - `dicomCount: 300` - `modelCount: 9` - `dicomPath: Head_CT_DICOM` - `modelPath: Head_CT_ReConstruct` - `POST /api/demo/reset` 执行成功,重置后默认项目仍载入 `Head_CT_DICOM` 与 `Head_CT_ReConstruct`。 - `POST /api/login` 使用 `admin / 123456` 登录成功。 - `GET /api/session` 登录后返回 `authenticated: true`。 - `POST /api/logout` 登出成功。 - `GET /api/session` 登出后返回 `authenticated: false`。 - `POST /api/projects/head-ct-demo/export-mask?format=nii.gz` 执行成功。 - `/tmp/revoxelseg-mask.nii.gz` 通过 `gzip -t` 校验。 - 解压后 NIfTI magic 为 `n+1\0`。 - `POST /api/projects/head-ct-demo/export-mask?format=nii` 执行成功,生成未压缩 `.nii`。 - `http://192.168.3.11:4000/` 返回 `HTTP/1.1 200 OK`。 - 当前部署由 `tmux` 会话 `revoxelseg-dicom` 托管。 ## 剩余说明 - 当前导出的 NIfTI mask 是可下载、格式有效的演示分割体数据。 - 真实医学级 STL 反向体素化仍需后续加入 DICOM 空间解析、STL 坐标配准、网格体素填充和标签体系。