在Django pytest中对单元测试用例使用多个数据库可以通过以下步骤实现:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'default_db',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
},
'secondary': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'secondary_db',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
}
}
上述配置定义了两个数据库连接,名称分别为'default'和'secondary'。
import pytest
from django.conf import settings
from django.db import connections
from django.test import TestCase
@pytest.fixture(scope='module')
def default_db():
settings.DATABASES['default'] = {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'default_test_db',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
}
connections.ensure_defaults()
yield
# Tear down code if needed
@pytest.fixture(scope='module')
def secondary_db():
settings.DATABASES['secondary'] = {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'secondary_test_db',
'USER': 'user',
'PASSWORD': 'password',
'HOST': 'localhost',
'PORT': '3306',
}
connections.ensure_defaults()
yield
# Tear down code if needed
上述代码定义了两个fixture函数,分别为'default_db'和'secondary_db'。这些fixture函数会在每个测试模块执行前创建对应的数据库连接,并在测试完成后清理相关资源。
import pytest
from django.contrib.auth.models import User
from myapp.models import MyModel
@pytest.mark.django_db
def test_default_db(default_db):
# 使用'default'数据库连接执行测试逻辑
user = User.objects.create(username='test_user')
assert user.username == 'test_user'
@pytest.mark.django_db
def test_secondary_db(secondary_db):
# 使用'secondary'数据库连接执行测试逻辑
obj = MyModel.objects.create(name='test_object')
assert obj.name == 'test_object'
上述代码中,通过在测试用例函数上使用@pytest.mark.django_db
装饰器,可以自动创建并使用对应的数据库连接。在每个测试用例中,可以根据需要选择使用'default'或'secondary'数据库连接。
通过上述步骤,我们可以在Django pytest中对单元测试用例使用多个数据库,实现更灵活的测试需求。
云原生正发声
GAME-TECH
Techo Day 第三期
DBTalk技术分享会
云+社区技术沙龙[第8期]
云+社区技术沙龙[第1期]
腾讯云GAME-TECH游戏开发者技术沙龙
Elastic 中国开发者大会
云+社区技术沙龙 [第31期]
领取专属 10元无门槛券
手把手带您无忧上云