Django uygulamalarını SQL Server ile test edin

Bu makale, Django'nun test çerçevesinin SQL Server veritabanlarıyla mssql-django arka ucunu kullanarak çalışacak şekilde nasıl yapılandırılacağını açıklar.

Django testi SQL Server ile nasıl çalışır?

çalıştırdığınızda python manage.py test, Django ayrı bir test veritabanı oluşturur, tüm testleri çalıştırır ve ardından test veritabanını yok eder. Test veritabanı adı, varsayılan olarak test_ ifadesinin ardından yapılandırdığınız veritabanı adından oluşur.

Test veritabanı ayarlarını yapılandırma

Veritabanı yapılandırmanızdaki sözlüğü kullanarak TEST test veritabanını özelleştirin:

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

TEST ayarları

Setting Açıklama
NAME Test veritabanının adı. Varsayılan: "test_" + NAME.
COLLATION Test veritabanı için harmanlama. Varsayılan: örneğin varsayılan sıralama düzeni.
DEPENDENCIES Birden çok veritabanı kullanılırken oluşturma sırası bağımlılıkları.
MIRROR Bu test veritabanının yansıtması gereken veritabanının takma adı.

Testleri çalıştır

Tam test paketini çalıştırın:

python manage.py test

Belirli bir uygulama için testleri çalıştırın:

python manage.py test myapp

Belirli bir test sınıfını veya yöntemini çalıştırın:

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

Test veritabanını koruma

Test çalıştırmaları arasında test veritabanını korumak için kullanın --keepdb . Bu yaklaşım, veritabanı oluşturma ve yok etme adımlarını atlayarak yinelenen test çalıştırmalarını hızlandırır:

python manage.py test --keepdb

Note

Bayrak --keepdb , yönetilen kimlik doğrulaması ()ActiveDirectoryMsi kullanılırken gereklidir çünkü test çalıştırıcısı bu kimlik doğrulama yöntemiyle veritabanları oluşturamaz.

Testlerde işlem yalıtımı

Django'nun TestCase sınıfı her testi bir işlemde sarmalar ve test tamamlandıktan sonra geri alır. Bu davranış, her test için tablo oluşturmadan ve yok etmeden test yalıtımı sağlar.

İşlemleri kesinleştirmesi gereken testler için (örneğin, işlemlerle ilgili davranışı test etmek amacıyla) TransactionTestCase kullanın:

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

Mümkün olduğunda kullanın TestCase (değil TransactionTestCase). TestCase daha hızlıdır çünkü tabloların içeriğini topluca silmek yerine işlem geri alma yöntemini kullanır.

Birden çok veritabanıyla test edin

Projeniz birden çok veritabanı kullanıyorsa test bağımlılıklarını yapılandırın:

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