用途:为 Python 项目提供 pytest 测试编写的权威模式,目标是让代码达到 80% 以上测试覆盖率,适用于新建测试套件、编写 fixtures 或工厂、实现参数化测试、测试异步代码、用 conftest.py 组织测试以及配置覆盖率要求。
主要能力:
- AAA 模式:每个测试按 Arrange(准备数据与依赖)、Act(执行被测代码)、Assert(验证结果)三段组织,禁止结构混杂的测试。
- Fixtures:用 @pytest.fixture 提供可复用的 setup/teardown,支持 function、module、session 等作用域;可变数据应使用 function 作用域,避免测试相互依赖。
- 参数化:用 @pytest.mark.parametrize 覆盖多组输入,减少重复代码。
- Mock:用 unittest.mock 的 Mock、patch、MagicMock 隔离外部依赖,可断言调用参数与次数,并用 side_effect 模拟重试等场景。
- 异常测试:用 pytest.raises 并配合 match 验证异常信息,禁止用 try/except 吞掉预期异常。
- 异步测试:用 @pytest.mark.asyncio 测试 async 代码,并支持异步 fixture。
- 组织与标记:通过 conftest.py 共享 fixture,用 fixture 工厂生成可定制测试数据,用 @pytest.mark.unit、integration、slow 等标记分类并选择性运行。
- 覆盖率:在 pyproject.toml 的 [tool.pytest.ini_options] 中配置 testpaths、python_files、addopts(如 --cov=src、--cov-fail-under=80、--strict-markers)与 markers。
使用方式:按上述模式编写测试文件(test_*.py 或 *_test.py),运行 pytest;可用 pytest -m unit 只跑单元测试,pytest -m "not slow" 跳过慢测试,pytest --cov 生成覆盖率报告。
适用场景:Python 项目的单元测试、集成测试、异步接口测试与覆盖率门禁。
限制:资料未提供具体安装命令、版本要求、价格或平台信息;示例中的 User、APIClient 等为示意代码,需按实际项目替换。