test: pytest 工程化落地 — 本地门禁、容器测试镜像、迁移链冒烟测试
- 门禁: 本地 pre-push 钩子(.git/hooks,推送前强制跑全量 pytest) - Docker: 新增 test 镜像阶段(含 dev 依赖与 tests),compose 提供 --profile test run --rm test 入口;dev.sh 支持 ./dev.sh test - 测试基建: 根目录 conftest.py 统一 DATABASE_URL/APP_ENCRYPTION_KEY, 移除 9 个测试文件内的重复 setdefault(含多余 import os) - 迁移冒烟: tests/test_migrations.py 校验链线性、脚本可编译、空库整链 upgrade head 后与 Base.metadata 表/列/索引对齐 - 修复冒烟测试发现的漂移: YybRechargeTask.task_id 冗余 index=True (唯一索引已覆盖,迁移链未建普通索引,模型与真实 schema 对齐) - alembic.ini: path_separator=os 消除弃用告警;README 补测试章节
This commit is contained in:
@@ -106,6 +106,28 @@ python -c "import secrets; print(secrets.token_urlsafe(32))"
|
||||
3. IMAP 获取验证码 → 提交验证码 → 获取 Cookie
|
||||
```
|
||||
|
||||
## 运行测试
|
||||
|
||||
```bash
|
||||
# 全量回归(SQLite 内存库,无需 MySQL / .env 配置)
|
||||
uv run --group dev pytest # 或 ./dev.sh test
|
||||
|
||||
# 只跑单个文件 / 用例
|
||||
uv run --group dev pytest tests/test_cookie_operations.py
|
||||
|
||||
# 容器内回归(镜像内为构建时代码,改动后需重新构建)
|
||||
docker compose --profile test run --rm test
|
||||
```
|
||||
|
||||
测试使用各文件自建的 SQLite 内存引擎,互不干扰;根目录 `conftest.py`
|
||||
统一兜底 `DATABASE_URL` / `APP_ENCRYPTION_KEY`,防止误连开发/生产库。
|
||||
数据库迁移链的冒烟校验见 `tests/test_migrations.py`(链线性 + 脚本可
|
||||
编译 + 空库整链 `upgrade head` 后与模型元数据表/列/索引对齐;MySQL
|
||||
专属 DDL 由迁移脚本内的方言防护跳过,真实执行仍以部署流程
|
||||
`docker-entrypoint.sh` / `./deploy.sh` / `./dev.sh` 的 MySQL 为准)。
|
||||
已安装本地 pre-push 钩子:推送前自动跑全量测试,失败阻止推送
|
||||
(紧急绕过:`git push --no-verify` 或 `SKIP_TESTS=1 git push`)。
|
||||
|
||||
## 技术栈
|
||||
|
||||
- 后端:FastAPI + SQLAlchemy + SQLite + JWT
|
||||
|
||||
Reference in New Issue
Block a user