Перейти к основному содержимому

Инструкция по тестированию

примечание

Эта страница переведена при помощи нейросети GigaChat.

Общение

Сообщение об ошибках

Прежде чем сообщать об ошибке, пожалуйста, убедитесь, что воспроизвели ее с последней версией Patroni! Также, пожалуйста, проверьте, существует ли уже такая проблема в трекере задач.

Запуск тестов

Требования для запуска behave-тестов:

  1. Должны быть установлены пакеты PostgreSQL, включая модули contrib <https://www.postgresql.org/docs/current/contrib.html>__.
  2. Бинарные файлы PostgreSQL должны быть доступны в PATH. При необходимости добавьте их в путь, например: PATH=/usr/lib/postgresql/11/bin:$PATH python -m behave.
  3. Для тестирования с внешними DCS (например, etcd, Consul и Zookeeper) потребуются установленные пакеты и запущенные соответствующие службы, принимающие незашифрованные/незащищенные соединения на localhost и порте по умолчанию. В случае с etcd или Consul тестовый набор behave может запустить их, если бинарные файлы доступны в PATH.

Установите зависимости:

# Возможно, захотите использовать Virtualenv или указать pip3.
pip install -r requirements.txt
pip install -r requirements.dev.txt

После установки всех зависимостей можно запустить различные наборы тестов:

# Возможно, захотите использовать Virtualenv или указать python3.

# Запустить flake8 для проверки синтаксиса и форматирования:
python setup.py flake8

# Запустить набор тестов pytest в tests/:
python setup.py test

# Более того, можете запустить тесты в разных областях для отладки,
# опция -s включает вывод print во время выполнения тестов.
# Тесты в pytest обычно следуют шаблону: FILEPATH::CLASSNAME::TESTNAME.
pytest -s tests/test_api.py
pytest -s tests/test_api.py::TestRestApiHandler
pytest -s tests/test_api.py::TestRestApiHandler::test_do_GET

# Запустить набор тестов behave (https://behave.readthedocs.io/en/latest/) в features/;
# измените DCS по желанию (raft не имеет зависимостей, поэтому с него проще всего начать):
DCS=raft python -m behave

Тестирование с помощью tox

Для запуска тестов tox нужно установить только одну зависимость (помимо Python):

pip install tox>=4

Если хотите запускать тесты behave, также понадобится установленный Docker.

Конфигурация tox в tox.ini содержит «окружения» для выполнения следующих задач:

  • lint: линтинг кода Python с помощью flake8
  • test: модульные тесты для всех доступных интерпретаторов Python с помощью pytest, генерирует XML-отчеты или HTML-отчеты, если обнаружен TTY
  • dep: обнаружение конфликтов зависимостей пакетов с помощью pipdeptree
  • type: статическая проверка типов с помощью pyright
  • black: форматирование кода с помощью black
  • docker-build: сборка образа Docker, используемого для окружения behave
  • docker-cmd: запуск произвольной команды с использованием указанного образа
  • docker-behave-etcd: запуск tox для behave-тестов с использованием указанного образа
  • py*behave: запуск behave с доступными интерпретаторами Python (без Docker, хотя именно это вызывается внутри контейнеров Docker)
  • docs: сборка документации с помощью sphinx

Запуск tox

Для запуска списка окружений по умолчанию — dep, lint, test и docs — просто выполните:

tox

Окружения test можно запустить с помощью метки test:

tox -m test

Docker-тесты behave можно запустить с помощью метки behave:

tox -m behave

Аналогично, docs имеет метку docs.

Все остальные окружения можно запустить с помощью соответствующих имен окружений:

tox -e lint
tox -e py39-test-lin

Также можно выбрать частичные списки окружений с помощью факторов. Например, для запуска всех окружений для Python 3.10:

tox -f py310

Это эквивалентно запуску всех окружений, перечисленных ниже:

$ tox -l -f py310
py310-test-lin
py310-test-mac
py310-test-win
py310-type-lin
py310-type-mac
py310-type-win
py310-behave-etcd-lin
py310-behave-etcd-win
py310-behave-etcd-mac

Перечислите все настроенные комбинации окружений с помощью tox (>=v4) следующим образом:

tox l

Окружения test и docs попытаются открыть выходные файлы HTML по завершении задачи, если tox запущен в активном терминале. Это предназначено для удобства разработчика, запускающего это окружение локально. Система попытается выполнить open на Mac и xdg-open на Linux. Чтобы использовать другую команду, установите переменную окружения OPEN_CMD в имя или путь к команде. Если этот шаг завершится ошибкой, это не приведет к общему сбою выполнения. Чтобы отключить эту функцию, установите переменную окружения OPEN_CMD в команду-заглушку :.

OPEN_CMD=: tox -m docs

Behave-тесты

Behave-тесты с -m behave соберут образы Docker на основе версий PG_MAJOR с 11 по 16, а затем запустят все behave-тесты. Это может занять довольно много времени, поэтому можете ограничить область тестирования определенной версией PostgreSQL или конкретным набором функций или шагов.

Чтобы указать версию PostgreSQL, включите полное имя окружения сборки зависимого образа, который требуется использовать, а затем имя окружения behave. Например, для PostgreSQL 14 используйте:

tox -e pg14-docker-build,pg14-docker-behave-etcd-lin

Если же хотите протестировать конкретную функцию, можете передать позиционные аргументы в behave. Это запустит сценарий теста behave для функции watchdog со всеми версиями PostgreSQL:

tox -m behave -- features/watchdog.feature

Конечно, доступно объединить оба подхода.

Внесение pull request

  1. Сделайте форк репозитория, разработайте и протестируйте изменения в коде.
  2. Отразите изменения в пользовательской документации.
  3. Отправьте pull request с четким описанием цели изменений. При необходимости добавьте ссылку на существующую задачу.