Menguji aplikasi Django dengan SQL Server

Artikel ini menjelaskan cara mengonfigurasi kerangka kerja pengujian Django untuk bekerja dengan database SQL Server menggunakan mssql-django backend.

Cara kerja pengujian Django dengan SQL Server

Saat Anda menjalankan python manage.py test, Django membuat database pengujian terpisah, menjalankan semua pengujian, lalu menghancurkan database pengujian. Nama database pengujian secara default adalah test_ yang diikuti oleh nama database yang Anda konfigurasi.

Konfigurasikan pengaturan basis data uji

Sesuaikan basis data pengujian menggunakan kamus TEST dalam konfigurasi basis data Anda:

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

Pengaturan UJI

Pengaturan Deskripsi
NAME Nama basis data pengujian. Standar: "test_" + NAME.
COLLATION Kolasi untuk basis data pengujian. Default: kolasi bawaan instans.
DEPENDENCIES Dependensi urutan pembuatan saat menggunakan beberapa database.
MIRROR Alias dari database yang harus dicerminkan oleh database pengujian ini.

Jalankan pengujian

Jalankan rangkaian pengujian lengkap:

python manage.py test

Jalankan pengujian untuk aplikasi tertentu:

python manage.py test myapp

Jalankan kelas atau metode pengujian tertentu:

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

Pertahankan database pengujian

Gunakan --keepdb untuk mempertahankan database pengujian di antara eksekusi pengujian. Pendekatan ini mempercepat eksekusi pengujian berulang dengan melewati pembuatan dan penghancuran database:

python manage.py test --keepdb

Note

Opsi --keepdb diperlukan saat menggunakan autentikasi identitas terkelola (ActiveDirectoryMsi), karena eksekutor pengujian tidak dapat membuat database dengan metode autentikasi ini.

Isolasi transaksi dalam pengujian

Kelas TestCase Django menjalankan setiap pengujian dalam sebuah transaksi dan membatalkan transaksi tersebut setelah pengujian selesai. Perilaku ini menyediakan isolasi pengujian tanpa membuat dan menghancurkan tabel untuk setiap pengujian.

Untuk pengujian yang perlu melakukan transaksi (misalnya, untuk menguji perilaku terkait transaksi), gunakan 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

Gunakan TestCase (tidak TransactionTestCase) jika memungkinkan. TestCase lebih cepat karena menggunakan pembatalan transaksi alih-alih memotong tabel.

Menguji dengan beberapa database

Jika proyek Anda menggunakan beberapa database, konfigurasikan dependensi pengujian:

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