pytest只运行更改的文件?

And*_*rew 17 python pytest

我是Python的新手,试图学习工具集.

我已经弄清楚如何在py.test -f编码时观察我的测试.我无法弄清楚的一件事是,是否有办法做一个更聪明的观察者,就像Ruby的Guard库一样.

用后卫+ MINITEST我得到的行为是,如果我像保存一个文件my_class.rb,然后my_class_test.rb执行,如果我打enter在CLI中运行所有测试.

到目前为止,使用pytest我还没有找到一种方法来只运行与上次触摸的文件相对应的测试文件,从而避免等待整个测试套件运行,直到我获得当前文件为止.

你会怎么做pythonistas呢?

谢谢!

The*_*ler 20

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

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

  • 在coveragepy 5.0中,这将是本地的([参见此帖子](https://nedbatchelder.com/blog/201810/who_tests_what_is_here.html)) (2认同)

Ben*_*n R 19

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

ptw --runner "pytest --testmon"
Run Code Online (Sandbox Code Playgroud)

或者干脆:

ptw -- --testmon
Run Code Online (Sandbox Code Playgroud)


Nor*_*ldt 9

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

ptw --runner "pytest --picked --testmon"
Run Code Online (Sandbox Code Playgroud)

你首先必须安装它们

pip3 install pytest-picked pytest-testmon pytest-watch
Run Code Online (Sandbox Code Playgroud)


lmi*_*asf 7

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

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

演示

在此输入图像描述

基本特点

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

用法

pytest --picked
Run Code Online (Sandbox Code Playgroud)


ein*_*bst 6

还有pytest-xdist有一个功能叫做:

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