关于 pytest-code-review
pytest-code-review 是用于审查 pytest 测试代码的技能,面向需要检查异步测试、夹具和模拟用法的审查者。它通过文件范围、适用参考资料和问题定位等关卡,约束 pytest 相关发现的依据。
主要功能
- 01先列明审查文件范围
- 02区分同步与异步测试
- 03检查夹具作用域与清理
- 04核实 mock 与 patch 的使用位置
- 05要求发现附文件路径或测试节点
适用场景
- 01审查异步测试与 AsyncMock 用法
- 02检查 conftest.py 夹具及资源清理
- 03核对 patch 目标和 mock 调用断言
- 04识别可参数化或重复的测试逻辑
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ existential-birds/ beagle --skill pytest-code-review安装后在 Claude Code 中输入/pytest-code-review确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/async-testing.mdfixtures.mdmocking.mdparametrize.md详细介绍
Pytest 代码审查
快速参考
| 问题类型 | 参考文档 |
|---|---|
| async def test_*、AsyncMock、await 模式 | references/async-testing.md |
| conftest.py、工厂 fixture、作用域、清理 | references/fixtures.md |
| @pytest.mark.parametrize、DRY 模式 | references/parametrize.md |
| AsyncMock 调用跟踪、patch 模式、何时使用模拟 | references/mocking.md |
审查关卡
按顺序执行。每个适用的关卡通过之前,不要断言存在 pytest 特有的问题。
- 限定文件范围 — 通过条件: 列出你将引用的每个
test_*.py和任何conftest.py;不报告该列表以外文件的问题。 - 异步还是同步 — 通过条件: 对每个范围内的文件,注明它是否使用
async def test_*/await;如果使用,则在批评异步用法之前先阅读 references/async-testing.md。 - Fixture — 通过条件: 如果共享设置很重要,列出
conftest.py路径,或说明没有;对于 yield fixture,在声称存在资源泄漏之前,先确认是否有清理逻辑。 - patch / 模拟 — 通过条件: 对任何关于
patch或模拟的批评,提供该符号的导入路径,即其使用位置(调用点),或标记为 N/A;当模拟是审查的重点时,阅读 references/mocking.md。 - 问题发现 — 通过条件: 每个问题都包含文件路径和行号,或测试节点 ID,而不是泛泛重述规则。
审查清单
- 被测代码为异步代码时,测试函数使用
async def test_* - 异步依赖使用 AsyncMock,而不是 Mock
- 所有异步模拟和协程都已等待
- 共享设置使用 conftest.py 中的 fixture
- Fixture 作用域合适(function、class、module、session)
- Yield fixture 在 finally 块中执行了正确的清理
- 类似的测试用例使用 @pytest.mark.parametrize
- 多个测试函数之间没有重复的测试逻辑
- 模拟能正确跟踪调用(assert_called_once_with)
- patch() 针对正确的位置(使用处,而不是定义处)
- 不模拟本应测试的内部实现
- 测试相互隔离(测试之间没有共享的可变状态)
何时加载参考文档
- 审查异步测试函数 → async-testing.md
- 审查 fixture 或 conftest.py → fixtures.md
- 审查类似的测试用例 → parametrize.md
- 审查模拟和 patch → mocking.md
审查问题
- 所有异步函数都使用 async def test_* 进行测试了吗?
- Fixture 是否设置了恰当的作用域并进行了适当清理?
- 能否通过参数化类似的测试用例来减少重复?
- 模拟是否跟踪了调用,并在正确的位置使用?
评论
支持 Markdown