Das Django-Testframework ist sehr einfach und die bevorzugte Methode ist die Verwendung des Unittest-Moduls in der Python-Standardbibliothek.
Tests schreiben
Djangos Unit-Tests verwenden das Unittest-Modul von Python, das einen klassenbasierten Ansatz zum Definieren von Tests verwendet. Der Klassenname ist django.test.TestCase und wird von Pythons unittest.TestCase geerbt.
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"')
Beim Ausführen eines Tests sucht das Testprogramm nach allen Testfällen (Unterklassen von inittest.TestCase) in allen Dateien, die mit test beginnen. Erstellen Sie automatisch einen Testsatz und führen Sie dann die Tests aus.
Hinweis: Wenn der Test auf Datenbankzugriff (Lesen, Abfragen des Modells) basiert, verwenden Sie zum Erstellen der Testklasse unbedingt django.test.TestCase anstelle von unittest.TestCase.
Tests ausführen
Alle Tests im Verzeichnis ausführen (alle test*.py-Dateien):
$ python manage.py test
Tiertests ausführen im Tests-Paket unter dem Projekt:
$ python manage.py test Animals.tests
Führen Sie Testtests im Tierprojekt aus:
$ python manage.py test Animals
Einen Testfall einzeln ausführen:
$ python manage.py test Animals.tests.AnimalTestCase
Eine Testmethode einzeln ausführen:
$ python manage .py test Animals.tests.AnimalTestCase.test_animals_can_speak
Pfad zur Testdatei angeben:
$ python manage.py test Animals/
Name der Platzhalter-Testdatei:
$ python manage.py test --pattern="tests_*.py"
Warnungen aktivieren:
$ python -Wall manage.py test
Datenbank
Für Tests ist eine Datenbank erforderlich, und Django generiert eine separate Datenbank für den Test. Unabhängig davon, ob Ihre Tests erfolgreich sind oder nicht, wird die Testdatenbank zerstört, wenn alle Ihre Tests ausgeführt wurden.
Standardmäßig lautet der Name der Testdatenbank test_DATABASE_NAME und DATABASE_NAME ist der Datenbankname, den Sie in „settings.py“ konfiguriert haben. Wenn Sie der Testdatenbank einen anderen Namen geben müssen, geben Sie den Wert von TEST_DATABASE_NAME in den Einstellungen an. py . Bei Verwendung von sqlite3 wird die Datenbank im Speicher erstellt.
Abgesehen davon, dass die Datenbank separat erstellt wird, verwendet das Testtool dieselbe Datenbankkonfiguration – DATABASE_ENGINE, DATABASE_USER, DATABASE_HOST usw. Der Benutzer, der die Testdatenbank erstellt hat, wird durch DATABASE_USER (in den Einstellungen) angegeben, also Sie Sie müssen bestätigen, dass DATABASE_USER über ausreichende Berechtigungen zum Erstellen der Datenbank verfügt.
Testausführungsreihenfolge
Um sicherzustellen, dass alle Tests mit einer sauberen Datenbank beginnen, ist die Ausführungsreihenfolge wie folgt:
1 Alle TestCase-Unterklassen werden zuerst ausgeführt.
2. Alle anderen Unit-Tests (unittest.TestCase, SimpleTestCase, TransactionTestCase).
3. Andere Tests (z. B. Doctests usw.)
Beschleunigtes Testen
Sie können PASSWORD_HASHERS auf einen schnelleren Algorithmus einstellen:
PASSWORD_HASHERS = ( 'django.contrib.auth.hashers.MD5PasswordHasher', )