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

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

примечание

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

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

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

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

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

  1. Пакеты PostgreSQL, включая модули, должны быть установлены.

  2. Бинарные файлы PostgreSQL должны быть доступны в PATH. Возможно, потребуется добавить их к пути с помощью команды вроде PATH=/usr/lib/postgresql/11/bin:\$PATH python -m behave.

  3. Если необходимо протестировать внешние DCS (например, Etcd, Consul и Zookeeper), понадобятся установленные пакеты и соответствующие службы, работающие и принимающие незашифрованные/незащищенные соединения на локальном хосте и стандартном порту. В случае Etcd или Consul набор тестов behave может запустить их, если бинарные файлы будут доступны в PATH.

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

# You may want to use Virtualenv or specify pip3.
pip install -r requirements.txt
pip install -r requirements.dev.txt

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

# You may want to use Virtualenv or specify python3.

# Run flake8 to check syntax and formatting:
python setup.py flake8

# Run the pytest suite in tests/:
python setup.py test

# Moreover, you may want to run tests in different scopes for debugging purposes,
# the -s option include print output during test execution.
# Tests in pytest typically follow the pattern: 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

# Run the behave (https://behave.readthedocs.io/en/latest/) test suite in features/;
# modify DCS as desired (raft has no dependencies so is the easiest to start with):
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, если обнаружен терминал

  • 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

Среды тестирования могут быть запущены с меткой тест:

tox -m test

Тесты поведение Docker могут быть выполнены с меткой поведение:

tox -m behave

Аналогично, документация имеет метку.

Все остальные среды могут быть запущены с соответствующими именами сред:

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

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

OPEN_CMD=: tox -m docs

Поведенческие тесты

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

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

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

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

tox -m behave -- features/watchdog.feature

Конечно, можно объединить два варианта.

Внесение запроса на включение

  1. Разветвите репозиторий, разработайте и протестируйте изменения кода.

  2. Отразите изменения в документации для пользователя.

  3. Отправьте запрос на включение с четким описанием цели изменений. Если необходимо, добавьте ссылку на существующую проблему.

Отзыв о запросе на включение, будет получен как можно скорее.