Инструкция по тестированию
Эта страница переведена при помощи нейросети GigaChat.
Сообщение об ошибках
Прежде чем сообщать об ошибке, пожалуйста, убедитесь, что удается воспроизвести ее с последней версией Patroni. Также, пожалуйста, проверьте, существует ли уже эта проблема в трекере проблем.
Запуск тестов
Требования для запуска тестов поведения:
-
Пакеты PostgreSQL, включая модули, должны быть установлены.
-
Бинарные файлы PostgreSQL должны быть доступны в
PATH
. Возможно, потребуется добавить их к пути с помощью команды вродеPATH=/usr/lib/postgresql/11/bin:\$PATH python -m behave
. -
Если необходимо протестировать внешние 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
Конечно, можно объединить два варианта.
Внесение запроса на включение
-
Разветвите репозиторий, разработайте и протестируйте изменения кода.
-
Отразите изменения в документации для пользователя.
-
Отправьте запрос на включение с четким описанием цели изменений. Если необходимо, добавьте ссылку на существующую проблему.
Отзыв о запросе на включение, будет получен как можно скорее.