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 包含在許多其他區域設定中出現的排序結果。

最佳匹配機制是為了處理區域設定依賴的結果而設計的,但它可用於任何測試結果不能僅憑平臺名稱輕鬆預測的情況。此機制的侷限性在於,測試驅動程式無法確定當前環境正確的變體是哪個;它只會選擇看起來效果最好的變體。因此,最安全的方法是僅將此機制用於您願意在所有上下文中都視為同樣有效的變體結果。

提交更正

如果您在文件中發現任何不正確、與您對特定功能的經驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。