Django測試框架很是簡單,首選方法是使用python標準庫中的unittest模塊。python
Django的單元測試使用python的unittest模塊,這個模塊使用基於類的方法來定義測試。類名爲django.test.TestCase,繼承於python的unittest.TestCase。算法
from django.test import TestCase from myapp.models import Animal class 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"')
運行測試的時候,測試程序會在全部以test開頭的文件中查找全部的test cases(inittest.TestCase的子類),自動創建測試集而後運行測試。sql
注意:若是測試是基於數據庫訪問的(讀取、查詢Model),必定要用django.test.TestCase創建測試類,而不要用unittest.TestCase。數據庫
執行目錄下全部的測試(全部的test*.py文件):django
$ python manage.py test
執行animals項目下tests包裏的測試:app
$ python manage.py test animals.tests
執行animals項目裏的test測試:框架
$ python manage.py test animals
單獨執行某個test case:ide
$ python manage.py test animals.tests.AnimalTestCase
單獨執行某個測試方法:工具
$ python manage.py test animals.tests.AnimalTestCase.test_animals_can_speak
爲測試文件提供路徑:單元測試
$ python manage.py test animals/
通配測試文件名:
$ python manage.py test --pattern="tests_*.py"
啓用warnings提醒:
$ python -Wall manage.py test
測試是須要數據庫的,django會爲測試單獨生成數據庫。無論你的測試是否經過,當你全部的測試都執行事後,這個測試數據庫就會被銷燬。
默認狀況下,測試數據庫的名字是test_DATABASE_NAME,DATABASE_NAME是你在settings.py裏配置的數據庫名.若是 你須要給測試數據庫一個其餘的名字,在settings.py中指定TEST_DATABASE_NAME的值。使用sqlite3時,數據庫是在內存中建立的。
除了數據庫是單首創建的之外,測試工具會使用相同的數據庫配置--DATABASE_ENGINE, DATABASE_USER, DATABASE_HOST等等.建立測試數據庫的用戶DATABASE_USER(settings中)指定,因此你須要確認 DATABASE_USER有足夠的權限去建立數據庫。
爲了保證全部的測試都從乾淨的數據庫開始,執行順序以下:
1.全部的TestCase子類首先運行。
2.全部其餘的單元測試(unittest.TestCase,SimpleTestCase,TransactionTestCase)。
3.其它的測試(例如doctests等)
能夠將PASSWORD_HASHERS設置爲更快的算法:
PASSWORD_HASHERS = ( 'django.contrib.auth.hashers.MD5PasswordHasher', )