2009-03-05 31 views
7

當我爲我的django應用程序開發單元測試時,發現自己一遍又一遍地運行manage.py測試。我使用的是MySQL後端,並且在項目中有很多模型,因此創建所有測試數據庫的時間大約爲30秒。如何更快地運行django單元測試(通過manage.py)

如何通過保持創建數據庫表並僅清除「manage.py test」命令之間的所有記錄之間的所有記錄來使每個單元測試更快?

回答

7

注你不必每次都運行整個測試套件。您只需運行manage.py test appname(或與manage.py test app1 app2 ...一起運行多個應用程序),即可運行單個應用程序的測試套件。

我通常的工作流程是針對我正在工作的應用程序運行測試,並在提交下一組更改前運行完整套件。

+0

然而,它仍然爲INSTALLED_APPS中的每個模塊創建數據庫,這是需要更多時間的。 – Bryce 2013-09-17 05:37:14

1

我爲我的MySQL數據庫使用RAM磁盤,很快甚至沒有描述它,只有在您正在使用的特定應用程序中測試特定測試,才能顯着縮短測試時間。有一些腳本可以自動爲您的數據庫創建虛擬硬盤,我使用mysql-ramdisk.py這是我的一位同事製作的,這個版本適用於Mac OS X.還有一個適用於Linux的版本here。我花了大約30秒來爲django dev設置整個事情,並且我的測試有時會在5秒內運行,包括創建默認測試數據庫。 ;)

0

由於在此主題中發佈:How do I run a unit test against the production database?,我創建了一個可以針對生產數據庫(在本地開發機器上,通過「manage.py shell」)或常規django「管理」運行的測試套件。 py測試「測試套件。對於我來說,在開發過程中快速進行健全性檢查和提交時間驗證已經非常節省時間。在任何一種情況下,我都運行相同的數據庫(MySQL),並在我的測試中獲得django ORM。