mcpField
P
pytest-code-review

pytest-code-review

github.com/existential-birds测试与质量85229 次安装11 周前更新
代码仓库

关于 pytest-code-review

pytest-code-review 是用于审查 pytest 测试代码的技能,面向需要检查异步测试、夹具和模拟用法的审查者。它通过文件范围、适用参考资料和问题定位等关卡,约束 pytest 相关发现的依据。

主要功能

  1. 01先列明审查文件范围
  2. 02区分同步与异步测试
  3. 03检查夹具作用域与清理
  4. 04核实 mock 与 patch 的使用位置
  5. 05要求发现附文件路径或测试节点

适用场景

  1. 01审查异步测试与 AsyncMock 用法
  2. 02检查 conftest.py 夹具及资源清理
  3. 03核对 patch 目标和 mock 调用断言
  4. 04识别可参数化或重复的测试逻辑

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/existential-birds/beagle --skill pytest-code-review

安装后在 Claude Code 中输入/pytest-code-review确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
async-testing.md
fixtures.md
mocking.md
parametrize.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 特有的问题。

  1. 限定文件范围 — 通过条件: 列出你将引用的每个 test_*.py 和任何 conftest.py;不报告该列表以外文件的问题。
  2. 异步还是同步 — 通过条件: 对每个范围内的文件,注明它是否使用 async def test_* / await;如果使用,则在批评异步用法之前先阅读 references/async-testing.md。
  3. Fixture — 通过条件: 如果共享设置很重要,列出 conftest.py 路径,或说明没有;对于 yield fixture,在声称存在资源泄漏之前,先确认是否有清理逻辑。
  4. patch / 模拟 — 通过条件: 对任何关于 patch 或模拟的批评,提供该符号的导入路径,即其使用位置(调用点),或标记为 N/A;当模拟是审查的重点时,阅读 references/mocking.md。
  5. 问题发现 — 通过条件: 每个问题都包含文件路径和行号,或测试节点 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

审查问题

  1. 所有异步函数都使用 async def test_* 进行测试了吗?
  2. Fixture 是否设置了恰当的作用域并进行了适当清理?
  3. 能否通过参数化类似的测试用例来减少重复?
  4. 模拟是否跟踪了调用,并在正确的位置使用?

评论

支持 Markdown