Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo explica como configurar a estrutura de teste do Django para trabalhar com bancos de dados SQL Server usando o mssql-django back-end.
Como o teste do Django funciona com SQL Server
Quando você executa python manage.py test, o Django cria um banco de dados de teste separado, executa todos os testes e destrói o banco de dados de teste. O nome do banco de dados de teste tem como padrão test_ seguido pelo nome do banco de dados configurado por você.
Definir configurações de banco de dados de teste
Personalize o banco de dados de teste usando o TEST dicionário na configuração do banco de dados:
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",
},
},
}
Configurações de TESTE
| Setting | Descrição |
|---|---|
NAME |
Nome do banco de dados de teste. Padrão: "test_" + NAME. |
COLLATION |
Ordenação para o banco de dados de teste. Padrão: ordenação padrão da instância. |
DEPENDENCIES |
Dependências de ordem de criação ao usar vários bancos de dados. |
MIRROR |
Alias de um banco de dados que esse banco de dados de teste deve espelhar. |
Executar testes
Execute o conjunto de testes completo:
python manage.py test
Execute testes para um aplicativo específico:
python manage.py test myapp
Execute uma classe ou método de teste específico:
python manage.py test myapp.tests.ProductTestCase.test_create_product
Manter o banco de dados de teste
Use --keepdb para preservar o banco de dados de teste entre execuções de teste. Essa abordagem acelera as execuções de teste repetidas ignorando a criação e a destruição do banco de dados:
python manage.py test --keepdb
Note
O --keepdb sinalizador é necessário ao usar a autenticação de identidade gerenciada (ActiveDirectoryMsi), pois o executor de teste não pode criar bancos de dados com esse método de autenticação.
Isolamento de transação em testes
A classe TestCase do Django envolve cada teste em uma transação e a reverte após sua conclusão. Esse comportamento fornece isolamento de teste sem criar e destruir tabelas para cada teste.
Para testes que precisam confirmar transações (por exemplo, para testar o comportamento relacionado à transação), use 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
Use TestCase (não TransactionTestCase) sempre que possível.
TestCase é mais rápido porque usa a reversão de transação em vez de truncar tabelas.
Testar com vários bancos de dados
Se o projeto usar vários bancos de dados, configure as dependências de teste:
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"],
},
},
}