如何检测pytest需要运行哪些测试?
到目前为止,我在 CI 中运行所有测试。这很慢。
没有办法自动检测需要运行哪些测试,并且只执行整个测试套件的一小部分吗?
背景:我正在阅读 Google SE 的书并阅读了他们巨大的 monorepo 以及他们的工具 Blaze 可以检测需要运行哪些测试。听起来很酷。
最佳答案
我在 pytest-testmon
方面有很好的经验它根据测试覆盖率确定要在代码更改时执行的测试子集。详细信息在 Determining affected tests 中有很好的解释testmon
的部分的文档,但一般建议是保持 testmon
的高线路/分支覆盖率有效。这也意味着它会在 coverage
处失败失败。
如果要在CI中使用,需要缓存.testmondata
测试作业之间的数据库文件并确保 --testmon
arg 用于调用 pytest
.这也取决于您的 CI 提供商,但最流行的提供商提供缓存机制(Github、Gitlab、CircleCI、Appveyor 等)。testmon
也可与 pytest-watch
有效结合看门狗以保持守护程序运行以进行测试执行。对代码更改重新运行测试子集并在成功或失败时发送系统通知的示例命令:
$ pytest-watch --runner="pytest --testmon" \
--onfail="notify-send --urgency=low -i error 'Tests Failed'" \
--onpass="notify-send --urgency=low -i info 'Tests passed'"
您也可以使用 Bazel 进行构建和测试;但是,IMO 对于纯 Python 项目来说这是一种矫枉过正,仅用于增量测试目的是不值得的。
关于python - 仅运行取决于更改的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67398655/