pytest 仅运行更改的文件?

问题描述 投票:0回答:6

我对 Python 还很陌生,正在尝试学习工具集。

我已经弄清楚如何让

py.test -f
在编码时观看我的测试。我还没弄清楚的一件事是是否有一种方法可以做一个更智能的观察者,就像 Ruby 的 Guard 库一样。

使用guard + minitest,我得到的行为是,如果我保存像

my_class.rb
这样的文件,那么
my_class_test.rb
就会被执行,如果我在cli中点击
enter
,它就会运行所有测试。

到目前为止,使用 pytest,我还无法找到一种方法来仅运行与最后一次触摸的文件相对应的测试文件,从而避免等待整个测试套件运行,直到当前文件通过。

Python 爱好者们会怎么做?

谢谢!

python pytest
6个回答
44
投票

一种可能性是将 pytest-testmonpytest-watch 一起使用。

它使用 coverage.py 来跟踪哪个测试涉及哪些代码行,一旦您更改一行代码,它就会重新运行以某种方式执行该行的所有测试。


23
投票

要添加到上面@The Compiler的答案中,您可以使用pytest-watch的--runner选项让pytest-testmon

pytest-watch
一起玩:

ptw --runner "pytest --testmon"

或者简单地说:

ptw -- --testmon

9
投票

我得到的最快设置是当我将 @lmiguelvargasf @BenR 和 @TheCompiler 答案组合到此中时

ptw --runner "pytest --picked --testmon"

你首先必须安装它们

pip3 install pytest-picked pytest-testmon pytest-watch

8
投票

还有 pytest-xdist,它有一个功能:

--looponfail:在子进程中重复运行测试。每次运行后 py.test 都会等待,直到项目中的文件发生更改,然后重新运行之前失败的测试。重复此操作,直到所有测试通过,然后再次执行完整运行。


8
投票

如果您使用

git
作为版本控制,您可以考虑使用
pytest-picked
。根据文档,这是一个插件:

运行与未暂存文件或当前分支相关的测试

演示

基本功能

  • 仅运行修改后的测试文件中的测试
  • 首先从修改后的测试文件运行测试,然后运行所有未修改的测试

使用方法

pytest --picked

0
投票

pytest-watch
在 2019 年停止维护,所以现在你应该使用
pytest-watcher
,它受到前者的启发,但不是它的分支。

唯一的变化是它采用路径作为参数。安装模块:

pip install pytest-testmon pytest-watcher

然后:

ptw . --testmon

您可以向此命令附加任何选项;例如,为了获得 HTML 形式的增量覆盖(使用

pytest-cov
),我使用:

ptw . --testmon --cov-report=html --cov-append

这确保我获得整个项目的覆盖范围,而不仅仅是其运行的测试所涉及的文件。

© www.soinside.com 2019 - 2024. All rights reserved.