pg_regress 是一个用于执行回归测试的实用程序。
pg_regress 在 PostgreSQL 7.1 中添加。
用法
pg_regress 在运行回归测试时通常通过 PostgreSQL Makefile 间接执行。
pg_regress 用于测试,不会安装到构建目标目录。它通常也不在 PostgreSQL 包中分发。
环境变量
可以设置以下环境变量来影响 pg_regress 的行为;尤其是在通过 Makefile 间接调用它时:
PG_REGRESS_DIFF_OPTSPG_REGRESS_SOCK_DIRPG_HOSTPG_PORTINITDB_TEMPLATEPGCTLTIMEOUTCOMSPEC(仅限 Windows)PG_TEST_INITDB_EXTRA_OPTS(适用于 PostgreSQL 17 及更高版本)PG_TEST_USE_UNIX_SOCKETS(仅限 Windows)
源代码
pg_regress 源代码包含在以下文件中:
变更历史
- PostgreSQL 17
- PostgreSQL 16
- 输出现在符合 TAP 标准 (提交 558fff0a)
- PostgreSQL 13
- 已移除选项
--load-language(提交 751c63ce)
- 已移除选项
- PostgreSQL 9.6
- 允许多个
--temp-config选项 (提交 26fdff1b)
- 允许多个
- PostgreSQL 9.3
- PostgreSQL 9.1
- 选项
--multibyte重命名为--encoding(提交 f536d419)
- 选项
- PostgreSQL 8.4
pg_regress可以在构建树外执行 (提交 feae7856)
- PostgreSQL 8.2
- 从 shell 脚本转换为 C (提交 a38c85bd)
- PostgreSQL 8.1
- PostgreSQL 7.1
- 添加 (提交 6f64c2e5)
示例
为了演示 pg_regress 的用法,考虑一个包含以下文件以定义单个测试的目录:
$ find . . ./sql ./sql/testdemo.sql ./expected ./expected/testdemo.out $ cat sql/testdemo.sql SELECT 'Hello cheese'; $ cat expected/testdemo.out SELECT 'Hello world'; ?column? ------------- Hello world (1 row)
为了本次演示,输入文件 (sql/testdemo.sql) 已创建,使其实际输出与预期输出不匹配。
然后可以像这样执行 pg_regress:
$ ~/devel/postgresql/src/test/regress/pg_regress \ --bindir=/usr/local/pgsql/bin \ --temp-instance=/tmp/regress \ testdemo # initializing database system by running initdb # using temp instance on port 55312 with PID 3704855 not ok 1 - testdemo 11 ms 1..1 # 1 of 1 tests failed. # The differences that caused some tests to fail can be viewed in the file "/var/lib/pgsql/regress_test/regression.diffs". # A copy of the test summary that you see above is saved in the file "/var/lib/pgsql/regress_test/regression.out".
该目录现在将包含 pg_regress 执行运行的各种输出。
$ find . . ./results ./results/testdemo.out ./regression.diffs ./sql ./sql/testdemo.sql ./regression.out ./expected ./expected/testdemo.out ./log ./log/initdb.log ./log/postmaster.log
文件 results/testdemo.out 包含执行 sql/testdemo.sql 的实际结果,而 regression.diffs 包含预期/testdemo.out 与 results/testdemo.out 之间的差异。
diff -U3 /var/lib/pgsql/regress_test/expected/test.out /var/lib/pgsql/regress_test/results/test.out --- /var/lib/pgsql/regress_test/expected/test.out 2024-02-06 14:31:33.388790384 +0900 +++ /var/lib/pgsql/regress_test/results/test.out 2024-02-06 14:49:34.742656685 +0900 @@ -1,6 +1,6 @@ -SELECT 'Hello world'; - ?column? -------------- - Hello world +SELECT 'Hello cheese'; + ?column? +-------------- + Hello cheese (1 row)
参考资料
- PostgreSQL 文档: 运行测试
