2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1

31.3. 变体比较文件 #

由于部分测试的输出结果具有环境依赖性,我们提供了指定替代的期望结果文件的方法。每个回归测试都可以有多个比较文件,用于展示不同平台上的可能结果。有两种独立的机制可以决定为每个测试使用哪个比较文件。

第一种机制允许为特定平台选择比较文件。有一个映射文件 src/test/regress/resultmap,它定义了为每个平台使用哪个比较文件。要消除特定平台上无谓的测试失败,您首先需要选择或创建一个变体结果文件,然后向 resultmap 文件添加一行。

映射文件中的每一行格式如下:

testname:output:platformpattern=comparisonfilename

测试名称就是特定回归测试模块的名称。输出值指示要检查哪个输出文件。对于标准的回归测试,这总是 out。该值对应于输出文件的扩展名。平台模式是 Unix 工具 expr 风格的模式(即,一个以隐式 ^ 锚定开头的正则表达式)。它与 config.guess 打印出的平台名称进行匹配。比较文件名是替代结果比较文件的基本名称。

例如:一些系统缺少可用的 strtof 函数,我们的解决方法导致 float4 回归测试出现舍入错误。因此,我们提供了一个变体比较文件 float4-misrounded-input.out,其中包含在这些系统上预期的结果。为了消除 Cygwin 平台上无谓的失败消息,resultmap 包含:

float4:out:.*-.*-cygwin.*=float4-misrounded-input.out

这将在 config.guess 的输出与 .*-.*-cygwin.* 匹配的任何机器上触发。 resultmap 中的其他行会在其他适当的平台上选择变体比较文件。

变体比较文件的第二种选择机制更加自动化:它只是在提供的多个比较文件之间使用最佳匹配。回归测试驱动脚本会同时考虑测试的标准比较文件 testname.out 和名为 testname_digit.out 的变体文件(其中 digit 是任何单个数字 0-9)。如果任何此类文件完全匹配,则测试被认为通过;否则,将使用生成最短 diff 的文件来创建失败报告。(如果 resultmap 包含特定测试的条目,则基本 testnameresultmap 中给出的替代名称。)

例如,对于 char 测试,比较文件 char.out 包含在 CPOSIX 区域设置中预期的结果,而文件 char_1.out 包含在许多其他区域设置中出现的排序结果。

最佳匹配机制是为了处理区域设置依赖的结果而设计的,但它可用于任何测试结果不能仅凭平台名称轻松预测的情况。此机制的局限性在于,测试驱动程序无法确定当前环境正确的变体是哪个;它只会选择看起来效果最好的变体。因此,最安全的方法是仅将此机制用于您愿意在所有上下文中都视为同样有效的变体结果。

提交更正

如果您在文档中发现任何不正确、与您对特定功能的经验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。