# 测试隔离规则 > 权威合同:`tests/用例清单.json`、`docs/系统架构/新版设计/迁移与验收.md`;机械门禁:`tests/conftest.py`(OS 进程隔离 + 用例选择 + 全跳过守卫)、`工具/维护索引.py`。 1. **默认离线**:默认测试进程由 macOS sandbox 或 Linux seccomp 禁止外部连接,覆盖收集阶段、数据库驱动及其子进程;防护不可用时失败,不退回无防护执行。显式外部用例使用 `--外部环境` 与环境标记选择。 2. **显式外部环境**:需要 PostgreSQL 的用例标记 `数据库` 并使用对应夹具;缺 `MUSE_TEST_DATABASE_URL` 时直接失败,不跳过或回退旧库。普通业务测试默认使用同一会话的共享已迁移测试库(例间清空业务表并重置序列,复用前兑底清一次防上例强杀残留;保留模板与 `tests/支持/数据库底座.py` 种子表登记的系统种子,迁移新增种子表必须同步登记,由生命周期单测机械拦截),不再为每条普通用例执行 `CREATE DATABASE ... TEMPLATE` 克隆与全量销毁;仅当用例自身验证目标为数据库创建、迁移升级、跨版本切换或模板隔离时,才使用独立克隆库。例间清空只清数据不删表,用例自建的探针表(恢复、权限演练等)须自带 `DROP TABLE IF EXISTS` 或使用唯一名。 超过三分钟的用例标记 `慢`,默认不进常规数据库验证;浏览器旅程等慢入口走对应显式目标,不另设合成调用资格终态套件。 日常快速迭代优先运行秒级离线全量(`make 测试`);涉及数据库时运行受影响模块的局部测试(`make 数据库测试 范围=<路径>`);Plan 交付收尾时运行 `make 验收数据库` 完成全量闭环。 实际Pi循环另标记`宿主`,通过`make 宿主测试`显式提供固定Node与Pi包路径;普通数据库测试剔除此标记。宿主验证使用合成提供方,不等于真实模型验证。真实外部模型另标记`真实模型`,通过`make 真实模型测试`显式提供地址与凭据文件;普通数据库测试剔除该标记。 3. **用例身份**:完整 `case_id` 与清单中的实际文件、符号及参数行绑定,不靠名称后缀匹配;`pytest --case TC-…` 选择用例,`--case 'TC-…[参数ID]'` 选择参数行。同符号承接多个 ID 时必须分别绑定无交叠参数。未知 ID、目标缺失与冒用均失败;Junit 留存完整 ID 和参数 ID。 4. **可判定性**:用例体内必须有 assert/raise/fail/skip/xfail;纯 print 用例被索引检查在执行前拦截。 5. **空收集不通过**:零收集(退出码 5)、全跳过(守卫改写退出码 5)、超时与失败都如实呈现;不得以返回码 0 掩盖。 6. **替身显式标记**:协议替身、模型替身、宿主替身必须在用例名或文档串标明;替身通过不宣称真实链路通过。 7. **收集范围**:用例只放 `tests/单元|契约|集成|架构|迁移|端到端|真实调用/`;旧实现与旧测试树已退出本仓,不参与同一收集。 ## 行为与证据原则 - 用例保护独立可观察行为:给定条件、触发动作、预期结果、环境与合同明确;夹具不依赖前一个测试写出的正文或全局前序状态。文件只组织代码,参数行固定稳定身份。 - 测试登记采用扁平 `cases`:`case_id/file/symbol/environment` 及适用的 `parameter_ids/given/when/then/contract`;文件与合同路径相对仓库根。登记不是执行证据,不记录过程分期、退役历史或“通过”状态。 - 合并仅适用于输入边界、动作、断言和环境相同的行为,不能丢失参数分支;已替代实现的目录形状不当作长期验收标准,原子性、范围拒绝、恢复与保真反例必须保护。 - 纯解析、校验、patch 与预算计算使用离线输入和假时钟;CAS、并发、幂等、事务回滚、约束与身份分流使用隔离 PostgreSQL 和受控同步点,替身不能证明数据库语义。 - 文件竞争、权限、软链接和恢复使用独立临时目录,必要时用独立进程,不操作私人原稿。作者点击、中文输入与页面重连使用真后端浏览器旅程;组件测试只证明组件范围。 - 角色实际行为须固定模型、宿主、资源版本及预算;脚本观察、协议替身与模型文学效果分别取证,不能互相冒充。 - 执行证据包含代码版本、环境用途、夹具与参数版本、实际收集身份、结果和失败断言;不允许只跑第一参数、打印 PASS 或缺环境跳过冒充通过。设计核对只证明登记和合同一致,不证明全部行为已通过。