2016-01-24 135 views
1

我的python代碼執行相當複雜的數值計算,在很多情況下,我無法提供已知的解決方案來啓用單元測試(特別是對於中間結果)。數字代碼迴歸測試框架

然而,我發現,我能趕上了很多與鼻子的bug,通過以下流程進行迴歸測試:

  1. 編寫測試代碼來解決一些相對較小的問題

  2. 運行一次,檢查結果(通常以matplotlib圖的形式),並通過與分析結果或其他數字軟件或物理直覺進行比較來決定結果是否在可接受的數字精度內是正確的。 (FWIW我避免numpy的保存例程作爲this bug的解決方法,但是因爲這已在發佈的版本中得到修復,我認爲我現在可以使用它們)。

  3. 測試代碼執行計算,並將其與使用numpy的assert_allclose從文件讀入的參考數據進行比較。

的測試功能被寫入這樣的方式,默認情況下它會執行的測試,但通過使非缺省值的參數我可以繪製的結果,並覆蓋參考文件,如果它變得必要。參考文件被檢入到git中,所以沒有意外覆蓋測試值的風險很小。

但是,我發現自己寫了很多樣板代碼來實現上述功能,這超過了實際的測試代碼本身。清理這些將增加測試覆蓋範圍。

是否有一些可以輕鬆實現上述工作流程自動化的Python測試框架或插件?

回答

2

幾個月前,我編寫了nrtest實用程序,試圖使此工作流程更加簡單。這聽起來也可能對你有所幫助。

下面是一個快速概述。每個測試都由其輸入文件及其預期輸出文件定義。執行後,輸出文件存儲在便攜式基準目錄中。然後第二步將此基準與參考基準進行比較。最近的更新已啓用用戶擴展,因此您可以爲自定義數據定義比較函數。

我希望它有幫助。