django 的單元測試分爲2種,一種是doc test ,一種是 unit test.html
這裏只描述 unit test.python
這裏是官方文檔:https://docs.djangoproject.com/en/dev/topics/testing/overview/ git
其中的重點是:github
在咱們的項目模塊中創建 test.py (這個很重要,django默認加載模塊中的test.py文件來執行測試)。在其中定義模塊繼承 django.test.TestCase。python 會自動加載咱們定義的模塊的以 test 開頭的方法。sql
from django.test import TestCase from myapp.models import Animalclass AnimalTestCase(TestCase): def setUp(self): Animal.objects.create(name="lion", sound="roar") Animal.objects.create(name="cat", sound="meow") def test_animals_can_speak(self): """Animals that can speak are correctly identified""" lion = Animal.objects.get(name="lion") cat = Animal.objects.get(name="cat") self.assertEqual(lion.speak(), 'The lion says "roar"') self.assertEqual(cat.speak(), 'The cat says "meow"')
完成以後,執行命令數據庫
./manage.py test
默認狀況下,django的測試過程會 建立測試數據庫,執行test。刪除測試數據庫 。django
這是一個很蛋疼的地方,由於測試數據庫建立過程會花費很長的時間。app
對於這中狀況,有2個解決辦法:ide
1.使用內存數據庫sqlite。在settings.py中配置單元測試
if 'test' in sys.argv: DATABASES['default'] = {'ENGINE': 'django.db.backends.sqlite3',}
這樣作,一樣會建立測試數據庫,可是時間會少不少。
2.使用django的testrunner。 在settings.py中配置
TEST_RUNNER = 'django.test.runner.DiscoverRunner'
這樣作,一樣也會建立數據庫,可是這個建立數據庫的時間話費也很是的少。
3.git hub上面有個項目叫作 django-test-utils 。這個項目有一個功能叫作 複用默認的數據庫,不過,我安裝了這個代碼,使用了這個功能後,提示說,模塊沒有keep-database 這個屬性的錯誤。google 上也有人說這個問題。一樣是,沒有解決方案。因此,這個方法,沒有跑通。
其實這個問題的緣由是,他這個項目的keep-database模塊的寫法太老,django沒法讀取。非要用這keep-database的這個邏輯的話,能夠將 'django.test.runner.DiscoverRunner' 的複製出來,在裏面把建立數據庫和刪除數據庫的邏輯給幹掉。
在上面方法1+方法2一塊兒使用的時候,雖然建立了測試數據庫,可是最終話費的時間是很是少的,因此,這個辦法組合也算是解決了這個問題。