postgresql-testing упрощает локальное тестирование PostgreSQL в Python

postgresql-testing упрощает локальное тестирование PostgreSQL в Python

Автор представил postgresql-testing, набор простых помощников для тестирования Python-кода с PostgreSQL. Пакет устанавливается через pip без Docker, Homebrew или apt и опирается на пакет postgresql-binaries. Интерфейс намеренно небольшой, но позволяет работать с сервером PostgreSQL достаточно близко к его обычным инструментам.

В примере для pytest фикстура создаёт конфигурацию базы, инициализирует каталог данных, запускает сервер, создаёт пользователя и каждый раз создаёт либо заменяет тестовую базу. Библиотека рассчитана в том числе на отдельную базу для каждого потока тестирования, а также на старт из шаблонной базы или архива. Для быстрого ручного запуска новой базы есть команда postgresql-testing-serve; её также можно запустить через uvx с указанной версией PostgreSQL.

В комплект также включена локальная версия интерфейса explain.dalibo.com: план запроса в JSON, полученный через EXPLAIN ANALYZE с параметрами COSTS, VERBOSE и BUFFERS, можно передать команде postgresql-testing-explain. Есть помощники для шаблонных баз и архивов. Автор упоминает лишь неопределённую долгосрочную идею кэширования мигрированных баз по аналогии со слоями Docker, но готовой функции в описании не заявляет. На macOS с RAM-диском он отмечает небольшое ускорение в собственных замерах.

Ключевые факты

  • postgresql-testing устанавливается через pip и использует postgresql-binaries, не требуя Docker, Homebrew или apt.
  • Для pytest пакет позволяет инициализировать каталог данных, запустить PostgreSQL, создать пользователя и свежую тестовую базу.
  • Поддерживаются отдельные базы для потоков тестирования, а также работа с шаблонными базами и архивами.
  • Команда postgresql-testing-serve запускает временный PostgreSQL, а postgresql-testing-explain разбирает JSON-план EXPLAIN ANALYZE локально.
  • Автор сообщает о небольшом ускорении на macOS при использовании RAM-диска; подробной методики и цифр в описании нет.

Почему это важно

Инструмент убирает внешние системные зависимости из локальных тестов с PostgreSQL: достаточно установить Python-пакет. При этом он не ограничивается имитацией базы, а запускает PostgreSQL и даёт доступ к обычному циклу инициализации, пользователей и баз данных.

Кому это важно

Разработчикам Python-проектов, которые тестируют код на PostgreSQL и хотят получать изолированную свежую базу в pytest без настройки Docker, Homebrew или apt. Отдельно полезно тем, кому нужны базы из шаблонов либо архивов.

Как это применить

Установить пакет с нужной версией PostgreSQL, например postgresql-testing[15], и в фикстуре pytest создать DatabaseConfig, вызвать initdb, запустить сервер через serve, затем создать пользователя и тестовую базу. Для разового запуска доступна команда postgresql-testing-serve; JSON-план EXPLAIN ANALYZE можно передать в postgresql-testing-explain.

Можно ли доверять

Описание показывает конкретные команды и короткий пример интеграции с pytest, поэтому заявленный способ применения проверяем по исходному коду проекта. Однако утверждение о небольшом ускорении на macOS приведено без цифр и методики, поэтому его стоит перепроверить на собственном окружении.

Риски и подводные камни

Пакет использует готовые бинарные сборки PostgreSQL, поэтому перед внедрением стоит проверить нужную версию сервера и совместимость с целевой средой. Идея кэширования мигрированных баз пока названа только долгосрочным планом автора, а не готовой возможностью. Результат замеров с RAM-диском нельзя переносить на другие системы без проверки.