feat: 完善服务端工程化、发布流程和自动化测试
This commit is contained in:
@@ -40,6 +40,16 @@ bash ./scripts/package-offline-server.sh --version 0.1.0 --output-dir ./dist/Sim
|
||||
- admin-ui/:新版管理后台前端源码。
|
||||
- scripts/package-offline-server.sh:生成服务端 Docker 离线部署包。
|
||||
|
||||
本地自动化测试:
|
||||
|
||||
```bash
|
||||
cd update-server
|
||||
./venv/bin/pip install -r requirements-dev.txt
|
||||
./venv/bin/python3 -m pytest -q
|
||||
```
|
||||
|
||||
当前测试会自动创建临时数据库、临时签名密钥和临时存储目录,不会改动本地 `mini.db`、`.env` 或真实上传文件。覆盖范围包括管理员登录/JWT、应用创建、License 创建设备登记、更新检查、发布入库/文件存储回退、崩溃报告上传幂等和管理员查询。
|
||||
|
||||
本地源码启动:
|
||||
|
||||
```bash
|
||||
|
||||
@@ -301,6 +301,8 @@ CLIENT_API_TOKEN=SimCAEClientToken2026
|
||||
2. 上传压缩发布包,支持 zip、tar.gz、tgz、tar.bz2、tbz2、rar
|
||||
```
|
||||
|
||||
点击“发布版本”后,浏览器会先把文件上传到服务端。上传完成后,服务端会创建后台发布任务,继续执行解压、Manifest 校验、数据库写入和 MinIO 上传;管理页面会轮询并显示任务状态。这样可以减少大版本发布时长时间占用同一个 HTTP 请求的问题。
|
||||
|
||||
压缩发布包上传到服务器后,服务端会先解压,再校验是否包含 `.env` 中 `RELEASE_MAIN_EXECUTABLE` 指定的主程序路径。Windows 默认是:
|
||||
|
||||
```text
|
||||
|
||||
@@ -12,7 +12,9 @@
|
||||
- 运行服务:Uvicorn。
|
||||
- 请求模型和参数校验:FastAPI 自带的 Pydantic 体系。
|
||||
- 管理后台前端:GitHub 上的 pure-admin-thin / vue-pure-admin 生态,技术栈是 Vue3、Element Plus、TypeScript、Vite。
|
||||
- 前端包管理:统一使用 npm 和 package-lock.json,不再维护 pnpm-lock.yaml。
|
||||
- 对象存储:MinIO。
|
||||
- 自动化测试:pytest。测试用例会在临时目录里创建隔离数据库、临时 Manifest 私钥、临时上传目录和崩溃报告目录。
|
||||
|
||||
后端工程化参考方向:
|
||||
|
||||
@@ -113,9 +115,35 @@ app/
|
||||
- `app/repositories/`:管理后台已迁移接口的数据库读写层,route 不再直接拼 SQL 或打开数据库连接。
|
||||
- `app/api/router.py`:统一注册基础路由。
|
||||
- `main.py`:已经压缩为服务入口,只保留生命周期、MinIO 初始化、静态挂载和全局客户端鉴权。
|
||||
- `tests/`:自动化测试入口,覆盖管理员登录/JWT、License/设备登记、更新检查、版本发布、崩溃报告上传幂等和管理员查询。
|
||||
|
||||
当前业务接口路径保持不变,避免影响 Launcher、Updater 和已部署管理页面。
|
||||
|
||||
## 自动化测试
|
||||
|
||||
第一次运行测试前安装开发依赖:
|
||||
|
||||
```bash
|
||||
cd update-server
|
||||
./venv/bin/pip install -r requirements-dev.txt
|
||||
```
|
||||
|
||||
运行测试:
|
||||
|
||||
```bash
|
||||
./venv/bin/python3 -m pytest -q
|
||||
```
|
||||
|
||||
当前测试不连接真实 MinIO,也不使用真实 `mini.db`。测试夹具会自动创建临时数据库和临时目录,并生成临时 RSA 私钥,因此适合在提交前快速回归。
|
||||
|
||||
当前覆盖范围:
|
||||
|
||||
- 管理员默认账号初始化、用户名密码登录、JWT 签发。
|
||||
- 应用创建、License 创建、设备登记和设备数占用。
|
||||
- 客户端更新检查和版本策略响应。
|
||||
- 版本发布事务、文件 hash 入库、MinIO 不可用时本地存储回退。
|
||||
- 崩溃报告上传、同一 `clientReportId` 幂等重复上传、管理员查询。
|
||||
|
||||
## 后续迁移路线
|
||||
|
||||
后续不建议一次性重写全部后端,而是按下面顺序迁移:
|
||||
|
||||
Reference in New Issue
Block a user