Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как настроить систему тестирования Django для работы с базами данных SQL Server с использованием бэкенда mssql-django.
Как работает тестирование Django с SQL Server
При запуске python manage.py testDjango создает отдельную тестовую базу данных, выполняет все тесты, а затем уничтожает тестовую базу данных. По умолчанию имя тестовой базы данных имеет вид: test_, после которого указывается настроенное вами имя базы данных.
Настройка параметров тестовой базы данных
Настройте тестовую базу данных с помощью словаря TEST в конфигурации базы данных:
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
| Setting | Описание |
|---|---|
NAME |
Имя тестовой базы данных. По умолчанию: "test_" + NAME. |
COLLATION |
Правила сортировки для тестовой базы данных. По умолчанию: параметры сортировки экземпляра по умолчанию. |
DEPENDENCIES |
Зависимости порядка создания при использовании нескольких баз данных. |
MIRROR |
Псевдоним базы данных, которую должна зеркалировать данная тестовая база данных. |
Выполнение тестов
Запустите полный набор тестов:
python manage.py test
Выполните тесты для конкретного приложения:
python manage.py test myapp
Запустите определенный тестовый класс или метод:
python manage.py test myapp.tests.ProductTestCase.test_create_product
Сохранение тестовой базы данных
Используйте --keepdb для сохранения тестовой базы данных между запусками тестов. Этот подход ускоряет повторные запуски тестов путем пропуска создания и уничтожения базы данных:
python manage.py test --keepdb
Note
Флаг --keepdb обязателен при использовании аутентификации с использованием управляемой идентичности (ActiveDirectoryMsi), поскольку средство запуска тестов не может создавать базы данных с помощью этого метода аутентификации.
Изоляция транзакций в тестах
Класс Django TestCase упаковывает каждый тест в транзакцию и откатывает его после завершения теста. Это поведение обеспечивает изоляцию тестов без создания и уничтожения таблиц для каждого теста.
Для тестов, которые необходимо зафиксировать транзакции (например, для тестирования поведения, связанного с транзакциями), используйте 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
Используйте TestCase (не TransactionTestCase) по возможности.
TestCase быстрее, так как он использует откат транзакций вместо усечения таблиц.
Тестирование с несколькими базами данных
Если проект использует несколько баз данных, настройте тестовые зависимости:
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"],
},
},
}