Python单元测试是否有类似"自动测试"的内容?

时间:2020-03-06 14:29:23  来源:igfitidea点击:

基本上,当测试中断或者通过时,咆哮通知(或者其他回调)。像这样的东西存在吗?

如果没有,那应该很容易写..最简单的方法是..

  • 在这些文件中运行任何测试。
  • 如果测试失败,但在上一次运行中通过,则生成咆哮警报。与失败然后通过的测试相同。
  • 等待,然后重复步骤2-5.

我可以看到的问题是测试是否在其他文件中。一种简单的解决方案是在每次保存之后运行所有测试。但是,对于较慢的测试,这可能要比两次保存之间的时间更长,并且/或者可能会使用大量的CPU能力等。

最好的方法是实际查看代码的哪些部分已更改,如果函数abc()已更改,则仅运行与此交互的测试。虽然这很好,但我认为这样做极其复杂实行?

总结一下:

  • 是否有类似Ruby工具" autotest"(ZenTest包的一部分)的东西,但适用于Python代码?
  • 如何检查脚本的两个修订版之间哪些功能已更改?
  • 是否可以确定命令将调用哪些功能? (有点像反向追溯)

解决方案

也许buildbot会很有用http://buildbot.net/trac

对于第三个问题,也许我们需要的是trace模块:

>>> def y(a): return a*a
>>> def x(a): return y(a)
>>> import trace
>>> tracer = trace.Trace(countfuncs = 1)
>>> tracer.runfunc(x, 2)
4
>>> res = tracer.results()
>>> res.calledfuncs
{('<stdin>', '<stdin>', 'y'): 1, ('<stdin>', '<stdin>', 'x'): 1}

res.CalledFuncs包含了被调用的函数。如果在创建跟踪器时指定countcallers = 1,则可以获得呼叫者/被呼叫者的关系。有关更多信息,请参见trace模块的文档。

我们也可以尝试通过静态分析获取调用,但是由于Python的动态特性,这样做可能很危险。

Django的开发服务器具有文件更改监视器,该监视器监视修改并自动重新加载。我们可以重新使用此代码来启动有关文件修改的单元测试。

也许鼻子http://somethingaboutorange.com/mrl/projects/nose/有一个插件http://somethingaboutorange.com/mrl/projects/nose/doc/writing_plugins.html

找到了这个:http://jeffwinkler.net/2006/04/27/keeping-your-nose-green/

由gfxmonk创建的自动鼻息:

Autonose is an autotest-like tool for python, using the excellent nosetest library.
  
  autotest tracks filesystem changes and automatically re-run any changed tests or dependencies whenever a file is added, removed or updated. A file counts as changed if it has iself been modified, or if any file it imports has changed.
  
  ...
  
  Autonose currently has a native GUI for OSX and GTK. If neither of those are available to you, you can instead run the console version (with the --console option).

我刚刚发现了这个:http://www.metareal.org/p/modipyd/

我目前正在使用thumb.py,但是当我当前的项目从一个小型项目过渡到一个中等规模的项目时,我一直在寻找可以做更彻底的依赖关系分析的项目,并且通过一些调整,我得到了modipyd启动并很快运行。