【发布时间】:2018-02-12 11:19:05
【问题描述】:
我使用预先创建的 postgres 数据库进行测试。这里是 pytest 设置:
pytest.ini:
[pytest]
norecursedirs = frontend static .svn _build tmp*
DJANGO_SETTINGS_MODULE = src.settings.testing
addopts = --reuse-db
testing.py:
from .base import *
DEBUG = True
DATABASES = {
'default': {
'ENGINE': 'django.contrib.gis.db.backends.postgis',
'NAME': 'db',
'USER': 'root',
'PASSWORD': 'pass',
'HOST': 'localhost',
'PORT': '5432',
}
}
测试夹具:
@pytest.fixture(scope='session')
def user():
return User.objects.create(name='Test', )
测试用例:
import pytest
pytestmark = pytest.mark.django_db
def test_user(user):
print(user.pk) # returns pk of newly created user
print(User.objects.all()) # returns queryset with one user
def test_user2(user):
print(user.pk) # returns the same value as in the previous test
print(User.objects.all()) # returns empty queryset
我无法理解 pytest 设备的行为。每个会话创建一次模型实例,并且在多个测试用例中是相同的。但实际的分贝值是不同的。 Pytest 在第一个测试用例之后删除用户值。
如何防止这种行为并为所有测试会话保存我的数据库记录?
【问题讨论】:
-
你试过用
@pytest.mark.django_db单独装饰测试吗? -
@YerayDiazDiaz 是的,它的工作方式相同
标签: python django pytest django-testing