用途:指导使用 pytest 编写与评估有效的 Python 测试,覆盖编写测试、审查测试代码、调试失败和提升覆盖率等场景。
主要能力与原则:每个测试应原子、自包含、只验证单一行为;测试名应能说明失败时哪里坏了。同一概念的不同取值用 pytest.mark.parametrize 参数化,不同功能则拆成独立测试。
项目特定规则:项目全局设置 asyncio_mode = "auto",异步测试无需 @pytest.mark.asyncio 装饰器;所有 import 放在模块顶部,不使用局部导入;测试 FastMCP 时直接把服务器传给客户端使用内存传输,仅在显式测试网络功能时用 HTTP 传输;复杂数据结构(如 JSON schema)可用 inline-snapshot 的 snapshot() 断言。
fixture 与 mock:优先使用函数作用域 fixture;文件操作使用 tmp_path;在边界处 mock,外部服务用 unittest.mock 的 patch/AsyncMock,不要 mock 自己拥有的内部类。错误测试用 pytest.raises 并可用 match 匹配消息。
运行命令:uv run pytest -n auto 并行运行全部;加 -x 首个失败即停;可指定文件路径、用 -k 匹配名称、用 -m "not integration" 排除集成测试。inline-snapshot 用 pytest --inline-snapshot=create 填充空快照,用 --inline-snapshot=fix 在有意变更后更新。
限制:资料未提供该技能的安装方式、依赖版本、收费或平台信息;示例中的 FastMCP、inline-snapshot 等为项目特定用法,需按实际项目环境调整。