pytest-django — это плагин для pytest, который делает тестирование Django-проектов более удобным и гибким. Он интегрирует функции Django с мощными возможностями pytest.
Чтобы начать работать с pytest-django, сначала установите его:
pip install pytest-django
Добавьте pytest-django в файл pytest.ini, pyproject.toml или setup.cfg вашего проекта:
# pytest.ini
[pytest]
DJANGO_SETTINGS_MODULE = myproject.settings
Это указывает pytest на модуль настроек вашего Django-проекта.
Фикстуры — это одна из основных особенностей pytest, которая позволяет упростить и структурировать код для тестирования. pytest-django предоставляет ряд специфичных для Django фикстур, которые значительно облегчают процесс тестирования Django-проектов.
db
: Эта фикстура предоставляет доступ к базе данных.Она обеспечивает, чтобы каждый тест с этой фикстурой был изолирован от других. Таким образом, любые изменения в базе данных внутри теста не повлияют на другие тесты.
def test_create_user(db):
User.objects.create(username="pytest")
assert User.objects.count() == 1
client
: Этот клиент предоставляет механизм для создания запросов к вашему Django-приложению и получения ответов.def test_homepage(client):
response = client.get('/')
assert response.status_code == 200
admin_client
: Это расширение стандартной фикстуры client, которое автоматически входит в систему как администратор.def test_admin_page(admin_client):
response = admin_client.get('/admin/')
assert response.status_code == 200
rf
(RequestFactory): Это фабрика запросов, позволяющая создавать экземпляры запросов, которые можно использовать в ваших тестах.def test_my_view(rf):
request = rf.get('/my-url/')
response = my_view(request)
assert response.status_code == 200
settings
: Позволяет временно изменять настройки Django внутри теста.def test_debug_mode(settings):
assert not settings.DEBUG
settings.DEBUG = True
assert settings.DEBUG
mailoutbox
: Эта фикстура позволяет проверять отправленные письма.def test_email(mailoutbox):
send_email("Hello", "hello@example.com")
assert len(mailoutbox) == 1
assert mailoutbox[0].subject == "Hello"
live_server
: Запускает "живой" сервер, который можно использовать для интеграционного тестирования с инструментами вроде Selenium.Эти фикстуры делают тестирование Django с pytest намного проще и интуитивнее. Вместо написания сложной логики подготовки и очистки перед и после тестов, вы можете просто использовать эти готовые фикстуры для поддержания правильного состояния ваших тестов.
pytest-django предоставляет мощные инструменты и удобные функции для тестирования Django-проектов. Используя его в сочетании с обширными возможностями pytest, вы можете создавать надежные и эффективные тесты для ваших приложений.
Содержание: