Python单元测试是否有类似'autotest'的工具?

45 投票
11 回答
10541 浏览
提问于 2025-04-11 09:18

基本上,就是当测试失败或通过时,发出提醒通知(或者其他回调)。 有没有类似的东西呢?

如果没有,这个功能应该很容易写出来。最简单的方法是……

  1. 运行 python-autotest myfile1.py myfile2.py etc.py
    • 检查要监控的文件是否被修改过(可能只要检查是否被保存过)。
    • 运行这些文件中的所有测试。
    • 如果某个测试失败了,但上一次运行时通过了,就生成一个提醒。测试如果从失败变为通过也是一样。
    • 等待,然后重复步骤2到5。

我能想到的问题是,如果测试在不同的文件中。简单的解决办法是每次保存后都运行所有测试……但如果测试比较慢,这可能会花费比保存之间的时间还要长,或者会消耗很多CPU资源等等。

最好的办法是实际查看哪些代码发生了变化,如果函数abc()有变化,就只运行与这个函数相关的测试……虽然这样很好,但我觉得实现起来会非常复杂?

总结一下:

  • 有没有类似于Ruby工具 autotest(属于 ZenTest包)的东西,但适用于Python代码?
  • 如何检查脚本的两个版本之间哪些函数发生了变化?
  • 有没有办法确定一个命令会调用哪些函数?(有点像反向追踪)

11 个回答

3

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

我现在在用thumb.py,但随着我的项目从小型项目变成中型项目,我开始寻找一些能更全面分析依赖关系的工具。经过一些调整,我很快就把modipyd搞定了。

16

autonose 是由 gfxmonk 创建的:

Autonose 是一个类似于自动测试的工具,专门用于 Python,使用了非常棒的 nosetest 库。

autotest 会监控文件系统的变化,每当有文件被添加、删除或更新时,它会自动重新运行任何被修改的测试或相关的依赖文件。如果一个文件被修改了,或者它引用的任何文件发生了变化,那么这个文件就算是被改变了。

...

目前,Autonose 在 OSX 和 GTK 上都有本地的图形界面。如果你没有这两种环境,可以选择运行控制台版本(使用 --console 选项)。

29

我发现autonose这个工具不太可靠,但sniffer似乎工作得很好。

$ pip install sniffer
$ cd myproject

所以,不用运行“nosetests”,你可以运行:

$ sniffer

或者,代替nosetests --verbose --with-doctest,你可以运行:

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

readme中提到,安装一个特定平台的文件系统监控库是个好主意,比如pyinotifypywin32或者MacFSEvents(这些都可以通过pip等工具安装)

撰写回答