Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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"],
},
},
}