我试图避免使用@pytest.fixture(scope='module')
语法为多个测试多次创建相同的django对象。
from bots.models import Bot
@pytest.fixture(scope='module')
def forwarding_bot():
(bot, created) = Bot.objects.get_or_create(
name="test_bot",
user=get_user_model().objects.create_user(username='test_user'),
forward_http_requests_to='https://httpbin.org/post'
)
return bot
def test_get_bot_by_pk(forwarding_bot):
print(f'test_get_bot_by_pk: bot count: {Bot.objects.count()}')
def test_get_bot_by_uuid(forwarding_bot):
print(f'test_get_bot_by_uuid: bot count: {Bot.objects.count()}')
当我运行pytest时,我得到了这个输出:
test_get_bot_by_pk: bot count: 1
test_get_bot_by_uuid: bot count: 0
我理解这个的原因。每个模块确实会触发fixture函数一次,但由于它的代码创建了一个db对象 - 只有第一个测试在DB中找到它。
问题是 - 如何在同一个数据库和同一个夹具上进行多次测试?我是pytest的新手,所以这对我来说是个挑战。