回归测试是一个用于验证PostgreSQL在你的系统上是否按照开发人员设想的那样运行的测试套件,是PostgreSQL的测试方法之一。
回归测试,需要事先定义好测试脚本(通常是SQL脚本,放在sql目录中),同时定义好调用执行测试脚本的预期正确输出文件(通常放在expected目录中)。
测试使用make check或make installcheck进行,它会通过pg_regress程序调用sql目录中的SQL,并收集输出结果(通常放到results目录中),最后pg_regress会对expected目录和results目录中的文件使用diff进行一一比较。
如果比较发现文件内容不一致,会将不一致的结果输出到result/results目录下的regression.diffs文件中,并返回这个TEST CASE failed。
下面介绍两种执行的方式。
一、编译源码并进行测试
1、因PG不能在root用户启动,编译时不能用root用户编译,否则很多目录数据库用户没有权限;
2、安装编译相关组件
/* 1. 安装编译工具gcc*/
# yum install gcc
/* 2. 安装wget */
# yum install wget
/* 3. 安装rpm打包工具rpm-build */
# yum install rpm-build
/* 4. 安装postgresql编译依赖组件 */
# yum install bison flex perl-ExtUtils-Embed perl python-devel tcl-devel readline-devel openssl-devel krb5-devel e2fsprogs-devel libxml2-devel libxslt-devel pam-devel libuuid-devel openldap-devel openjade opensp docbook-dtds
# yum install libicu-devel gettext
/* 5. centos 7 下编译,需要安装systemd-devel */
# yum install systemd-devel
3、编译源码:
export PGHOME=/home/appusr/PostgreSQL/pgsql-10
注:PGHOME为PostgreSQL的安装路径。
CenOS7如下:
./configure –enable-rpath –prefix=$PGHOME –includedir=$PGHOME/include –mandir=$PGHOME/share/man –datadir=$PGHOME/share –with-icu –with-perl –with-python –with-tcl –with-tclconfig=/usr/lib64 –with-openssl –with-pam –with-gssapi –with-includes=/usr/include –with-libraries=/usr/lib64 –enable-nls –enable-dtrace –with-uuid=e2fs –with-libxml –with-libxslt –with-ldap –with-selinux –with-systemd –docdir=$PGHOME/doc –htmldir=$PGHOME/doc/html –enable-debug
CenOS6如下:
./configure –enable-rpath –prefix=$PGHOME –includedir=$PGHOME/include –mandir=$PGHOME/share/man –datadir=$PGHOME/share –with-perl –with-python –with-tcl –with-tclconfig=/usr/lib64 –with-openssl –with-pam –with-gssapi –with-includes=/usr/include –with-libraries=/usr/lib64 –enable-nls –with-uuid=e2fs –with-libxml –with-libxslt –with-ldap –docdir=$PGHOME/doc –htmldir=$PGHOME/doc/html –enable-debug
make -j4 all
4、执行regress测试工程代码:
make -C /home/pg11/source/postgresql-11.1/src/test/regress check
二、安装数据库并进行测试
如果已经有数据库的安装包,可以直接进行安装操作;如果需要在线下载安装包的话,按如下方式执行:
首先要保证机器能够连接到网络,然后执行以下操作:
1)下载PostgreSQL:yum install -y https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-6-x86_64/pgdg-centos11-11-2.noarch.rpm
此命令下载的是PostgreSQL11,如要下载其他版本,可参考该连接:https://yum.postgresql.org/repopackages.php
2)下载测试所需要的组件:yum install postgresql11*
所有下载的组件都在目录 /usr/pgsql-11 下
3)转到目录 /usr/pgsql-11/lib/test/regress 下,执行以下语句即可:
./pg_regress –host=127.0.0.1 –port=5432 –user=test –inputdir=. –outputdir=. –schedule=serial_schedule
注意事项
如果使用临时安装(即编译)的测试方式,pg的端口都是hard code的,使用前需要确认这些端口的占用情况。
如果使用已安装的测试方式,测连接数据库时,会使用coord的默认端口5432。所以必须使用默认安装的数据库集群才能使用已安装方法的回归测试。
自做成test case的方法
自做成test case的方法,可分为如下3步:
1、在sql/目录下加入自做成的test case的sql脚本。
2、在expected/目录下加入自做成test case的sql脚本的正确结果。需要注意的是,由于判断是使用diff命令,因此即使空格符也会导致diff的结果失败。所以,做成expected目录下的结果文件需要十分注意。
3、在parallel_schedule/ serial_schedule文件中添加调用sql脚本。