python-testing 是一个 Python 测试技能,优先级标注为 P0(关键)。它面向使用 pytest 编写 Python 服务测试的场景,涵盖异步测试、monkeypatch、边界聚焦的 fake 等做法。
用途 该技能用于指导编写 Python 测试、fixture、异步测试与回归测试,尤其关注服务边界与领域不变量的验证。
主要能力与规则
- 使用 pytest 和 pytest-asyncio 处理异步边界。
- 为契约解析、工作流路由和验证器结果添加回归测试([BE-TEST-05])。
- 对等价输入优先使用 pytest.mark.parametrize;不同场景可保持独立([BE-TEST-01])。
- 在外部接缝处优先使用 fake 或 monkeypatch:数据库、RPC、Telegram、子进程、Docker([BE-TEST-02]、[BE-TEST-04])。
- 验证行为与领域不变量,而不是浅层的真假判断或实现细节([BE-TEST-03])。
- 覆盖率仅作诊断用途,由项目自行配置;应验证按风险加权的关键路径,而不是为凑任意百分比而填充代码。
核心规则要点
- [BE-TEST-01] 等价输入使用参数化测试。
- [BE-TEST-02] 禁止脆弱的 SQL 字符串匹配:直接测试纯领域计算,或使用 fake/testcontainers,不在 mock 中对 SQL 字符串做正则匹配。
- [BE-TEST-03] 禁止浅层断言:不要只断言返回结果,而要检查领域属性与不变量。
- [BE-TEST-04] 禁止透传式接缝 mock:仓储与适配器必须测试契约符合性与错误映射,禁止一对一透传回显式 mock。
- [BE-TEST-05] 缺陷优先的回归锁定:每个修复缺陷工单或标题含 fix(...) 的 PR,必须先引入一个复现缺陷的失败测试,再修复它。
使用方式(Recipe)
- 先为边界或回归写出失败测试([BE-TEST-05])。
- 在足够高的一个接缝处打补丁,以保持测试可读([BE-TEST-04])。
- 断言结构化结果:元数据、路由结果、阻塞文本、发出的命令([BE-TEST-03])。
- 异步代码使用异步测试;避免手动启动真实事件循环。
- 覆盖负向路径:格式错误的报文、过期的运行时状态、缺失的环境变量。
反模式
- [BE-TEST-01] 风格化参数化改写:不要在无行为差异的情况下要求对已通过的测试做参数化重写。
- [BE-TEST-02] SQL 正则匹配:不要在 mock 中对 SQL 字符串做正则匹配。
- [BE-TEST-03] 浅层断言:永远不要只写 assert result,始终验证领域属性与不变量。
- [BE-TEST-04] 透传式接缝 mock:禁止无契约断言的 1:1 mock 回显。
- [BE-TEST-05] 无复现测试的缺陷修复:禁止在缺少复现测试的情况下修复缺陷。
- 单元测试中不连真实网络或数据库:使用 fake 或 testcontainers。
- 不做大范围 monkeypatch 喷洒:只修补边界,而不是其下每个辅助函数。
- 共享运行时改动不能只做冒烟验证:需补充聚焦断言。
适用场景 适用于编写 Python 测试、fixture、异步测试、回归测试,以及在服务接缝(数据库、RPC、消息平台、子进程、容器)处使用 fake。
限制 资料未提供具体安装命令、依赖版本、支持的 Python 版本或收费信息。