57 lines
3.3 KiB
Markdown
57 lines
3.3 KiB
Markdown
# pbls
|
||
|
||
PBL Agent OS 验证原型应用(唯一入口 `app/pbls.py`,端口以
|
||
`projects/pbls/env/test.json` 为唯一事实源)。业务模块见机构 `modules/pbl_*`。
|
||
|
||
## 测试依赖(DISC.2)
|
||
|
||
**结论:pytest 已显式声明,不再依赖临时注入 `PYTHONPATH`。** 宿主 `python3` 上没有 pytest
|
||
(`python3 -m pytest` → `No module named pytest`),且本机宿主 user site 是只读文件系统
|
||
(`pip install --user` 报 `[Errno 30] Read-only file system`),所以测试依赖的落点是 **venv**。
|
||
|
||
### 新增/相关文件清单
|
||
|
||
| 路径 | 层级 | 职责 |
|
||
|---|---|---|
|
||
| `apps/pbls/requirements-test.txt` | 应用级 | 测试前置依赖清单(`pytest>=7.0,<10`),由 `build.sh` **第 7b 步**装进应用 venv |
|
||
| `apps/pbls/build.sh` 第 7b 步 | 应用级 | `pip install -r requirements-test.txt` + `import pytest` 自证;`PBL_SKIP_TEST_DEPS=1` 可跳过 |
|
||
| `modules/pbl_evidence/requirements-dev.txt` | 模块级 | 同一版本区间的模块侧清单(不装本包也能跑离线单测的最短路径) |
|
||
| `modules/pbl_evidence/scripts/setup_test_env.sh` | 模块级 | 建 `.venv-test` 并安装 `requirements-dev.txt`(含仓库卫生门禁) |
|
||
| `modules/pbl_evidence/scripts/activate_test_env.sh` | 模块级 | 打印激活/直接调用测试 venv 解释器的方式 |
|
||
| `modules/pbl_evidence/scripts/run_tests.sh` | 模块级 | 一条命令跑测试:无 pytest 时自动引导,再执行 pytest |
|
||
| `modules/pbl_evidence/README.md` §Running tests | 文档 | 排障入口 + `PBL_EVIDENCE_TEST_DB` 开关用法 |
|
||
|
||
### 为什么是两份清单(应用级 vs 模块级)
|
||
|
||
- `requirements-test.txt`(应用级)服务**整应用**的测试环境:跑 `build.sh` 后 venv 内即有 pytest,
|
||
任何 `modules/pbl_*/tests/` 都能用同一个解释器执行。
|
||
- `requirements-dev.txt`(模块级)服务**只测本模块**的 CI/离线场景:不安装 pbls 应用、不装本包
|
||
(`pip install -e .`)也能一条命令装好依赖。
|
||
- 两份**版本区间同源**(`>=7.0,<10`),避免"应用装了 9.x、模块 CI 装了 7.x"导致用例语义漂移。
|
||
- 两者都刻意与运行时清单 `requirements.txt` 分离:pytest 不进生产镜像,也不进
|
||
`build.sh` 第 5 步的运行时依赖核验(该步只核验 ahserver/sqlor/apppublic/appbase/rbac/PyMySQL)。
|
||
|
||
### 推荐调用顺序
|
||
|
||
```bash
|
||
# 场景 1:完整应用环境(部署/联调机)
|
||
bash apps/pbls/build.sh # 第 7 步 venv → 7b 测试依赖 → 8 装模块
|
||
source apps/pbls/venv/bin/activate
|
||
python3 -m pytest modules/pbl_evidence/tests/test_m5a_idempotency.py -v
|
||
|
||
# 场景 2:只跑 pbl_evidence 单测(测试机/CI,最短路径)
|
||
bash modules/pbl_evidence/scripts/run_tests.sh # 无 pytest 时自动引导 .venv-test
|
||
|
||
# 场景 3:只要环境不要跑(手工用 venv 解释器)
|
||
bash modules/pbl_evidence/scripts/setup_test_env.sh
|
||
bash modules/pbl_evidence/scripts/activate_test_env.sh
|
||
```
|
||
|
||
### 期望结果
|
||
|
||
- 不带 `PBL_EVIDENCE_TEST_DB`:`8 passed, 1 skipped`,RC=0(`test_double_collect_is_idempotent_with_db`
|
||
需真实 MariaDB,未设开关时按设计 SKIPPED,属预期)。
|
||
- 带 `PBL_EVIDENCE_TEST_DB`(用法见 `modules/pbl_evidence/README.md` §Running tests):`9 passed`。
|
||
- 实测日志:`projects/pbls/docs/02-develop/m5a-disc2-pytest-run.log`。
|
||
- 禁止为凑通过修改测试断言逻辑。
|