Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

33.1. 运行测试 #

33.1.1. 对临时安装运行测试
33.1.2. 对现有安装运行测试
33.1.3. 其他测试套件
33.1.4. 语言环境和编码
33.1.5. 自定义服务器设置
33.1.6. 额外测试

回归测试可以针对已安装并正在运行的服务器运行,或在构建树中使用临时安装运行。此外,还有用于运行测试的“并行”和“顺序”模式。顺序方法单独运行每个测试脚本,而并行方法启动多个服务器进程以并行运行组测试。并行测试增加了进程间通信和锁定正常工作的信心。即使在“并行”模式中,某些测试也可能顺序运行,如果测试需要的话。

33.1.1. 对临时安装运行测试 #

要在构建后但在安装前运行并行回归测试,请在顶级目录中键入

make check

。(或者,您可以更改为 src/test/regress 并在此处运行命令。)并行运行的测试带有前缀“+”,顺序运行的测试带有前缀“-”。最后,您应该会看到类似


# All 213 tests passed.

的内容,否则会看到有关哪些测试失败的说明。在认定“失败”表示严重问题之前,请参阅下面的第 33.2 节

由于此测试方法运行临时服务器,因此如果您以 root 用户身份进行构建,它将不起作用,因为服务器不会以 root 身份启动。建议不要以 root 身份进行构建,或者在完成安装后执行测试。

如果您已配置 PostgreSQL 安装到已存在较旧 PostgreSQL 安装的位置,并且您在安装新版本之前执行 make check,您可能会发现测试失败,因为新程序尝试使用已安装的共享库。(典型症状是对未定义符号的抱怨。)如果您希望在覆盖旧安装之前运行测试,您需要使用 configure --disable-rpath 进行构建。但是,不建议您对最终安装使用此选项。

并行回归测试在您的用户 ID 下启动相当多的进程。目前,最大并发性是二十个并行测试脚本,这意味着四十个进程:每个测试脚本有一个服务器进程和一个 psql 进程。因此,如果您的系统对每个用户的进程数量实施限制,请确保此限制至少为五十左右,否则您可能会在并行测试中遇到看似随机的失败。如果您无法提高限制,您可以通过设置 MAX_CONNECTIONS 参数来减少并行程度。例如

make MAX_CONNECTIONS=10 check

最多同时运行十个测试。

33.1.2. 针对现有安装运行测试 #

要在安装后运行测试(请参阅第 17 章),请初始化数据目录并按照第 19 章中的说明启动服务器,然后键入

make installcheck

或进行并行测试

make installcheck-parallel

除非PGHOSTPGPORT环境变量另有指示,否则测试将期望在本地主机和默认端口号上联系服务器。测试将在名为regression的数据库中运行;将删除任何以此名称存在的数据库。

测试还将暂时创建一些群集范围的对象,例如角色、表空间和订阅。这些对象的名称将以regress_开头。请注意,不要对以这种方式命名的任何实际全局对象的安装使用installcheck模式。

33.1.3. 其他测试套件 #

make checkmake installcheck命令仅运行核心回归测试,该测试测试PostgreSQL服务器的内置功能。源代码分发包含许多其他测试套件,其中大多数与附加功能(例如可选过程语言)有关。

要运行适用于已选择构建的模块的所有测试套件(包括核心测试),请在构建树的顶部键入以下命令之一

make check-world
make installcheck-world

这些命令分别使用临时服务器或已安装的服务器运行测试,正如之前对make checkmake installcheck的解释。其他注意事项与之前对每种方法的解释相同。请注意,make check-world为每个测试模块构建一个单独的实例(临时数据目录),因此它需要比make installcheck-world更多的时间和磁盘空间。

在具有多个 CPU 内核且没有严格操作系统限制的现代机器上,您可以通过并行处理使事情变得更快。大多数 PostgreSQL 开发人员实际用于运行所有测试的秘诀类似于

make check-world -j8 >/dev/null

其中-j限制接近或略多于可用内核的数量。丢弃stdout会消除在您只想验证成功时不感兴趣的聊天。(如果发生故障,stderr消息通常足以确定在哪里进行更仔细的检查。)

或者,您可以在构建树的相应子目录中键入make checkmake installcheck来运行单个测试套件。请记住,make installcheck假定您已安装相关模块,而不仅仅是核心服务器。

可以通过这种方式调用的其他测试包括

  • 可选过程语言的回归测试。这些位于src/pl下。

  • contrib模块的回归测试,位于contrib下。并非所有contrib模块都有测试。

  • 界面库的回归测试,位于 src/interfaces/libpq/testsrc/interfaces/ecpg/test

  • 核心支持的身份验证方法测试,位于 src/test/authentication。(有关其他身份验证相关测试,请参见下文。)

  • 强调并发会话行为的测试,位于 src/test/isolation

  • 崩溃恢复和物理复制测试,位于 src/test/recovery

  • 逻辑复制测试,位于 src/test/subscription

  • 客户端程序测试,位于 src/bin 下。

使用 installcheck 模式时,这些测试将创建和销毁名称包含 regression 的测试数据库,例如 pl_regressioncontrib_regression。使用 installcheck 模式时,请注意不要使用任何以这种方式命名的非测试数据库。

其中一些辅助测试套件使用 第 33.4 节 中解释的 TAP 基础架构。仅当 PostgreSQL 使用选项 --enable-tap-tests 进行配置时,才会运行基于 TAP 的测试。建议在开发中使用,但如果没有合适的 Perl 安装,则可以省略。

某些测试套件默认情况下不会运行,原因可能是它们在多用户系统上运行不安全、需要特殊软件或资源密集。您可以通过将 make 或环境变量 PG_TEST_EXTRA 设置为以空格分隔的列表来决定另外运行哪些测试套件,例如

make check-world PG_TEST_EXTRA='kerberos ldap ssl load_balance'

当前支持以下值

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 侦听套接字。

wal_consistency_checking

src/test/recovery 下运行某些测试时使用 wal_consistency_checking=all。默认情况下未启用,因为它资源密集。

即使在 PG_TEST_EXTRA 中提到了当前构建配置不支持的功能的测试,也不会运行这些测试。

此外,src/test/modules 中还有测试,这些测试将由 make check-world 运行,但不会由 make installcheck-world 运行。这是因为它们安装了非生产扩展或有其他副作用,这些副作用对于生产安装来说是不希望的。如果您愿意,可以在其中一个子目录中使用 make installmake installcheck,但建议不要在非测试服务器上这样做。

33.1.4. 区域设置和编码 #

默认情况下,使用临时安装的测试使用当前环境中定义的区域设置和由 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 时,通过这种方式设置数据库编码才有意义;否则,编码会从区域设置中自动选择,并且指定与区域设置不匹配的编码会导致错误。

可以针对临时安装或现有安装设置数据库编码,尽管在后一种情况下它必须与安装的区域设置兼容。

33.1.5. 自定义服务器设置 #

在运行回归测试套件时要使用的自定义服务器设置可以在 PGOPTIONS 环境变量中设置(对于允许此设置的设置)

make check PGOPTIONS="-c debug_parallel_query=regress -c work_mem=50MB"

针对临时安装运行时,还可以通过提供预先编写的 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"

这可以用于启用附加日志记录、调整资源限制或启用额外的运行时检查,例如 debug_discard_caches

33.1.6. 额外测试 #

核心回归测试套件包含一些默认情况下不运行的测试文件,因为它们可能是平台相关的,或者运行时间很长。您可以通过设置变量 EXTRA_TESTS 来运行这些或其他额外的测试文件。例如,要运行 numeric_big 测试

make check EXTRA_TESTS=numeric_big