SuperAPI AI 工具集

pytest-skill

测试与质量

查看项目

更新于 10-16 06:33

技能介绍

用途

pytest-skill 用于在 Python 项目中生成生产级 pytest 测试。当任务涉及 pytest 测试编写,或用户提到 "pytest"、"conftest"、"@pytest.fixture"、"@pytest.mark"、"Python test"、"parametrize" 等关键词时,可使用该技能。

主要能力

该技能围绕 pytest 的核心测试模式组织内容,包括:

  • 基础测试:普通断言、使用 pytest.raises 断言异常。
  • Fixtures:定义 fixture、使用 yield 进行 teardown、设置 scope(如 module)、在 conftest.py 中共享 fixture、autouse fixture。
  • Parametrize:对输入与期望值进行参数化,支持多参数组合。
  • Markers:slow、skip、skipif、xfail 等标记。
  • Mocking:使用 unittest.mock 的 patch、MagicMock,以及 pytest-mock 的 mocker,对 SMTP、requests、数据库等外部依赖进行模拟。
  • 断言:相等、包含、类型、近似值(pytest.approx)、异常信息匹配等。

此外还提供反模式对照表(如用 assert 替代 self.assertEqual、用 fixture 替代 init 中的 setup、用 yield fixture 管理全局状态、拆分过大的测试函数)、常用命令速查(运行全部、指定文件、指定用例、按 marker、按关键字、verbose、首次失败停止、仅上次失败、覆盖率、并行)、pyproject.toml 配置示例,以及指向 reference/playbook.md 的深入模式索引。

使用方式

该技能以示例与模式说明的形式提供,用户可参考其中的代码片段编写测试。示例涵盖基础测试、fixture、参数化、标记、mock 与断言。深入模式见 reference/playbook.md,其章节包括:§1 配置(pytest.ini 与 pyproject.toml,含 markers、coverage)、§2 Fixtures(作用域、工厂、teardown、autouse、tmp_path)、§3 Parametrize(基础、带 ID、笛卡尔积、indirect)、§4 Mocking(pytest-mock、monkeypatch、spies、环境变量)、§5 Async(pytest-asyncio、异步 fixture、异步 client)、§6 Exceptions(pytest.raises(match=)、warnings)、§7 Markers & Plugins(自定义 marker、collection hooks)、§8 Class-Based(嵌套类、autouse setup)、§9 CI/CD(GitHub Actions matrix、覆盖率门禁)、§10 Debugging Table(10 个常见问题与修复)、§11 Best Practices(15 项生产检查清单)。

常用命令示例:pytest、pytest tests/test_login.py、pytest tests/test_login.py::test_login_success、pytest -m slow、pytest -k "login and not invalid"、pytest -v、pytest -x、pytest --lf、pytest --cov=myapp --cov-report=html、pytest -n auto(pytest-xdist)。

适用场景

适用于需要为 Python 代码编写 pytest 测试的场景,尤其是涉及 fixture 管理、参数化测试、标记分类、外部依赖 mock、conftest 共享配置、异步测试、CI/CD 集成与覆盖率统计等需求时。

限制

该技能仅应在任务明确匹配其上游来源与本地项目上下文时使用。应用变更前需验证命令、生成的代码、依赖、凭据与外部服务行为。示例不能替代针对具体环境的测试、安全审查,以及在破坏性或高成本操作前获得用户批准。