Python单元测试是否有类似"自动测试"的内容?
基本上,当测试中断或者通过时,咆哮通知(或者其他回调)。像这样的东西存在吗?
如果没有,那应该很容易写..最简单的方法是..
- 在这些文件中运行任何测试。
- 如果测试失败,但在上一次运行中通过,则生成咆哮警报。与失败然后通过的测试相同。
- 等待,然后重复步骤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启动并很快运行。