python - 仅运行取决于更改的测试

标签 python testing pytest

如何检测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/

相关文章:

ruby-on-rails - 如何在 Rails 3 中进行集成测试?

python - 结合 py.test 和 trio/curio

python - 从 python 网站下载图像的一部分?

python - 如何定义多个需求文件?

Python 3 - 将来自多个 API 请求的 JSON 解析为列表并输出到文件

testing - 有没有一种方法可以模拟速度较慢的计算机而不干扰 BIOS 时钟频率?

ruby-on-rails - 涉及需要 api 更新的对象的 Rails 测试

python - 如何将默认的python版本从python v2.7更改为python 3.7?

python - 如何使 py.test 或 nose 在所有 python 文件中查找测试?

python - Pytest - 模拟模拟的嵌套属性函数/方法的副作用