这是 Capsem 项目的测试策略与工作流技能,适用于运行或编写测试的场景;VM、hypervisor、前端或 Python 的具体细节见 dev-testing-* 系列技能。
用途与测试编写:新增或移动测试夹具前先阅读 tests/README.md,测试专用配置放在 tests/fixtures/ 下而非根目录 config/。记录架构性错误(可从源码检查、不可重复的约束)应写成 tests/citadel/ 中的 Citadel 守卫,运行在快速阶段;守卫需在断言后附加命名 *_RATIONALE 说明原因(参考 test_db_boundary.py),原因若已有规范出处则引用而非复述,并要覆盖对抗性用例而非仅一致性用例。
执行命令:just fast-test 仅提供不完整源码反馈,不涉及 VM;just focus-test <group> 针对已有归属的回归路径;just install 做完整本地 macOS 包构建与原生安装;just test 提供可复用的完整本地验证并需要 VM。完整门禁是构建边界而非编辑循环,开发中应先用最小聚焦测试复现失败并红/绿验证。
流程与证据:采用 TDD,先写会失败的测试,确认失败原因正确,再写最小实现,最后重构。每个非平凡功能切片在完成前需具备单元/契约、功能、对抗、E2E/VM、遥测、性能各类证据;若某类无法实现或被推迟,须记录缺失原因、负责人和后续任务。策略、MITM、MCP、遥测、网络、文件系统、进程生命周期或沙箱边界相关的工作必须使用功能切片矩阵,并证明强制发生在预期边界。
IronBank 账本测试位于 tests/ironbank/,为全黑盒,不得使用 skip/slow 等标记、仅状态码重放、仅行存在检查或手工 OAuth 作为发布证据;一个确定性刺激需证明整条账本路径。共享 mock server 位于 crates/capsem-mock-server,不应另建本地 mock。
并行与限制:just test 以 pytest -n 4 并行启动四个真实 VM,任何并发抖动应视为产品缺陷而非调参问题;不要用 sleep、超时或串行标记掩盖。跨轮次残留的孤儿进程属产品缺陷,配套进程须用 capsem-guard::install 实现拒绝独立运行、单例与父进程死亡自退出。调试时避免宽泛 pkill capsem- 模式,以免误杀编译进程。Rust 固定为 1.97.1,改动需整体同步。