31.4. TAP-тесты #
Различные тесты, особенно тесты клиентских программ в src/bin
, используют инструменты Perl TAP и запускаются программой тестирования Perl prove
. Вы можете передать аргументы командной строки команде prove
, установив для make
переменную PROVE_FLAGS
, например:
make -C src/bin check PROVE_FLAGS='--timer'
За дополнительными сведениями обратитесь к странице руководства по prove
.
В переменной PROVE_TESTS
, которую воспринимает make
, может быть указан список разделённых пробелами путей, заданных относительно расположения Makefile
, вызывающего prove
. Этот список определяет подмножество тестов для выполнения, вместо всех по умолчанию (t/*.pl
). Например:
make check PROVE_TESTS='t/001_test1.pl t/003_test3.pl'
TAP-тесты требуют модуля Perl IPC::Run
. Этот модуль можно найти в CPAN или в пакете операционной системы. Для их выполнения также требуется сконфигурировать PostgreSQL с параметром --enable-tap-tests
.
Вообще говоря, TAP-тесты при выполнении make installcheck
тестируют исполняемые файлы в ранее созданном дереве инсталляции, а при make check
строят локальное дерево инсталляции из текущего исходного кода. В любом случае для тестирования инициализируется локальный экземпляр (каталог данных), и в нём временно запускается сервер. Для некоторых тестов могут запускаться и несколько серверов. Таким образом, эти тесты могут быть весьма ресурсоёмкими.
Важно понимать, что TAP-тесты запускают тестовый сервер (серверы), даже когда вы даёте команду make installcheck
; этим они отличаются от обычных тестов, не в инфраструктуре TAP, которые в таком режимы рассчитаны на использование уже работающего сервера. В некоторых подкаталогах в дереве PostgreSQL TAP-тесты соседствуют с традиционными, что означает, что в результате make installcheck
будут получены смешанные результаты от временных серверов и от уже работающего тестового сервера.
31.4.1. Переменные окружения #
Каталогам данных присваиваются имена в соответствии с именем файла теста; каталоги сохраняются, если тест не пройден. Если задана переменная окружения PG_TEST_NOCLEAN
, каталоги данных сохраняются вне зависимости от статуса теста. Например, каталог данных сохраняется вне зависимости от результатов тестов во время выполнения тестов pg_dump:
PG_TEST_NOCLEAN=1 make -C src/bin/pg_dump check
Эта переменная окружения также предотвращает удаление временных каталогов теста.
В сценариях тестов многие операции используют тайм-аут в 180 секунд, и на медленных узлах такой тайм-аут может наступать под нагрузкой. Во избежание этого задайте более высокое значение для переменной окружения PG_TEST_TIMEOUT_DEFAULT
.