Chapter 26. 回归测试

Table of Contents
26.1. 运行测试
26.2. 测试评估
26.2.1. 错误信息差别
26.2.2. 区域差别
26.2.3. 日期和时间差别
26.2.4. 浮点数差别
26.2.5. 行顺序差别
26.2.6. "随机"测试
26.3. 平台相关的比较文件

回归测试是一套复杂完整的测试, 用来测试嵌入在 PostgreSQL 里的的 SQL 实现。 它同时测试标准 SQL 操作和PostgreSQL的扩展SQL。 自 PostgreSQL 6.1 以上开始, 这个回归测试包含在每个正式发布版本里。

26.1. 运行测试

回归测试可以就一套已经安装好并且在运行的服务器进行测试, 也可以就制作树里面临时安装的服务器进行测试。 详细些说,有"并行""串行"运行测试之分。 串行模式顺序运行每个测试,而并行模式启动多个服务器进程,并行地运行一组测试。 并行测试使我们对进程内部通讯和锁的正确工作有足够的信心。 由于历史原因,串行测试通常对一个现存的安装进行测试,而并行测试是"独立"的,不过这么做没有什么技术原因。

制作之后和安装之前运行回归测试,你可以在顶级目录键入

gmake check

(或者你可以进入 src/test/regress 然后在那里运行命令。) 这样将先制作几个辅助文件,比如一些用户定义的触发器函数,然后再运行测试驱动脚本。 最后你会看到类似下面的东西

======================
 All 93 tests passed.
======================

或者是一些关于某项测试失败的信息。参阅下面的 Section 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

(这里唯一可能的"安全隐患"就是那个用户可能会背着你修改回归测试的结果。用你的常识管理用户权限。)

如果不是上面那样,安装后就可以运行测试.

并行的回归测试会在你的用户 ID 下启动相当多的进程。 目前,最大的并发数是 20 给并行测试脚本,这意味着 60 个进程: 一个服务器进程,一个psql以及通常还有一个 shell 父进程用于每个测试脚本的psql。 因此,如果你的系统有每用户的进程数限制,那么请确保这个限制至少是 75,否则你就可能在并行测试时看到随机出现的失败。 如果你没有办法提升该限制,那么你可以通过设置 MAX_CONNECTIONS 参数,把大的并行测试程度降低。

在某些系统上,缺省的 Bourne 兼容的 shell(/bin/sh)在管理太多并行的子进程的时候会出乱子。 这可能导致并行测试锁住或者失败。 出现这种情况时,请在命令行上声明另外一个 Bourne 兼容的 shell,比如:

gmake SHELL=/bin/ksh check

如果没有可以替换的 shell,那么你可以象上面那样通过限制连接的个数来绕开。

安装后((参阅 Chapter 14)运行测试, 初始化一个数据区然后启动服务器,像我们在 Chapter 16 里面描述的那样,然后键入

gmake installcheck

该测试将与在本地主机和缺省端口号上运行的服务器进行联接, 除非你用PGHOSTPGPORT环境变量设置为其它值。