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)。

推荐调用顺序

# 场景 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。
  • 禁止为凑通过修改测试断言逻辑。
Description
No description provided
Readme 25 KiB