回归测试可以针对已安装并运行的服务器运行,也可以使用构建树中的临时安装运行。此外,测试运行有“并行”和“顺序”模式。顺序方法单独运行每个测试脚本,而并行方法启动多个服务器进程以并行运行测试组。并行测试增加了对进程间通信和锁定是否正常工作的信心。某些测试即使在“并行”模式下也可能顺序运行,以防测试需要。
要在构建后但在安装之前运行并行回归测试,请在顶层目录中键入
make check
(或者您可以更改为src/test/regress
并在那里运行该命令。)并行运行的测试以“+”为前缀,顺序运行的测试以“-”为前缀。最后,您应该看到类似如下内容
# All 213 tests passed.
或者关于哪些测试失败的注释。在假设“失败”代表严重问题之前,请参阅下面的第 31.2 节。
由于此测试方法运行的是临时服务器,因此如果您以 root 用户身份进行构建,则此方法将不起作用,因为服务器不会以 root 身份启动。建议的步骤不是以 root 身份进行构建,或者在完成安装后执行测试。
如果您已将PostgreSQL配置为安装到已经存在较旧PostgreSQL安装的位置,并且在安装新版本之前执行了make check
,您可能会发现测试失败,因为新程序尝试使用已安装的共享库。(典型的症状是关于未定义符号的投诉。)如果您希望在覆盖旧安装之前运行测试,则需要使用configure --disable-rpath
进行构建。但是,不建议您将此选项用于最终安装。
并行回归测试会在您的用户 ID 下启动相当多的进程。目前,最大并发数是 20 个并行测试脚本,这意味着 40 个进程:每个测试脚本都有一个服务器进程和一个psql进程。因此,如果您的系统对每个用户的进程数强制执行限制,请确保此限制至少为 50 左右,否则您可能会在并行测试中遇到随机的失败。如果您无法提高限制,可以通过设置MAX_CONNECTIONS
参数来降低并行度。例如
make MAX_CONNECTIONS=10 check
同时运行不超过 10 个测试。
要在安装后运行测试(请参阅第 17 章),请初始化数据目录并启动服务器,如第 18 章中所述,然后键入
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
需要更多的时间和磁盘空间。
在具有多个 CPU 核心且没有严格的操作系统限制的现代机器上,您可以通过并行化来使事情快得多。大多数 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
模式。
这些辅助测试套件中的一些使用第 31.4 节中解释的 TAP 基础结构。仅当 PostgreSQL 配置了--enable-tap-tests
选项时,才会运行基于 TAP 的测试。建议用于开发,但如果没有合适的 Perl 安装,则可以省略。
默认情况下不运行某些测试套件,原因要么是它们在多用户系统上运行不安全,要么是它们需要特殊的软件,要么是它们是资源密集型的。您可以通过将make
或环境变量PG_TEST_EXTRA
设置为以空格分隔的列表来决定额外运行哪些测试套件,例如
make check-world PG_TEST_EXTRA='kerberos ldap ssl load_balance libpq_encryption'
当前支持以下值
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
在src/test/recovery
下运行某些测试时,使用wal_consistency_checking=all
。默认情况下不启用,因为它会消耗大量资源。
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)非常有用。但请注意,并非所有测试都可以在任意设置下干净地通过。
可以使用环境变量 PG_TEST_INITDB_EXTRA_OPTS
将额外的选项传递给测试设置期间内部运行的各种 initdb
命令。例如,要运行启用校验和、自定义 WAL 段大小和 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
如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。