Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird erläutert, wie Sie djangos Testframework für die Arbeit mit SQL Server Datenbanken mithilfe des mssql-django Back-End konfigurieren.
Wie Django-Tests mit SQL Server funktionieren
Wenn Sie ausführen python manage.py test, erstellt Django eine separate Testdatenbank, führt alle Tests aus und zerstört dann die Testdatenbank. Der Testdatenbankname ist standardmäßig test_, gefolgt von Ihrem konfigurierten Datenbanknamen.
Konfigurieren von Testdatenbankeinstellungen
Passen Sie die Testdatenbank mithilfe des TEST Wörterbuchs in Ihrer Datenbankkonfiguration an:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<your-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
"TEST": {
"NAME": "test_mydb",
"COLLATION": "SQL_Latin1_General_CP1_CI_AS",
},
},
}
TESTeinstellungen
| Setting | Beschreibung |
|---|---|
NAME |
Name der Testdatenbank. Standardwert: "test_" + NAME. |
COLLATION |
Sortierung für die Testdatenbank. Standard: Standardkollation der Instanz. |
DEPENDENCIES |
Erstellungsreihenfolgenabhängigkeiten bei Verwendung mehrerer Datenbanken. |
MIRROR |
Alias der Datenbank, deren Spiegel diese Testdatenbank sein soll. |
Tests ausführen
Führen Sie die vollständige Testsuite aus:
python manage.py test
Führen Sie Tests für eine bestimmte App aus:
python manage.py test myapp
Führen Sie eine bestimmte Testklasse oder -methode aus:
python manage.py test myapp.tests.ProductTestCase.test_create_product
Beibehalten der Testdatenbank
Verwenden Sie --keepdb, um die Testdatenbank zwischen den Testläufen zu erhalten. Dieser Ansatz beschleunigt wiederholte Testläufe, indem die Datenbankerstellung und -zerstörung übersprungen wird:
python manage.py test --keepdb
Note
Das --keepdb Flag ist bei Verwendung der verwalteten Identitätsauthentifizierung erforderlich (ActiveDirectoryMsi), da der Testläufer keine Datenbanken mit dieser Authentifizierungsmethode erstellen kann.
Transaktionsisolation in Tests
Djangos TestCase-Klasse führt jeden Test innerhalb einer Transaktion aus und macht sie nach Abschluss des Tests rückgängig. Dieses Verhalten bietet Testisolation, ohne Tabellen für jeden Test zu erstellen und zu zerstören.
Verwenden Sie TransactionTestCasefür Tests, die Transaktionen ausführen müssen (z. B. um transaktionsbezogenes Verhalten zu testen):
from django.test import TransactionTestCase
from myapp.models import Product
class ProductTransactionTest(TransactionTestCase):
def test_atomic_operation(self):
# This test commits to the database
Product.objects.create(name="Widget", price=9.99)
self.assertEqual(Product.objects.count(), 1)
Tip
Verwenden Sie TestCase (nicht TransactionTestCase) wann immer möglich.
TestCase ist schneller, weil es ein Transaktions-Rollback verwendet, anstatt Tabellen zu leeren.
Testen mit mehreren Datenbanken
Wenn Ihr Projekt mehrere Datenbanken verwendet, konfigurieren Sie Testabhängigkeiten:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": "<primary-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
"TEST": {
"NAME": "test_primary",
},
},
"reporting": {
"ENGINE": "mssql",
"NAME": "<reporting-database>",
"USER": "<your-username>",
"PASSWORD": "<your-password>",
"HOST": "<your-server>",
"PORT": "1433",
"OPTIONS": {
"driver": "ODBC Driver 18 for SQL Server",
},
"TEST": {
"NAME": "test_reporting",
"DEPENDENCIES": ["default"],
},
},
}