Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek vysvětluje, jak nakonfigurovat testovací architekturu Django pro práci s SQL Server databázemi pomocí back-endumssql-django.
Jak funguje testování Django s SQL Server
Když spustíte python manage.py test, Django vytvoří samostatnou testovací databázi, spustí všechny testy a pak zničí testovací databázi. Výchozí název testovací databáze následuje test_ za vaším nakonfigurovaným názvem databáze.
Konfigurace nastavení testovací databáze
Přizpůsobte testovací databázi pomocí slovníku TEST v konfiguraci databáze:
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",
},
},
}
Nastavení TESTU
| Setting | Description |
|---|---|
NAME |
Název testovací databáze. Výchozí hodnota: "test_" + NAME. |
COLLATION |
Řazení pro testovací databázi. Výchozí nastavení: výchozí kolace instance. |
DEPENDENCIES |
Závislosti pořadí vytváření při použití více databází |
MIRROR |
Alias databáze, kterou by tato testovací databáze měla zrcadlit. |
Spouštění testů
Spusťte úplnou testovací sadu:
python manage.py test
Spusťte testy pro konkrétní aplikaci:
python manage.py test myapp
Spusťte konkrétní testovací třídu nebo metodu:
python manage.py test myapp.tests.ProductTestCase.test_create_product
Zachování testovací databáze
Slouží --keepdb k zachování testovací databáze mezi testovacími běhy. Tento přístup urychlí opakované testovací běhy vynecháním vytváření a zničení databáze:
python manage.py test --keepdb
Note
Příznak --keepdb se vyžaduje při použití ověřování spravované identity (ActiveDirectoryMsi), protože spouštěč testů nemůže pomocí této metody ověřování vytvářet databáze.
Izolace transakcí v testech
Třída Django TestCase zabalí každý test do transakce a vrátí ho zpět po dokončení testu. Toto chování poskytuje izolaci testů bez vytvoření a zničení tabulek pro každý test.
Pro testy, které potřebují potvrdit transakce (například k otestování chování související s transakcemi), použijte 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
Používejte TestCase (ne TransactionTestCase) kdykoli je to možné.
TestCase je rychlejší, protože místo zkrácení tabulek používá vrácení transakcí zpět.
Testování s více databázemi
Pokud váš projekt používá více databází, nakonfigurujte testovací závislosti:
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"],
},
},
}