选择 打开 改范围 完整检索页

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
历史版本PostgreSQL 9.0 已于 2015 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

第 30 章 回归测试

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

30.1. 运行测试 #

回归测试既可以针对已经安装并正在运行的服务器执行,也可以在构建树中使用临时安装来执行。此外,运行测试时还有parallelsequential两种模式。顺序方式一次只运行一个测试脚本,而并行方式会启动多个服务器进程,以并行方式运行一组测试。并行测试能够确认进程间通信和锁定是否正常工作。

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

gmake check

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

=======================
 All 115 tests passed.
=======================

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

由于这种测试方法会运行一个临时服务器,如果你以 root 用户身份进行构建, 它将无法工作,因为服务器不会以 root 身份启动。推荐做法是不要以 root 身份构建;否则应在安装完成后再执行测试。

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

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

gmake MAX_CONNECTIONS=10 check

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

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

gmake installcheck

或者进行并行测试:

gmake installcheck-parallel

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

源码发布包中还包含针对可选过程语言以及部分contrib模块的回归测试。目前这些测试只能针对已安装的服务器使用。 要为所有已构建并安装的过程语言运行测试,请切换到构建树的src/pl目录并输入:

gmake installcheck

也可以在src/pl的任一子目录中这样做,只为一种过程语言运行测试。要为所有带有测试的contrib模块运行测试,请切换到构建树的contrib目录并输入:

gmake installcheck

contrib模块必须先构建并安装。也可以在contrib的某个子目录中这样做,只为一个模块运行测试。

源码发布包中还包含针对 Hot Standby 静态行为的回归测试。这些测试需要一个正在运行的主服务器和一个正在运行的备服务器,备服务器通过基于文件的日志传送或流复制接收来自主服务器的新 WAL 更改。这些服务器不会为你自动创建,其设置方法也不在本文档中介绍。请查阅文档中已有的各节,了解所需命令及相关问题。

首先在主服务器上创建一个名为"regression"的数据库:

psql -h primary -c "CREATE DATABASE regression"

接着,在主服务器的 regression 数据库中运行准备脚本src/test/regress/sql/hs_primary_setup.sql,并等待更改传播到备服务器,例如

psql -h primary -f src/test/regress/sql/hs_primary_setup.sql regression

现在确认测试者的默认连接是被测的备服务器,然后在回归目录中运行standbycheck目标:

cd src/test/regress
gmake standbycheck

还可以在主服务器上使用脚本src/test/regress/sql/hs_primary_extremes.sql生成一些极端行为,以便测试备服务器的行为。

后续版本可能会提供更多的自动化测试。

提交更正

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