关于 pytest
pytest skill 提供使用 pytest 编写和组织测试的建议,涵盖 fixture、参数化、断言、插件,以及保持测试隔离并关注可观察行为的做法。
主要功能
- 01按源码结构组织测试
- 02选择 fixture 作用域并共享 fixture
- 03使用带可读 ID 的参数化测试
- 04应用断言与异常测试模式
- 05选择常见 pytest 插件
适用场景
- 01组织 Python 项目中的测试
- 02用参数化用例测试多种输入
- 03设置可复用 fixture 与清理流程
- 04避免测试相互依赖及断言实现细节
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ microsoft/ debugpy --skill pytest安装后在 Claude Code 中输入/pytest确认已加载。
详细介绍
技能:pytest
使用 pytest 编写和组织测试的最佳实践,包括 fixtures、parametrize 和插件。
适用场景
在使用 pytest 编写和组织测试时应用此技能,包括 fixtures、parametrize、markers、插件和测试结构。
测试组织
- 将测试放在
tests/目录中,并使目录结构与源代码一致。 - 将测试文件命名为
test_<module>.py,将测试函数命名为test_<behavior>()。 - 仅在相关测试共享 fixtures 或设置时,才将它们归入类中。
Fixtures
- 将 fixtures 定义在所需的最小作用域内(
function>class>module>session)。 - 使用
conftest.py存放共享 fixtures,并将其放在合适的目录层级。 - 优先使用工厂 fixtures,而不是复杂的 fixture 继承。
- 使用
yieldfixtures 进行设置和清理;优先使用tmp_path,而不是tempfile。
Parametrize
- 对包含多个输入的数据驱动测试,使用
@pytest.mark.parametrize。 - 提供测试 ID(
ids=...),以便测试输出清晰易读。 - 将
parametrize与 fixtures 结合,用于笛卡尔积测试。
断言
- 使用普通的
assert语句——pytest 会对其进行重写,以提供清晰的失败消息。 - 使用
pytest.raises(ExceptionType, match=...)测试异常。 - 使用
pytest.approx()比较浮点数。
插件
- 常用插件:
pytest-cov、pytest-mock、pytest-asyncio、pytest-xdist、pytest-timeout。 - 相较于直接使用
unittest.mock.patch,优先使用pytest-mock的mockerfixture。
常见问题
- 不要对可变状态使用作用域为
session的 fixtures。 - 不要断言实现细节——应测试可观察到的行为。
- 避免测试之间相互依赖;每个测试都应能独立运行。
评论
支持 Markdown