我目前在每個應用程序中使用一個fixtures文件,但隨着項目的增長,測試花費的時間太長,我相信爲每個測試課程加載的(現在很大的)燈具都有問題。在Django中處理測試數據的最佳做法是什麼?
由於擔心重複和維護,我避免了很多較小的燈具,但我知道這是不可避免的。
在我走下那條路之前,我想我會問別人用夾具來測試他們的應用程序/項目。
我目前在每個應用程序中使用一個fixtures文件,但隨着項目的增長,測試花費的時間太長,我相信爲每個測試課程加載的(現在很大的)燈具都有問題。在Django中處理測試數據的最佳做法是什麼?
由於擔心重複和維護,我避免了很多較小的燈具,但我知道這是不可避免的。
在我走下那條路之前,我想我會問別人用夾具來測試他們的應用程序/項目。
請確保您使用sqlite進行測試。與其他數據庫引擎相比,速度有很大差異。
是的,你遇到了一大套燈具的問題。不斷的反序列化/加載會隨着您的測試套件的增長而增加。我會建議編寫效用函數來根據需要創建數據,而不是依靠燈具。例如,你可能有一個函數來創建一個新的auth.User
,如:
def create_user(data=None):
data = data or {}
defaults = {
'username': get_random_string(),
'email': get_random_email(),
'password': get_random_string()
}
defaults.update(data)
return User.objects.create_user(**defaults)
寫一個函數生成一個隨機字符串/電子郵件作爲練習留給讀者:)
它的速度更快,因爲它不」 t驗證您輸入的任何數據。 –
@Mark,關於數據驗證的觀點在大多數情況下與使用django無關。由於sqlite在內存中運行,所以用sqlite進行測試的速度「非常快」。可以配置django設置,以便mysql或postrges使用內存表而不是常規表,如果這樣做,那麼數據庫之間沒有顯着差異。 – Ski
編寫測試的目標不是要有一個快速測試套件;這是爲了確保您的代碼在您將其移至不應使用Sqlite的生產環境中時應該做它應該做的事情。在Django中編寫代碼以及後續的將通過Sqlite傳遞並在真實數據庫上失敗的測試用例是微不足道的。通過使用Sqlite進行測試,你不會做任何好處。 –