2008-09-20 106 views
41

基本上,咆哮通知(或其他回调)时,测试中断或通过。 这样的事情存在吗?Python单元测试有没有像'autotest'?

如果不是,它应该很容易写..最简单的办法是..

  1. 运行python-autotest myfile1.py myfile2.py etc.py
    • 检查文件,待监控已被修改(可能只是如果他们已经被保存)。
    • 在这些文件中运行任何测试。
    • 如果测试失败,但在上次运行过程中通过,则会生成一个咆哮警报。测试失败,然后通过。
    • 等待,然后重复步骤2-5。

我能看到的问题有,如果测试是在不同的文件中。简单的解决方案是在每次保存后运行所有测试..但通过较慢的测试,这可能需要比保存之间的时间更长的时间,并且/或者可能使用大量的CPU功率等。

最好的方法要做到这一点,实际上会看到代码已经发生了什么变化,如果函数abc()已经改变,只能运行与之交互的测试。虽然这会很好,但我认为这会非常复杂。

总结:

  • 有没有像Ruby的工具autotest(在ZenTest package的一部分)什么,但对于Python代码?
  • 如何检查脚本的两个版本之间哪些功能发生了变化?
  • 是否可以确定命令将调用哪些函数? (有点像一个反向回溯)
+0

我不认为有可能正确测试您是否只运行直接引用修改函数的测试。您将不会测试函数如何与代码的其余部分交互。例如,它可能会通过测试,但在实践中失败,因为它的行为以微妙的方式变化。 – freespace 2008-09-20 18:33:21

+0

嗯,好点。 – dbr 2008-09-21 06:29:50

回答

24

我发现autonose是相当不可靠的,但sniffer似乎工作得很好。

$ pip install sniffer 
$ cd myproject 

然后,而不是运行 “nosetests”,我们可以运行:

$ sniffer 

或代替nosetests --verbose --with-doctest,运行:

$ sniffer -x--verbose -x--with-doctest 

正如readme描述,这是一个好主意安装平台特定的文件系统监视库之一,pyinotify,pywin32MacFSEvents(所有installa通过pip等)

2

也许buildbot将是有益的http://buildbot.net/trac

+0

这可能会起作用,但它设置我想要的非常复杂。自动测试是由“cd path/to/my/scripts && autotest”启动的,buildbot需要设置一个build slave,设置一个build master(一个相当复杂的配置) – dbr 2008-09-21 06:31:45

2

关于第三个问题,也许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,则可以获取主叫方/被叫方关系。有关更多信息,请参见docs of the trace module

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

+0

这正是需要的 - 谢谢! – dbr 2008-09-21 06:32:16

2

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

2
+0

[nose-watch](https://github.com/lukaszb/nose-watch)是一个很棒的插件。你可以像这样自动运行你的测试:`nosetests --with-watch`。很好的作品 – toast38coza 2015-05-28 11:43:00

+0

@ toast38coza`nose-watch`在Windows(tm)上不起作用 – 2015-09-25 06:41:18

16

autonosegfxmonk创建:

Autonose为蟒自动测试状工具,使用优秀nosetest库。

autotest跟踪文件系统更改,并在添加,删除或更新文件时自动重新运行任何已更改的测试或依赖项。如果文件已被修改,或者文件已更改,则文件计数会发生更改。

...

Autonose目前拥有OSX和GTK的原生GUI。如果这两者都不可用,则可以运行控制台版本(使用--console选项)。

3

我刚刚发现这一点:http://www.metareal.org/p/modipyd/

我目前使用thumb.py,而是从一个小项目,以中等我当前的项目过渡尺寸之一,我一直在寻找的东西,可以做一些更彻底的依赖性分析,并且通过一些调整,我得到了modipyd并且运行得非常快。

2

Guard是一个很好的工具,可以监视文件更改并自动触发任务。它是用Ruby编写的,但它可以用作这种任务的独立工具。有一个guard-nosetests插件通过nose运行Python测试。

Guard支持包括Growl在内的跨平台通知(Linux,OSX,Windows)以及许多其他强大功能。没有开发工具,我的一个人不能生存。

1

一个非常有用的工具,可以让你的生活更轻松entr。用C写,并且使用kqueueinotify

如果项目中的任何*.py文件发生更改,以下命令将运行您的测试套件。

ls */**.py | entr python -m unittest discover -s test 

适用于BSD,Mac OS和Linux。你可以从Homebrew得到entr

相关问题