↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本PostgreSQL 8.0 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 26 章 回归测试

回归测试是针对PostgreSQL中 SQL 实现的一套全面测试。它们既测试标准 SQL 操作,也测试 PostgreSQL的扩展能力。

26.1. 运行测试 #

回归测试既可以针对已经安装并正在运行的服务器执行,也可以在构建树中使用临时安装来执行。此外,运行测试时还有“parallel”和“sequential”两种模式。顺序方式一次只运行一个测试脚本,而并行方式会启动多个服务器进程,以并行方式运行一组测试。并行测试能够确认进程间通信和锁定是否正常工作。由于历史原因,顺序测试通常针对已有安装运行,而并行方式通常针对临时安装运行,但这并没有技术上的必然性。

要在构建完成后、安装之前运行回归测试,请在顶层目录中输入:

gmake check

(也可以切换到src/test/regress并在那里运行此命令。)这会首先构建若干辅助文件(例如示例用户定义触发器函数),然后运行测试驱动脚本。结束时应该会看到类似下面的结果:

======================
 All 96 tests passed.
======================

否则会显示哪些测试失败的说明。在假定“失败”代表严重问题之前,请先阅读下面的第 26.2 节。

由于这种测试方法会运行一个临时服务器,当你以 root 用户身份运行时它 将无法工作(因为服务器不会以 root 身份启动)。如果你已经以 root 身份 完成了构建,也不必从头再来。只需让回归测试目录可被其他用户写入,以 该用户身份登录,然后重新启动测试即可。例如

root# chmod -R a+w src/test/regress
root# chmod -R a+w contrib/spi
root# su - joeuser
joeuser$ cd top-level build directory
joeuser$ gmake check

(这里唯一可能的“安全风险”是其他用户可能在你不知情的情况 下篡改回归测试的结果。在管理用户权限时请运用常识。)

或者,在安装完成后再运行测试。

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

并行回归测试会在你的用户 ID 下启动相当多的进程。目前最大并发度为二十个并行测试脚本,也就是六十个进程:每个测试脚本都有一个服务器进程、一个psql进程,而且psql通常还有一个 shell 父进程。因此,如果你的系统对每个用户可创建的进程数施加限制,请确保该限制至少有七十五个左右,否则并行测试中可能会出现看似随机的失败。如果无法提高该限制,可以通过设置MAX_CONNECTIONS参数来降低并行度。例如:

gmake MAX_CONNECTIONS=10 check

这样最多同时运行十个测试。

在某些系统上,默认的与 Bourne 兼容的 shell(/bin/sh)在 需要并行管理太多子进程时会出问题,这可能导致并行测试挂起或失败。在这种 情况下,可以在命令行上指定另一个与 Bourne 兼容的 shell,例如:

gmake SHELL=/bin/ksh check

如果找不到没有问题的 shell,也可以像上面那样通过限制连接数来绕过该问题。

要在安装后运行测试 (见 第 14 章),请初始化一个数据区域并启动服务器如 第 16 章所述,然后输入:

gmake installcheck

或者进行并行测试:

gmake installcheck-parallel

除非由PGHOST和PGPORT环境变量另行指定,测试将期望在本地主机和默认端口上连接服务器。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。