2012-08-30 17 views
14

我面臨的情況是,我想確保如果方法被修改,它不會超過X毫秒的運行時間(本質上,如果該函數速度較慢,它會減慢速度我們網頁上的搜索結果,並且對銷售產生不利影響)。在單元測試中使用所用的時間作爲斷言

我們有單元測試(特別是代碼是在python下完成的,我們使用py.test),第一個想法是斷言如果函數沒有在小於X毫秒內執行,那麼將測試標記爲失敗(或發出警告)。

但是,這感覺很危險(例如,並非所有計算機的速度都是相同的),而且我也不太確定這是單元測試的工作。

有人遇到過類似的情況嗎?對我而言,速度是一項功能,而且我希望確保隨着代碼的發展將來這種功能不會丟失。

如果單元測試不是答案,那麼您會推薦哪些其他選擇?

感謝

回答

4

您可以使用pytest-timeout plugin作爲開始。它目前只允許指定秒數(如浮點數)。但是它可以擴展到適應性更強的時間,比如pystone數字,這樣就可以衡量計算機執行pystone基準的速度有多快,然後你可以指定你的測試有多少個「pystones」被允許採取。

2

如果你有一個專門的編譯/測試服務器,或開發者之間大致相當的硬件,它的罰款,有在毫秒的時間限制。可重複性是關鍵 - 您可以寫一些東西,允許開發人員在他們的機器上進行「基線」測試,然後將結果與之進行比較。

pyunitperf模塊可用,具有時間限制以及負載測試。它已經很久沒有更新(2009年),但是如果你要推出自己的產品,那將是一個很好的開始。

請記住,以ms爲單位的測試時間本身並不會告訴您任何事情 - 但只要您僅使用它來比較各版本間的性能,應該沒關係。

+0

是的,我們做了一個專門的測試服務器,但是,我們也鼓勵開發人員在他們的機器上運行測試,我不希望他們認爲他們打破了發佈,只是因爲他們的機器有點加載。雖然如你所說,可重複性似乎是一個好主意。謝謝。 –

相關問題