很多测试,特别是src/bin
下面的客户端程序测试使用 Perl 的
TAP 工具并且用Perl测试程序prove
运行。你可以通过
设置make
变量PROVE_FLAGS
向prove
传递命令行选项,例如:
make -C src/bin check PROVE_FLAGS='--timer'
详见prove
的手册页。
make
变量PROVE_TESTS
可被用来定义一个空格分隔的列表,其中是调用prove
来运行的指定测试子集的路径,这些测试子集将取代默认的t/*.pl
,并且这些路径是相对于Makefile
的。例如:
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 测试基础架构不同,在这种情况下它期望使用已经运行的测试服务器。
某些 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
设置为更高的值,可以更改默认值以避免这种情况。