各种测试,尤其是 src/bin 下的客户端程序测试,使用 Perl TAP 工具,并使用 Perl 测试程序 prove 运行。你可以通过设置 make 变量 PROVE_FLAGS 来向 prove 传递命令行选项,例如
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 设置为更高的数字将更改默认值以避免此问题。