Django-alkalmazások tesztelése SQL Server

Ez a cikk bemutatja, hogyan konfigurálhatja a Django tesztelési keretrendszerét úgy, hogy SQL Server adatbázisokkal működjön a mssql-django háttérrendszer használatával.

Hogyan működik a Django tesztelése az SQL Serverrel

A futtatáskor python manage.py testa Django létrehoz egy külön tesztadatbázist, futtatja az összes tesztet, majd megsemmisíti a tesztadatbázist. A tesztadatbázis neve alapértelmezés szerint a test_ és az Ön által beállított adatbázisnév kombinációja.

Tesztadatbázis beállításainak konfigurálása

A tesztadatbázis testreszabása az TEST adatbázis-konfiguráció szótárával:

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",
        },
    },
}

TESZTbeállítások

Setting Leírás
NAME A tesztadatbázis neve. Alapértelmezett: "test_" + NAME.
COLLATION A tesztadatbázis rendezési sorrendje. Alapértelmezett: példány alapértelmezett rendezési sorrendje.
DEPENDENCIES Létrehozási sorrend függőségei több adatbázis használatakor.
MIRROR Egy adatbázis aliasa, amelyet ennek a tesztadatbázisnak tükröznie kell.

Tesztek futtatása

Futtassa a teljes tesztcsomagot:

python manage.py test

Teszteket futtathat egy adott alkalmazáshoz:

python manage.py test myapp

Egy adott tesztosztály vagy metódus futtatása:

python manage.py test myapp.tests.ProductTestCase.test_create_product

A tesztadatbázis megőrzése

A tesztadatbázis tesztfuttatások közötti megőrzéséhez használja a(z) --keepdb elemet. Ez a megközelítés felgyorsítja az ismétlődő tesztfuttatásokat az adatbázis-létrehozás és -megsemmisítés kihagyásával:

python manage.py test --keepdb

Note

A --keepdb jelölőre a felügyelt identitásalapú hitelesítés (ActiveDirectoryMsi) használatakor van szükség, mert a tesztfuttató nem tud adatbázisokat létrehozni ezzel a hitelesítési módszerrel.

Tranzakciók izolációja a tesztekben

A Django TestCase osztálya minden tesztet egy tranzakcióba foglal, majd a teszt befejezése után visszagörgeti azt. Ez a viselkedés tesztelkülönítést biztosít anélkül, hogy táblákat hoz létre és semmisít meg minden teszthez.

A tranzakciók véglegesítéséhez (például tranzakcióval kapcsolatos viselkedés teszteléséhez) szükséges tesztekhez használja a következőt 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

Ha lehetséges, használja TestCase (nem TransactionTestCase) TestCase gyorsabb, mert a táblák csonkolása helyett tranzakció-visszagörgetést használ.

Tesztelés több adatbázissal

Ha a projekt több adatbázist használ, konfigurálja a tesztelési függőségeket:

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"],
        },
    },
}