SuperAPI AI 工具集

pytest-patterns

测试与质量

查看项目

更新于 10-15 09:51

技能介绍

pytest-patterns 是一个专注于 Python pytest 测试机制的技术技能,来源为 acaprino/daodan,可通过 https://www.skills.sh/acaprino/daodan/pytest-patterns 访问。它不定义测试哲学或覆盖率指标,只负责 pytest 的具体机制,可作为 testing:test-writer 等技术角色的上下文加载。

用途 该技能用于生成聚焦、行为驱动的 pytest 测试,优先测试可观察行为而非实现细节。它定位为技术上下文提供者,测试的归属、防重复与保护规则由 testing:test-hygiene 技能负责,测试编写委托给 testing:test-writer,现有失败的处理属于 testing:test-remediation-method,TDD 纪律属于 testing 声明的上游技能。框架配置、conftest 深层模式与重型依赖 mock 分别参考 references/framework-config.md 和 references/pytest-infrastructure.md。

主要能力

  1. BDD 命名约定:支持基于类的分组,按功能再按场景嵌套;也支持扁平函数命名 test_<action>should<outcome>when<condition>。
  2. AAA 结构:Arrange-Act-Assert 组织测试体。
  3. 工厂 fixture:在 conftest.py 中用工厂 fixture 替代原始字典,生成可复用假数据。
  4. 核心 pytest 模式:fixtures 使用尽可能窄的作用域并通过 conftest.py 共享;参数化支持自定义 ID;mock 提供补丁位置规则(patch where used、autospec、side_effect 模拟异常);异步测试使用 @pytest.mark.asyncio 或 asyncio_mode = "auto";属性测试使用 hypothesis;临时文件与环境变量使用 tmp_path 和 monkeypatch。
  5. 惰性导入陷阱:函数内部导入时,应在定义处而非使用处打补丁,否则 monkeypatch.setattr 会抛 AttributeError。
  6. pytest 技术反模式表:列出 assert obj is not None、mock 被测函数、测试框架内部、复制粘贴 mock 设置、直接测试私有方法、测试中捕获异常、无断言、只断言 mock.called、子目录 conftest 放置重型 mock、缺少 marker、外部服务 mock 不完整、在使用处打补丁惰性导入等问题及替代做法。
  7. pytest 基础设施规则:conftest 执行顺序(根 tests/conftest.py 最先运行)、重型 mock 需放根 conftest、通过 sys.modules 预置 MagicMock 避免真实加载大依赖、外部服务 mock 完整性审计(数据库、认证、云存储、邮件、支付)、marker 纪律(@pytest.mark.slow、--strict-markers)。

使用方式 该技能以技能包形式加载,作为 pytest 技术上下文供测试编写技能调用。它包含参考文档 references/framework-config.md 与 references/pytest-infrastructure.md,并引用 pytest 官方文档、unittest.mock 文档、hypothesis 文档和 pytest-asyncio 文档。具体的安装命令、平台依赖与收费信息暂未提供。

适用场景 适合在编写或重构 Python 测试时参考,包括需要 BDD 命名、AAA 结构、fixture 设计、参数化、async 测试、mock 补丁定位、hypothesis 属性测试、conftest 组织与重型依赖 mock 的场景。也适合作为 testing:test-writer 等技能的技术上下文,在测试编写流程中提供 pytest 机制指导。

限制 该技能只负责 pytest 机制,不定义另一套测试哲学或覆盖率配额。独立且精确的期望值在有契约依据时是有效的,但不得从被测实现推导 oracle,也不得为通过测试而弱化断言。缺少的框架配置细节需查阅其 references 文档。收费、价格、平台与具体使用步骤暂未提供。