33.3. 变体比较文件 #
由于某些测试天生会产生依赖环境的结果,我们提供了指定备用“预期”结果文件的方法。每个回归测试都可以有多个比较文件,用来展示不同平台上的可能结果。对于每个测试应使用哪个比较文件,有两种相互独立的判定机制。
第一种机制允许针对特定平台选择比较文件。有一个映射文件
src/test/regress/resultmap,用于定义每个平台应使用哪个比较文件。要为某个特定平台消除虚假的测试“失败”,你需要先选择或创建一个变体结果文件,然后在 resultmap
文件中增加一行。
映射文件中的每一行都采用如下形式:
testname:output:platformpattern=comparisonfilename
测试名就是相应回归测试模块的名称。输出值指明要检查哪个输出文件。对标准回归测试而言,这里始终是 out。该值对应于输出文件的扩展名。平台模式是 Unix 工具 expr 风格的模式(也就是在开头隐含^锚点的正则表达式)。它会与 config.guess 打印出的平台名进行匹配。比较文件名则是替代结果比较文件的基名。
例如,有些系统缺少可用的 strtof 函数,而我们的变通办法会在 float4 回归测试中造成舍入错误。因此,我们提供了一个变体比较文件 float4-misrounded-input.out,其中包含这些系统上应期望的结果。为了让虚假的“失败”消息不再出现在 HP-UX 10 平台上,resultmap 中包含:
float4:out:hppa.*-hp-hpux10.*=float4-misrounded-input.out
这会在任何 config.guess 输出匹配
hppa.*-hp-hpux10.* 的机器上触发。resultmap 中的其他行则会在其他适用平台上选择该变体比较文件。
第二种用于选择变体比较文件的机制更加自动化:它只是在多个提供的比较文件中选取“最佳匹配”。回归测试驱动脚本既考虑某个测试的标准比较文件 ,也考虑名为
testname.out
的变体文件(其中 testname_digit.outdigit 可以是任一单个数字
0-9)。如果其中任何一个文件完全匹配,就认为测试通过;否则,会使用生成最短 diff 的那个文件来创建失败报告。(如果 resultmap 为该特定测试包含一项,那么基础 testname 就是
resultmap 中给出的替代名称。)
例如,对于 char 测试,比较文件
char.out 包含在 C 和
POSIX 区域设置中应当出现的结果,而文件
char_1.out 则包含在许多其他区域设置中出现的排序结果。
最佳匹配机制原本是为了解决依赖区域设置的结果问题,但它也可以用于任何仅凭平台名无法轻易预测测试结果的场景。该机制的一个局限是,测试驱动器无法判断哪一个变体对当前环境才真正“正确”;它只会选择看起来最合适的那个。因此,最安全的做法是只对那些你愿意在所有上下文中都视为同样有效的变体结果使用这种机制。
报告文档问题
阅读 上游文档. 通过 PostgreSQL 文档反馈表单.