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。 自 PostgreSQL 6.1 以上開始, 這個回歸測試包含在每個正式發布版本裡。

26.1. 運行測試

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

制作之後和安裝之前運行回歸測試,你可以在頂級目錄鍵入

gmake check

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

======================
 All 93 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

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

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

並行的回歸測試會在你的用戶 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

該測試將與在本地主機和缺省端口號上運行的服務器進行聯接, 除非你用PGHOSTPGPORT環境變量設置為其它值。