Запуск тестов
Эта страница переведена при помощи нейросети GigaChat.
Регрессионные тесты могут быть запущены на уже установленном и работающем сервере или с использованием временной установки внутри дерева сборки. Кроме того, существует режим «параллельный» и режим «последовательный» для запуска тестов. Последовательный метод запускает каждый тестовый сценарий отдельно, тогда как параллельный метод запускает несколько серверных процессов для выполнения групп тестов параллельно. Параллельное тестирование помогает убедиться в том, что межпроцессное взаимодействие и блокировка работают правильно. Некоторые тесты могут выполняться последовательно даже в «параллельном» режиме, если это требуется для выполнения тестирования.
Запуск тестов с использованием временной установки
Чтобы запустить параллельные регрессионные тесты после сборки, но перед установкой, введите команду:
make check
в корневом каталоге. Или можно перейти в каталог src/test/regress
и выполнить там эту команду. Тесты, выполняемые параллельно, помечаются префиксом «+», а тесты, выполняющиеся последовательно --- префиксом «-». В конце должны увидеть что-то вроде:
# All 213 tests passed.
или иначе сообщение о том, какие тесты завершились неудачно. См. раздел Оценка результатов тестирования ниже прежде чем предполагать, что «неудача» представляет собой серьезную проблему.
Поскольку этот метод тестирования запускает временный сервер, он не будет работать, если выполнять сборку от имени пользователя root, поскольку сервер не запустится от имени root. Рекомендуется не выполнять сборку от имени root или же выполнять тестирование после завершения установки.
Если настроить PostgreSQL для установки в место, где уже существует более старая установка PostgreSQL, и выполнить make check
до установки новой версии, может обнаружиться, что тесты завершаются неудачей, потому что новые программы пытаются использовать уже установленные общие библиотеки. (Типичные признаки – жалобы на неопределенные символы.) Чтобы запустить тесты перед перезаписью старой установки, нужно выполнить сборку с помощью configure --disable-rpath
. Не рекомендуется использовать эту опцию для окончательной установки.
Параллельный регрессионный тест запускает довольно много процессов под идентификатором пользователя. В настоящее время максимальная степень параллельности составляет двадцать параллельных тестовых сценариев, что означает сорок процессов: существует серверный процесс и процесс psql для каждого тестового сценария. Таким образом, если система устанавливает ограничение на количество процессов для одного пользователя, убедитесь, что это ограничение составляет не менее пятидесяти или приблизительно к этому значению, иначе можно столкнуться со случайными сбоями при параллельном тестировании. Если нет возможности увеличить лимит, уменьшите степень параллельности, установив параметр MAX_CONNECTIONS
. Например:
make MAX_CONNECTIONS=10 check
выполняет не более десяти тестов одновременно.
Запуск тестов на существующей установке
Чтобы запустить тесты после установки (см. «Установка из исходного кода»), инициализируйте каталог данных и запустите сервер, как описано в разделе «Настройка и эксплуатация сервера», затем введите:
make installcheck
или для параллельного теста:
make installcheck-parallel
Тесты будут ожидать подключения к серверу на локальном хосте и номер порта по умолчанию, если не указано иное с помощью переменных среды PGHOST
и PGPORT
. Тесты будут выполняться в базе данных под названием regression
; любая существующая база данных с этим именем будет удалена.
Тесты также будут временно создавать некоторые кластерные объекты, такие как роли, табличные пространства и подписки. Эти объекты будут иметь имена, начинающиеся с regress_
. Будьте осторожны при использовании режима installcheck
с установкой, которая имеет какие-либо реальные глобальные объекты с такими именами.
Дополнительные наборы тестов
Команды make check
и make installcheck
запускают только регрессионные тесты «ядра», которые проверяют встроенную функциональность сервера PostgreSQL. В дистрибутиве исходного кода содержится множество дополнительных наборов тестов, большинство из которых связаны с дополнительной функциональностью, такой как необязательные процедурные языки.
Чтобы запустить все тестовые пакеты, применимые к модулям, выбранным для сборки, включая основные тесты, введите одну из этих команд в верхней части дерева сборки:
make check-world
make installcheck-world
Эти команды запускают тесты, используя временные серверы или уже установленный сервер соответственно, точно так же, как было объяснено ранее для make check
и make installcheck
. Другие факторы такие же, как объяснялось ранее для каждого метода. Обратите внимание, что make check-world
создает отдельный экземпляр (временный каталог данных) для каждого тестируемого модуля, поэтому ему требуется больше времени и дискового пространства, чем make installcheck-world
.
На современном компьютере с несколькими процессорными ядрами и без жестких ограничений операционной системы можно значительно ускорить процесс с помощью параллелизма. Команда, которую большинство разработчиков PostgreSQL фактически используют для запуска всех тестов, выглядит примерно так:
make check-world -j8 >/dev/null
с ограничением -j
, близким к количеству доступных ядер или немного превышающим его. Отказ от stdout устраняет ненужные сообщения, которые не интересны, когда нужно проверить успешность выполнения. В случае сбоя, сообщения stderr чаще всего достаточно, чтобы определить, где следует более внимательно изучить проблему.
В качестве альтернативы можно запустить отдельные наборы тестов, введя make check
или make installcheck
в соответствующем подкаталоге дерева сборки. make installcheck
предполагает, что соответствующий модуль(и) установлен, а не только основной сервер.
Дополнительные тесты, которые могут быть вызваны таким образом, включают:
- Регрессивные тесты для необязательных процедурных языков. Они находятся под
src/pl
. - Регрессивные тесты для модулей
contrib
, расположенных подcontrib
. Не все модулиcontrib
имеют тесты. - Регрессивные тесты для библиотек интерфейсов, расположенных в
src/interfaces/libpq/test
иsrc/interfaces/ecpg/test
. - Тесты для методов аутентификации, поддерживаемых ядром, находятся в
src/test/authentication
. (См. ниже дополнительные тесты, связанные с аутентификацией). - Тесты, проверяющие поведение одновременных сеансов, находятся в
src/test/isolation
. - Тесты восстановления после сбоев и физической репликации, находятся в
src/test/recovery
. - Тесты логической репликации, находятся в
src/test/subscription
. - Тесты клиентских программ, расположенных под
src/bin
.
При использовании режима installcheck
эти тесты будут создавать и уничтожать тестовые базы данных, названия которых включают regression
, например pl_regression
или contrib_regression
. Будьте осторожны при использовании режима installcheck
с установкой, которая имеет любые нетестовые базы данных с такими именами.
Некоторые из этих вспомогательных наборов тестов используют инфраструктуру TAP, объясненную в разделе «Тесты ТАР». Основанные на TAP тесты выполняются только тогда, когда PostgreSQL был настроен с опцией --enable-tap-tests
. Это рекомендуется для разработки, но может быть опущено, если нет подходящей установки Perl.
Некоторые тестовые наборы не запускаются по умолчанию. Это происходит или потому что небезопасно запускать их на системе с несколькими пользователями, или потому что для них требуется специальное программное обеспечение, или они требуют значительных ресурсов. Можно выбирать, какие тестовые пакеты запустить дополнительно, установив переменную make
или переменную окружения PG_TEST_EXTRA
в список, разделенный пробелами, например:
make check-world PG_TEST_EXTRA='kerberos ldap ssl'
В настоящее время поддерживаются следующие значения:
kerberos
: Запускает тестовый набор под src/test/kerberos
. Для этого требуется установка MIT Kerberos и открываются сокеты прослушивания TCP/IP.
ldap
: Запускает тестовый пакет под src/test/ldap
. Для этого требуется установка OpenLDAP и открываются сокеты прослушивания TCP/IP.
ssl
: Запускает набор тестов под src/test/ssl
. И открываются сокеты прослушивания TCP/IP.
load_balance
: Запускает тест src/interfaces/libpq/t/004_load_balance_dns.pl
. Требует редактирования системного файла hosts
и открывает сокеты прослушивания TCP/IP.
libpq_encryption
: Запускает тест src/interfaces/libpq/t/005_negotiate_encryption.pl
. Открывает сокеты прослушивания TCP/IP. Если PG_TEST_EXTRA
также включает kerberos
, дополнительно включаются тесты, требующие установки MIT Kerberos.
wal_consistency_checking
: Использует wal_consistency_checking=all
при запуске определенных тестов под src/test/recovery
. Не включен по умолчанию, потому что это ресурсоемко.
xid_wraparound
: Запускает набор тестов под src/test/modules/xid_wraparound
. По умолчанию отключен, так как является ресурсоемким.
Тесты для функций, которые не поддерживаются текущей конфигурацией сборки, не выполняются, даже если они упомянуты в PG_TEST_EXTRA
.
Кроме того, есть тесты в src/test/modules
, которые будут выполняться make check-world
, но не make installcheck-world
. Это связано с тем, что они устанавливают непроизводственные расширения или имеют другие побочные эффекты, которые считаются нежелательными для производственной установки. Есть возможность использовать make install
и make installcheck
в одной из этих подкаталогов, но не рекомендуется делать это на сервере, который не является тестовым.
Локали и кодировка
По умолчанию тесты, использующие временную установку, используют локали, определенные в текущей среде, и соответствующую кодировку базы данных, определяемую initdb
. Полезно протестировать разные локали, установив соответствующие переменные окружения, например:
make check LANG=C
make check LC_COLLATE=en_US.utf8 LC_CTYPE=fr_CA.utf8
Из-за особенностей реализации установка LC_ALL
не работает для этой цели; все остальные переменные среды, связанные с локализацией, работают.
При тестировании существующей установки языковой стандарт определяется существующим кластером баз данных и не может быть установлен отдельно для тестового запуска.
Можно выбрать кодировку базы данных явно, установив переменную ENCODING
, например:
make check LANG=C ENCODING=EUC_JP
Установка кодировки базы данных таким образом обычно имеет смысл только в том случае, если локаль равен C; в противном случае кодировка выбирается автоматически из локали, и указание кодировки, которая не соответствует локали, приведет к ошибке.
Кодировка базы данных может быть установлена для тестов против временной или существующей установки, хотя в последнем случае она должна быть совместима с локалью установки.
Настройки пользовательского сервера
Существует несколько способов использования пользовательских настроек сервера при запуске набора тестов. Это может быть полезно для включения дополнительного ведения журнала, настройки лимитов ресурсов или активации дополнительных проверок времени выполнения, таких как debug_discard_caches. Но обратите внимание, что не следует ожидать успешного прохождения всех тестов со случайными настройками.
Дополнительные параметры могут передаваться различным командам initdb
, выполняемым внутренне во время настройки тестов, используя переменную окружения PG_TEST_INITDB_EXTRA_OPTS
. Например, чтобы запустить тест с включенными контрольными суммами и пользовательским размером сегмента журнала упреждающей записи и настройкой work_mem
, используйте:
make check PG_TEST_INITDB_EXTRA_OPTS='-k --wal-segsize=4 -c work_mem=50MB'
Для основного набора регрессионных тестов и других тестов, управляемых pg_regress
, можно также установить индивидуальные серверные настройки времени выполнения в переменной среды PGOPTIONS
(для настроек, допускающих это), например:
make check PGOPTIONS="-c debug_parallel_query=regress -c work_mem=50MB"
(Это использует функциональность, предоставляемую библиотекой libpq; см. раздел параметры для подробностей.)
При запуске против временного экземпляра установки можно также задать нестандартные настройки, предоставив предварительно созданный файл postgresql.conf
:
echo 'log_checkpoints = on' > test_postgresql.conf
echo 'work_mem = 50MB' >> test_postgresql.conf
make check EXTRA_REGRESS_OPTS="--temp-config=test_postgresql.conf"
Дополнительные тесты
Основной набор регрессионных тестов содержит несколько тестовых файлов, которые не запускаются по умолчанию, поскольку они могут зависеть от платформы или занимать очень много времени для выполнения. Можно запустить эти или другие дополнительные тестовые файлы, установив переменную EXTRA_TESTS
. Например, чтобы запустить тест numeric_big
:
make check EXTRA_TESTS=numeric_big