Я следующий набор на Ubuntu 14.04:Джанго-pytest выпуск базы данных setup_method
- питона 2.7.6
- Джанго 1,7 [хотя я воспроизвел такое же поведение с Джанго 1.9 тоже]
- pytest-Джанго 2.8.0 [также протестирована с 2.9.1]
- pytest 2.7.2 [также испытанного с 2.8.3]
и следующий тест Код:
import pytest
from django.db import connection
import settings
from pollsapp.models import Question
original_db_name = settings.DATABASES["default"]["NAME"]
@pytest.mark.django_db
class TestExperiment(object):
def setup_method(self, method):
# it's not using the "test_" + DATABASE_NAME !
assert connection.settings_dict["NAME"] == \
settings.DATABASES["default"]["NAME"]
Question.objects.create(question_text="How are you?")
# this data remains in the main database
Хотя класс помечается использовать базу данных Джанго, данные, созданные в конструкторе поступают в основном (производство) базы данных (название взято из settings.py)
Ввод
django_db
декоратор надsetup_method
не имеет значенияЭти данные, созданные в параметре setup_method, остаются в основной базе данных, не откатываются, как они должны быть, и поскольку они будут b e, если вызов создания данных был выполнен в методе
test_case
Такое поведение возникает, когда тест запускается сам по себе. При запуске в тестовом наборе вызовы db setup_method завершаются с ошибкой: Failed: доступ к базе данных не разрешен, используйте знак
django_db
, чтобы включить , хотя декоратор явно там (что означает, что это сообщение об ошибке не должно быть 100% доверенным btw).
pytest является удивительной рамка и Джанго-pytest отлично работает, если обращения к базе данных произойдут из django_db
отмеченных методов конкретных испытаний.
Похоже, никакого взаимодействия БД никогда не должен присутствовать в специальных методах pytest, таких как setup_method
, teardown_method
и т.д. Хотя документация ничего об этом не говорят:
https://pytest-django.readthedocs.org/en/latest/database.html
я получаю это как с Django 1.7, так и с 1.9 (последняя стабильная).
Вот ссылка на весь тестовый модуль: https://github.com/zdenekmaxa/examples/blob/master/python/django-testing/tests/pytest_djangodb_only.py
декоратор должен быть на методе, а не на классе. – GwynBleidD
Если это так, это не имеет никакого значения. И, согласно документации django-pytest, возможны модуляция, класс, метод или уровень функции. –