Зачем нужна матрица тестов

Каждая версия Django поддерживает лишь определённые версии Python, а ваш код может сломаться на новом Python или на следующем Django. Матрица тестов прогоняет один и тот же набор на каждой поддерживаемой паре версий, локально и в CI.

Матрица Python x Django
Матрица Python x Django
Тип проектаРазмер матрицы
Приложение, которое вы деплоитеодна пара, как в production
Переиспользуемое приложение или библиотекавсе поддерживаемые пары Python x Django
Приложение перед обновлениемтекущая пара и следующий Django

Поддерживаемые пары перечислены в официальном FAQ Django («What Python versions can I use with Django?»). Берите матрицу оттуда, а не по памяти. В примерах ниже: Django 5.2 (LTS) на Python 3.10-3.13 и Django 6.0 на Python 3.12-3.13.

💡 Приложению обычно хватает одной пары. Полная матрица окупается в основном у библиотек.

pytest-django

pytest-django запускает тесты через pytest вместо manage.py test. Настройки лежат в pyproject.toml:

toml
[tool.pytest.ini_options]
DJANGO_SETTINGS_MODULE = "config.settings.test"
python_files = ["tests.py", "test_*.py"]
addopts = "--reuse-db -q"
filterwarnings = [
    "error::DeprecationWarning:django.*",
]
python
import pytest
from django.urls import reverse

@pytest.mark.django_db
def test_post_list(client):
    response = client.get(reverse("blog:post-list"))
    assert response.status_code == 200