各个测试,尤其是 src/bin
下的客户端程序测试,使用 Perl TAP 工具,并通过 Perl 测试程序 prove
运行。可以对 prove
传递命令行选项,方法是设置 make
变量 PROVE_FLAGS
,例如
make -C src/bin check PROVE_FLAGS='--timer'
有关更多信息,请参见 prove
的手册页。
可以使用 make
变量 PROVE_TESTS
来定义相对于调用 prove
的 Makefile
的路径分隔空格列表,以运行指定测试子集,而不是默认的 t/*.pl
。例如
make check PROVE_TESTS='t/001_test1.pl t/003_test3.pl'
TAP 测试需要 Perl 模块 IPC::Run
。此模块可从 CPAN 或操作系统软件包中获取。它们还要求 PostgreSQL 配置有选项 --enable-tap-tests
。
一般来说,如果你说 make installcheck
,TAP 测试将在先前的安装树中测试可执行文件;如果你说 make check
,TAP 测试会从当前源文件构建一棵新的本地安装树。这两种情况下,它们都会初始化本地实例(数据目录)并在其中短暂运行服务器。其中一些测试会运行多个服务器。因此,这些测试可能会占用大量资源。
重要的是要明白,即便在你说 make installcheck
时,TAP 测试也会启动测试服务器;这与传统的非 TAP 测试基础架构不同,后者在这种情况下期望使用已经运行的测试服务器。一些 PostgreSQL 子目录同时包含传统风格和 TAP 风格测试,这意味着 make installcheck
会产生临时服务器和已经运行的测试服务器混合产生的结果。
数据目录的命名取决于测试文件名,并且在测试失败时将被保留。如果环境变量 PG_TEST_NOCLEAN
已设置,则数据目录将无论测试状态如何保留。例如,在运行 pg_dump 测试时无论测试结果如何保留数据目录
PG_TEST_NOCLEAN=1 make -C src/bin/pg_dump check
此环境变量还会阻止测试的临时目录被删除。
测试套件中的许多操作使用 180 秒超时,这可能会导致承载较慢导致负载引起的超时。将环境变量 PG_TEST_TIMEOUT_DEFAULT
设置到一个较高的数字会更改默认设置以避免出现这种情况。