迴歸測試可以針對已安裝且正在執行的伺服器執行,也可以使用建置樹中的臨時安裝。此外,測試的執行模式有「平行」和「循序」兩種。循序方法會單獨執行每個測試腳本,而平行方法會啟動多個伺服器進程以平行執行多組測試。平行測試增加了對進程間通訊和鎖定正常運作的信心。某些測試即使在「平行」模式下也可能會循序執行,以防測試需要這麼做。
若要在建置後但在安裝前執行平行迴歸測試,請在最上層目錄中輸入
make check
(或者您可以變更到 src/test/regress
並在那裡執行命令。)平行執行的測試會加上「+」前置詞,循序執行的測試則會加上「-」前置詞。最後,您應該會看到類似這樣的內容
# All 213 tests passed.
或者,如果沒有通過測試,則會顯示相關說明。在假設「失敗」代表嚴重的問題之前,請參閱下方的第 31.2 節。
由於此測試方法會執行臨時伺服器,因此如果您以 root 使用者身分建置,將無法運作,因為伺服器不會以 root 身分啟動。建議的程序是不以 root 身分進行建置,或者在完成安裝後執行測試。
如果您已將 PostgreSQL 設定為安裝到舊版 PostgreSQL 安裝已存在的指定位置,並且在安裝新版本之前執行 make check
,您可能會發現測試失敗,因為新程式嘗試使用已安裝的共用程式庫。(典型的症狀是抱怨未定義的符號。)如果您希望在覆寫舊安裝之前執行測試,則需要使用 configure --disable-rpath
進行建置。但是,不建議您將此選項用於最終安裝。
平行迴歸測試會在您的使用者 ID 下啟動相當多的進程。目前,最大的並行度是二十個平行測試腳本,這表示四十個進程:每個測試腳本都有一個伺服器進程和一個 psql 進程。因此,如果您的系統對每個使用者的進程數量強制執行限制,請確保此限制至少為五十左右,否則您可能會在平行測試中遇到隨機性的故障。如果您無法提高限制,則可以透過設定 MAX_CONNECTIONS
參數來減少並行度。例如
make MAX_CONNECTIONS=10 check
同時執行的測試不超過十個。
若要在安裝後執行測試(請參閱第 17 章),請依照第 18 章中的說明,初始化資料目錄並啟動伺服器,然後輸入
make installcheck
或平行測試
make installcheck-parallel
除非 PGHOST
和 PGPORT
環境變數另有指示,否則測試預期會連線到本機主機和預設連接埠號碼上的伺服器。測試將在名為 regression
的資料庫中執行;任何以此名稱存在的資料庫都將被捨棄。
測試也會暫時建立一些叢集範圍的物件,例如角色、表空間和訂閱。這些物件的名稱會以 regress_
開頭。請注意,不要將 installcheck
模式與任何具有以這種方式命名的實際全域物件的安裝一起使用。
make check
和 make installcheck
命令只執行「核心」迴歸測試,這些測試會測試 PostgreSQL 伺服器的內建功能。原始碼發佈包含許多額外的測試套件,其中大多數與附加功能(例如選用的程序語言)有關。
若要執行所有適用於已選取要建置的模組的測試套件,包括核心測試,請在建置樹的最上層輸入下列其中一個命令
make check-world make installcheck-world
這些指令會分別使用暫時伺服器或已安裝的伺服器來執行測試,就像先前針對 make check
和 make installcheck
所解釋的一樣。其他考量與先前針對每種方法所解釋的相同。請注意,make check-world
會為每個測試的模組建立一個獨立的實例(暫時資料目錄),因此它比 make installcheck-world
需要更多的時間和磁碟空間。
在具有多個 CPU 核心且沒有嚴格作業系統限制的現代機器上,您可以使用平行處理來大幅加快速度。大多數 PostgreSQL 開發人員實際用於執行所有測試的配方類似於
make check-world -j8 >/dev/null
,其中 -j
限制接近或略高於可用核心的數量。捨棄 stdout 會消除在您只想驗證成功時不感興趣的雜訊。(如果發生失敗,stderr 訊息通常足以確定要在何處仔細查看。)
或者,您可以在建置樹的適當子目錄中輸入 make check
或 make installcheck
來執行個別的測試套件。請記住,make installcheck
假設您已安裝相關模組,而不僅僅是核心伺服器。
可以透過這種方式調用的其他測試包括
選用程序語言的回歸測試。這些位於 src/pl
下。
contrib
模組的回歸測試,位於 contrib
下。並非所有 contrib
模組都有測試。
介面函式庫的回歸測試,位於 src/interfaces/libpq/test
和 src/interfaces/ecpg/test
中。
核心支援的驗證方法的測試,位於 src/test/authentication
中。(有關其他驗證相關測試,請參閱下文。)
強調並行連線行為的測試,位於 src/test/isolation
中。
用於崩潰恢復和實體複寫的測試,位於 src/test/recovery
中。
用於邏輯複寫的測試,位於 src/test/subscription
中。
用戶端程式的測試,位於 src/bin
下。
使用 installcheck
模式時,這些測試將建立和銷毀名稱包含 regression
的測試資料庫,例如 pl_regression
或 contrib_regression
。請注意,不要將 installcheck
模式與任何具有以這種方式命名的非測試資料庫的安裝一起使用。
其中一些輔助測試套件使用 第 31.4 節 中解釋的 TAP 基礎架構。僅當使用 --enable-tap-tests
選項設定 PostgreSQL 時,才會執行基於 TAP 的測試。建議用於開發,但如果沒有合適的 Perl 安裝,則可以省略。
某些測試套件預設不執行,原因可能是它們在多使用者系統上執行不安全、需要特殊的軟體或資源密集。您可以透過將 make
或環境變數 PG_TEST_EXTRA
設定為以空白分隔的清單來決定要額外執行哪些測試套件,例如
make check-world PG_TEST_EXTRA='kerberos ldap ssl load_balance libpq_encryption'
目前支援下列值
kerberos
在 src/test/kerberos
下執行測試套件。這需要 MIT Kerberos 安裝並開啟 TCP/IP 監聽連接口。
ldap
在 src/test/ldap
下執行測試套件。這需要 OpenLDAP 安裝並開啟 TCP/IP 監聽連接口。
ssl
在 src/test/ssl
下執行測試套件。這會開啟 TCP/IP 監聽連接口。
load_balance
執行測試 src/interfaces/libpq/t/004_load_balance_dns.pl
。這需要編輯系統 hosts
檔案並開啟 TCP/IP 監聽連接口。
libpq_encryption
執行測試 src/interfaces/libpq/t/005_negotiate_encryption.pl
。這會開啟 TCP/IP 監聽連接口。如果 PG_TEST_EXTRA
也包含 kerberos
,則會啟用需要 MIT Kerberos 安裝的其他測試。
wal_consistency_checking
在 src/test/recovery
下執行某些測試時,使用 wal_consistency_checking=all
。預設不啟用,因為它資源密集。
xid_wraparound
在 src/test/modules/xid_wraparound
下執行測試套件。預設不啟用,因為它資源密集。
即使在 PG_TEST_EXTRA
中提及,也不會執行目前建置設定不支援的功能的測試。
此外,src/test/modules
中有一些測試將由 make check-world
執行,但不會由 make installcheck-world
執行。這是因為它們安裝了非生產擴充功能或具有其他副作用,這些副作用被認為對於生產安裝是不希望的。如果您願意,可以在其中一個子目錄中使用 make install
和 make installcheck
,但不建議對非測試伺服器執行此操作。
預設情況下,使用暫時安裝的測試會使用目前環境中定義的地區以及由 initdb
確定的相應資料庫編碼。透過設定適當的環境變數來測試不同的地區可能會很有用,例如
make check LANG=C make check LC_COLLATE=en_US.utf8 LC_CTYPE=fr_CA.utf8
由於實作原因,設定 LC_ALL
對於此目的無效;所有其他與地區相關的環境變數都有效。
當針對現有安裝進行測試時,地區由現有的資料庫叢集決定,並且無法為測試執行單獨設定。
您也可以透過設定變數 ENCODING
來明確選擇資料庫編碼,例如
make check LANG=C ENCODING=EUC_JP
以這種方式設定資料庫編碼通常只有在地區為 C 時才有意義;否則,編碼會從地區自動選擇,並且指定與地區不符的編碼將導致錯誤。
資料庫編碼可以針對針對暫時或現有安裝的測試進行設定,但在後一種情況下,它必須與安裝的地區相容。
在執行測試套件時,有多種方法可以使用自訂伺服器設定。這對於啟用其他記錄、調整資源限制或啟用額外的執行階段檢查(例如 debug_discard_caches)可能很有用。但請注意,並非所有測試都可以期望在使用任意設定的情況下順利通過。
可以使用環境變數 PG_TEST_INITDB_EXTRA_OPTS
將額外的選項傳遞到在測試設定期間內部運行的各種 initdb
指令。例如,要使用啟用的檢查總和以及自訂的 WAL 段大小和 work_mem
設定來執行測試,請使用
make check PG_TEST_INITDB_EXTRA_OPTS='-k --wal-segsize=4 -c work_mem=50MB'
對於核心回歸測試套件和由 pg_regress
驅動的其他測試,也可以在 PGOPTIONS
環境變數中設定自訂的執行階段伺服器設定(對於允許此操作的設定),例如
make check PGOPTIONS="-c debug_parallel_query=regress -c work_mem=50MB"
(這利用了 libpq 提供的功能;有關詳細資訊,請參閱 options。)
在針對暫時性安裝執行時,也可以透過提供預先寫好的 postgresql.conf
來設定自訂設定。
echo 'log_checkpoints = on' > test_postgresql.conf echo 'work_mem = 50MB' >> test_postgresql.conf make check EXTRA_REGRESS_OPTS="--temp-config=test_postgresql.conf"
核心迴歸測試套件包含一些預設情況下不執行的測試檔案,因為它們可能與平台相關或需要很長時間才能執行。 您可以透過設定變數 EXTRA_TESTS
來執行這些或其他額外的測試檔案。 例如,要執行 numeric_big
測試
make check EXTRA_TESTS=numeric_big
如果您在文件中看到任何不正確、與您使用特定功能的經驗不符或需要進一步澄清的地方,請使用此表單來回報文件問題。