SuperAPI AI 工具集

Pytest

测试与质量

查看项目

更新于 10-16 05:07

技能介绍

用途:在用户询问 pytest、编写测试、测试夹具、参数化、mock、测试覆盖率或 conftest 时提供指导。

主要能力:

  • Fixtures:可复用的测试 setup/teardown,用 yield 做清理;作用域分 function(每个测试,默认隔离)、class(每类一次)、module(每文件一次,适合昂贵初始化)、session(全局一次,适合数据库连接、服务器)。conftest.py 可让目录内所有测试共享 fixtures。
  • Parametrize:用多组输入避免重复代码,每组参数生成独立测试,失败相互隔离;可用 pytest.param() 自定义测试 ID、标记预期失败(marks=pytest.mark.xfail)或条件跳过。
  • Markers:内置 @pytest.mark.skip、@pytest.mark.skipif(condition)、@pytest.mark.xfail、@pytest.mark.asyncio(需 pytest-asyncio);自定义 marker 在 pyproject.toml 定义,用 pytest -m "marker" 运行。
  • Mocking:Mock() 创建假对象,patch() 替换导入,MagicMock() 支持魔术方法,AsyncMock() 模拟异步函数;关键原则是在使用处而非定义处 patch。
  • 测试组织:tests/ 下可放 conftest.py(共享 fixtures)、unit/(快速隔离)、integration/(多组件)、e2e/(完整系统)。
  • 覆盖率:80%+ 通常算良好,100% 常属过度;分支覆盖率能捕获条件分支;可在 pyproject.toml 配置 source、branch=true、fail_under。

常用命令:pytest -v(详细输出)、pytest -x(首次失败即停)、pytest -k "pattern"(按名称过滤)、pytest -m "marker"(按标记过滤)、pytest -s(显示 print 输出)、pytest -n auto(并行,需 pytest-xdist)、pytest --cov=src(带覆盖率)。

最佳实践:每个测试一个断言、描述性测试名、Arrange-Act-Assert 结构、测试行为而非实现、用工厂生成测试数据、保持测试快速。

限制:资料未提供具体安装命令、版本要求、价格或平台信息;部分能力依赖 pytest-asyncio、pytest-xdist 等插件。