Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit artikel wordt uitgelegd hoe u het testframework van Django configureert om met SQL Server databases te werken met behulp van de mssql-django back-end.
Hoe Django-tests werken met SQL Server
Wanneer u uitvoert python manage.py test, maakt Django een afzonderlijke testdatabase, voert u alle tests uit en vernietigt u vervolgens de testdatabase. De naam van de testdatabase wordt test_ standaard gevolgd door de geconfigureerde databasenaam.
Testdatabase-instellingen configureren
Pas de testdatabase aan met behulp van de TEST woordenlijst in uw databaseconfiguratie:
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",
},
},
}
TESTinstellingen
| Instelling | Description |
|---|---|
NAME |
Naam van de testdatabase. Standaard: "test_" + NAME. |
COLLATION |
Sortering voor de testdatabase. Standaard: standaardsortering van instantie. |
DEPENDENCIES |
Afhankelijkheden voor het maken van volgorde bij het gebruik van meerdere databases. |
MIRROR |
Alias van een database waarvan deze testdatabase een afspiegeling moet zijn. |
Tests uitvoeren
Voer de volledige testsuite uit:
python manage.py test
Tests uitvoeren voor een specifieke app:
python manage.py test myapp
Voer een specifieke testklasse of -methode uit:
python manage.py test myapp.tests.ProductTestCase.test_create_product
De testdatabase behouden
Gebruik --keepdb deze functie om de testdatabase tussen testuitvoeringen te behouden. Deze aanpak versnelt herhaalde testuitvoeringen door het maken en vernietigen van databases over te slaan:
python manage.py test --keepdb
Note
De --keepdb vlag is vereist bij het gebruik van beheerde identiteitsverificatie (ActiveDirectoryMsi), omdat de testrunner geen databases kan maken met die verificatiemethode.
Transactieisolatie in tests
Django's TestCase klasse verpakt elke test in een transactie en rolt deze terug nadat de test is voltooid. Dit gedrag biedt testisolatie zonder tabellen te maken en te vernietigen voor elke test.
Gebruik voor tests die transacties moeten doorvoeren (bijvoorbeeld om transactiegerelateerd gedrag te testen):TransactionTestCase
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
Gebruik TestCase (niet TransactionTestCase) indien mogelijk.
TestCase is sneller omdat er gebruik wordt gemaakt van het terugdraaien van transacties in plaats van afkappen van tabellen.
Testen met meerdere databases
Als uw project meerdere databases gebruikt, configureert u testafhankelijkheden:
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"],
},
},
}