2008-09-20 105 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

相關問題