Плагин pytest-django

Тестируем Django с помощью плагина pytest-django

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-проекта.

Основные фикстуры Django в 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, вы можете создавать надежные и эффективные тесты для ваших приложений.

Содержание: