33.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 будут получены смешанные результаты от временных серверов и от уже работающего тестового сервера.

33.4.1. Переменные окружения #

Каталогам данных присваиваются имена в соответствии с именем файла теста; каталоги сохраняются, если тест не пройден. Если задана переменная окружения PG_TEST_NOCLEAN, каталоги данных сохраняются вне зависимости от статуса теста. Например, каталог данных сохраняется вне зависимости от результатов тестов во время выполнения тестов pg_dump:

PG_TEST_NOCLEAN=1 make -C src/bin/pg_dump check

Эта переменная окружения также предотвращает удаление временных каталогов теста.

В сценариях тестов многие операции используют тайм-аут в 180 секунд, и на медленных узлах такой тайм-аут может наступать под нагрузкой. Во избежание этого задайте более высокое значение для переменной окружения PG_TEST_TIMEOUT_DEFAULT.