В новой версии добавлена фикстура для контроля запросов к БД
Сегодня выпустил новую версию pytest-djangoapp — расширения для pytest, позволяющего удобно тестировать подключаемые приложения для Django.

Впервые я анонсировал это расширение летом прошлого года. За последний год приложение обросло функциональностью и на текущий момент предлагает фикстуры для:
  • проверки команд управления (management);
  • модификации настроек проекта (settings);
  • тестирования ответов от представлений (views);
  • проверки шаблонных тегов (template tags);
  • создания пользователей;
  • проверки отправки эл. прочты;
  • проверки интерфейсных сообщений пользователям (messages).

А в новой версии добавлена возможность отслеживания выполненных SQL.

На заметку
В pytest-django похожая функциональность прячется под фикстурами с длинными именами: django_assert_num_queries и django_assert_max_num_queries. Фикстуры эти выполнены в виде менеджеров контекста, что налагает на их использование определённые ограничения.

Вот как может выглядеть использование фикстуры в одном из тестов для вашего приложения:

def test_db(db_queries):

... # Представим, что здесь мы обращается к БД, используя модели, ORM.

# А теперь можно удостовериться, что ко всем БД
# пришло нужное количество запросов.
assert len(db_queries) == 10

# Или, например, узнать, какие именно запросы пришли.
# При вызове без параметров покажутся запросы к БД по умолчанию, а вспомогательные
# запросы типа BEGIN и подобные будут исключены.
sqls = db_queries.sql()

# Можно также удостовериться, что время выполнения запросов
# укладывается в нужный предел (сек).
assert db_queries.time() < 1

# И в любой момент мы можем очистить историю запросов,
# чтобы внутри этого же теста проверить сколько запросов
# порождает другое обращение к БД.
db_queries.clear()

Внимание
Фикстура db_queries требует для работы Django 1.9+.

Проект разрабатывается открыто на GitHub, желающие могут подключаться.

Иногда считать количество SQL-запросов полезно.

Категории

Окружение
Проект

На заметку
У нас есть представительство в Facebook. Ссылка в самом низу страницы.