133 lines
4.4 KiB
Markdown
133 lines
4.4 KiB
Markdown
# 测试方案
|
||
|
||
时间戳: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 坐标配准、网格体素填充和标签体系。
|