我在conftest.py
@pytest.fixture(scope='session')
def django_db_setup():
settings.DATABASES['default'] = {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'my_db',
'HOST': 'localhost',
}
它从现有的数据库数据库中读取数据。 现在,我要运行两个测试,并希望在之前的测试中所做的更改能够一直保留到test2(直到文件中的整个测试完成)
def test_1():
user = User.objects.get(email='a@example.com')
user.username = 'hello'
user.save()
def test_2():
user = User.objects.get(email='a@example.com')
print(user.username) # expect 'hello' but it's not
以下是我尝试过的操作,但是无效。 (从https://github.com/pytest-dev/pytest-django/blob/master/docs/database.rst的底部开始)
在race.py
@pytest.fixture(scope='session')
def django_db_setup():
settings.DATABASES['default'] = {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'my_db',
'HOST': 'localhost',
}
@pytest.fixture
def db_no_rollback(request, django_db_setup, django_db_blocker):
# https://github.com/pytest-dev/pytest-django/blob/master/docs/database.rst
django_db_blocker.unblock()
request.addfinalizer(django_db_blocker.restore)
在test.py
def test_1(db_no_rollback):
user = User.objects.get(email='a@example.com')
user.username = 'hello'
user.save()
def test_2(db_no_rollback):
user = User.objects.get(email='a@example.com')
print(user.username) # expect 'hello' but it's not
答案 0 :(得分:1)
您可以使用pytest的“夹具”
import pytest
@pytest.fixture()
@pytest.mark.django_db(transaction=True)
def test_1():
user = User.objects.get(email='a@example.com')
user.username = 'hello'
user.save()
@pytest.mark.django_db(transaction=True)
def test_2(test_1):
user = User.objects.get(email='a@example.com')
assert user.username == 'hello'
在这种情况下,test_2将具有来自test_1(夹具)的所有数据库数据
答案 1 :(得分:0)
您可以使用test --keepdb
选项防止测试数据库被破坏。这将在两次运行之间保留测试数据库。如果数据库不存在,将首先创建它。任何迁移都将被应用,以使其保持最新状态。
查看this链接。
答案 2 :(得分:0)
您可以使用 --reuse-db
选项重用数据库