2011-10-26 28 views
1

我正在使用Python的unittest。如何測試一個Python函數需要一定時間才能完成

我想寫一個測試,確保某個方法在某個時間之前完成。我可以後時間戳和時間戳的差別通常的計算做到這一點,但我開始想,如果

  1. 被這個常用於TDD完成,編寫測試失敗,如果一個方法/函數效率不高,然後重構使其效率更高?
  2. Python的unittest有一個很好的方法來做到這一點嗎?
+0

我不認爲測試失敗實際上意味着什麼。它可能因多種原因而失敗,例如在另一臺機器上的不同時機,在後臺運行的任何時機等。 –

+2

您可以嘗試使用[timeit](http://docs.python.org/library/timeit.html )模塊來獲取需要的時間,然後編寫一個斷言來確保它在不到x秒的時間內完成。 –

+1

人們過快地推薦與時間有關的所有東西。 'timeit'的目的是微代碼的小片段。對於真實世界中真實世界中應用程序的實時定時(在你想知道你的函數在真實負載下執行多長時間,而不是最快時間執行的時間),時間戳實際上是更好的要走的路。 –

回答

1

你可以用鼻子@timed做裝飾。我用它來測試時序功能。例如:

@timed(2.1) 
def test(): 
    func_with_timeout(timeout=2) 
+0

這是完美的。謝謝 – mcgyver5

0

一些公司對代碼速度進行了測試,對迴歸測試進行了排序,這些嘗試捕捉新代碼降低系統速度,如果它們遇到問題,您首先嚐試修復新代碼,仍然表現良好,如果您無法做到這一點,那麼您(產品負責人)可以決定新功能是否值得。

關於TDD:你不知道運行時間,所以不,你不能用猜測編寫測試,然後重構代碼,以便它會通過..除非你工作的東西非常具體,並有一個非功能性要求,就像一個嵌入式系統,必須在50ms內響應...

+0

關於時間限制,這可能是一個要求。但是也許你想說的是,在單元測試的框架中,即對於小部分代碼,有這樣的要求是非常罕見的。 –

相關問題