Со следующими приспособлениями и тестами тесты проходят: from deal.models import Deal
@pytest.fixture(scope='function')
def myfixture(django_db_blocker):
with django_db_blocker.unblock():
new_deal = Deal()
new_deal.name = 'Alice'
new_deal.save()
@pytest.mark.django_db
def test_1(myfixture):
print(myfixture)
deals = Deal.objects.all()
assert deals
@pytest.mark.django_db
def test_2(myfixture):
print(myfixture)
deals = Deal.objects.all()
assert deals
Результат:
============ test session starts =============
myapp/tests/pytest_test.py::test_1 PASSED
myapp/tests/pytest_test.py::test_2 PASSED
Но если я изменю область действия на «модуль», второй не удастся:
@pytest.fixture(scope='module')
def myfixture(django_db_blocker):
with django_db_blocker.unblock():
load_deals()
Результат:
============ test session starts =============
myapp/tests/pytest_test.py::test_1 PASSED
myapp/tests/pytest_test.py::test_2 FAILED
Проблема в том, что БД не сохраняется, поскольку я не вижу, что могу получить доступ к созданной сделке, если я верну ее в приспособление, но БД пуста.
========= FAILURES =========
_________ test_2 _________
myfixture = id: 1, name='Alice'
@pytest.mark.django_db
def test_2(myfixture):
print(myfixture)
deals = Deal.objects.all()
> assert deals
E assert <QuerySet []>
И если я запускаю только test_2, он, конечно, работает:
============ test session starts =============
myapp/tests/pytest_test.py::test_2 PASSED
У меня много тестов с одним и тем же прибором, было бы намного быстрее, если бы прибор мог запускаться только один раз, так как load_deals () работает довольно медленно.
Похоже, я могу повторно использовать имя django_db_setup в качестве фикстуры, и scope = 'session' работает, но мне нужно запускать разные фикстуры в зависимости от тестов.
Я использую python 3.6.1 - pytest 3.1.2 - pytest-django 3.1.2 с mariadb 10.1
Есть идеи, как это сделать?