Chapter 26. 回歸測試

Table of Contents
26.1. 執行測試
26.2. 測試評估
26.2.1. 錯誤訊息差別
26.2.2. 區域差別
26.2.3. 日期和時間差別
26.2.4. 浮點數差別
26.2.5. 行順序差別
26.2.6. "隨機"測試
26.3. 平台相關的比較文件

回歸測試是一套複雜完整的測試, 用來測試嵌入在 PostgreSQL 裡的的 SQL 實現。 它同時測試標準 SQL 操作和PostgreSQL的擴展SQL。

26.1. 執行測試

回歸測試可以就一套已經安裝好並且在執行的伺服器進行測試, 也可以就製作樹裡面臨時安裝的伺服器進行測試。 詳細些說,有"並行""串行"執行測試之分。 串行模式順序執行每個測試,而並行模式啟動多個伺服器進程,並行地執行一組測試。 並行測試使我們對進程內部通訊和鎖的正確工作有足夠的信心。 由於歷史原因,串行測試通常對一個現存的安裝進行測試,而並行測試是"獨立"的,不過這麼做沒有什麼技術原因。

製作之後和安裝之前執行回歸測試,您可以在頂級目錄鍵入

gmake check

(或者您可以進入 src/test/regress 然後在那裡執行命令。) 這樣將先製作幾個輔助文件,比如一些用戶定義的觸發器函數,然後再執行測試驅動腳本。 最後您會看到類似下面的東西

======================
 All 96 tests passed.
======================

或者是一些關於某項測試失敗的訊息。先看看下面的 Section 26.2 然後再想想一個"失敗"是否代資料表嚴重的錯誤。

因為這個測試方法執行臨時的伺服器,所以如果您是 root 用戶, 那這個方法不能執行(伺服器不能以 root 身份啟動)。 如果您已經以 root 身份製作了,您就什麼也幹不了。 這時候您應該把測試目錄的權限變成某個用戶可以寫, 然後以那個用戶身份登陸,再開始測試。比如

root# chmod -R a+w src/test/regress
root# chmod -R a+w contrib/spi
root# su - joeuser
joeuser$ cd top-level build directory
joeuser$ gmake check

(這裡唯一可能的"安全隱患"就是那個用戶可能會背著您修改回歸測試的結果。用您的常識管理用戶權限。)

如果不是上面那樣,安裝後就可以執行測試.

如果您配置 PostgreSQL 安裝到一個原來安裝有老的 PostgreSQL 的目錄裡,然後在安裝新版本之前執行 gmake check, 那麼您可能發現測試失敗,因為新程序試圖使用已經存在的共享庫。 (典型的症狀是抱怨未定義的符號。) 如果您想在覆蓋老版本之間執行測試,那麼您需要帶著 configure --disable-rpath 製作。 不過,我們不建議您使用這個選項編譯作為最終安裝的資料庫。

並行的回歸測試會在您的用戶 ID 下啟動相當多的進程。 目前,最大的並發數是 20 給並行測試腳本,這意味著 60 個進程: 一個伺服器進程,一個psql以及通常還有一個 shell 父進程用於每個測試腳本的psql。 因此,如果您的系統有每用戶的進程數限制,那麼請確保這個限制至少是 75,否則您就可能在並行測試時看到隨機出現的失敗。 如果您沒有辦法提升該限制,那麼您可以透過設置 MAX_CONNECTIONS 參數,把大的並行測試程度降低。

在某些系統上,預設的 Bourne 兼容的 shell(/bin/sh)在管理太多並行的子進程的時候會出亂子。 這可能導致並行測試鎖住或者失敗。 出現這種情況時,請在命令行上聲明另外一個 Bourne 兼容的 shell,比如:

gmake SHELL=/bin/ksh check

如果沒有可以替換的 shell,那麼您可以像上面那樣透過限制連接的個數來繞開。

安裝後((參閱 Chapter 14)執行測試, 初始化一個資料區然後啟動伺服器,像我們在 Chapter 16 裡面描述的那樣,然後鍵入

gmake installcheck

或者是跑一個並行測試

gmake installcheck-parallel

該測試將與在本地主機和預設連接埠號上執行的伺服器進行連線, 除非您用PGHOSTPGPORT環境變量設置為其它值。