第三十四章. 蜕变测试

内容
蜕变测试环境
蜕变测试过程
蜕变分析
平台相关的比较文件
蜕变测试指导和分析.
PostgreSQL 蜕变测试是由一套复杂完整的测试,用来测试嵌入在 PostgreSQL 里的的SQL实现.它同时测试标准 SQL 操作和 PostgreSQL 的扩展SQL.

蜕变测试有两种不同的运行方式:"串行"方式和"并行"方式.串行方式顺序运行每个测试脚本,而并行方式同时启动多个服务器进程以并行运行多组测试.并行测试使我们对进程内部通讯和锁的正确工作有足够的信心.另一个主要区别是串行方式测试过程使用一套已经安装了的 postmaster,而并行测试过程测试一套已经制作完成但是还没有安装的系统.(并行测试脚本实际上安装到一个临时目录然后在那里启动一个私有的 postmaster.)

有一些正确安装并且具有完整功能的 PostgreSQL 可能会在蜕变测试中失效,这些主要是因为浮点数的形式和时区支持的问题.目前的测试只是简单的用 "diff" 算法进行评估,因而对一些细小的系统区别很敏感.当一项测试报告"failed"("失败")时,只要检查一下预期和实际的结果,你就会发现区别区别并不大.

蜕变测试最初是由 Jolly Chen 和 Andrew Yu 开发的,并且由 Marc Fournier 和 Thomas Lockhart 做了大量的修改/封装。从 PostgreSQLv6.1 开始,每个官方发布的版本都带有蜕变测试.

蜕变测试环境

下面的蜕变测试做了如下假设 (除注明的以外): 通常,蜕变测试应该以 postgres 用户身份运行,因为 'src/test/regress' 目录和子目录是由 postgres 所有的.如果你要以其他用户身份运行蜕变测试,那么该用户应该对目录 'src/test/regress' 有写权限.

以前必须把系统时区设置为 PST 运行 postmaster,不过现在不需要这样了。你可以在你自己的正常的 postmaster 配置里运行蜕变测试。测试脚本将设置 PGTZ 环境变量以确保与时区无关的测试将产生预期的结果。不过,你的系统必须提供对 PST8PDT 时区的库支持,否则时区无关测试将失败。要证实你的系统的确包括这个支持,键入:

setenv TZ PST8PDT
date
上面的 "date" 命令应该返回当前系统在 PST8PDT 时区的时间.如果 PST8PDT 的数据库不可用,那么你的系统应该以 GMT 返回时间.如果 PST8PDT 时区不可获得,你可以显式设置时区规则:
setenv PGTZ PST8PDT7,M04.01.0,M10.05.03
蜕变测试的目录布局如下:
表 34-1. 目录布局
 

目录 描述
目录 描述
input
利用 make all 将 .source 文件转换成的 'sql' 子目录里面的一些 .sql 文件
output
利用 make all 将 .source 文件转换成的在 expected 子目录里面的 .out 文件
sql
用于执行蜕变测试的 .sql 文件
expected
代表我们*期望看到*的结果的 .out 文件 
results
表示结果的*实际*样子的 .out 文件同时还用于表拷贝测试的临时存储空间
tmp_check 并行测试脚本创建的临时安装目录