回归测试可以针对已安装并运行的服务器运行,也可以使用构建树中的临时安装运行。此外,还有一种用于运行测试的“并行”模式和“顺序”模式。顺序方法单独运行每个测试脚本,而并行方法启动多个服务器进程以并行运行测试组。并行测试增加了对进程间通信和锁机制正常工作的信心。如果测试需要,某些测试甚至可以在“并行”模式下顺序运行。
要在构建后但在安装之前运行并行回归测试,请在顶级目录中键入
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
如果您在文档中发现任何不正确的内容、与您对特定功能的体验不符的内容或需要进一步说明的内容,请使用此表单报告文档问题。