PostgreSQL回歸測試--自定義測試腳本

本文主要介紹PostgreSQL回歸測試自定義測試腳本的方法。


文件格式

先介紹需要用到的幾個文件:

調(diào)度文件

· parallel_schedule

· serial_schedule

這兩種文件的格式包括空格行,以“#”開頭的行,以“test:”開頭的行,以“ignore:”開頭的行。其中,以“#”開頭的行一般是注釋;以“test:”開頭的行定義了需要運行的測試用例;以“ignore:”開頭的行,pg_regress仍然會去執(zhí)行這些用例,但是如果有錯誤的話會被忽略。

以“ignore:”開頭的行,一行只能定義一個用例;而已“test:”開頭的行,一行最多定義20個用例,不同用例名之間以空格隔開。如果我們在“test:”行中指定了多個用例,那么這些測試將以并行模式(parallel_schedule)運行,如果只有一個用例,那么它將以串行模式(serial_schedule)運行。當(dāng)我們用“make check”命令的時候,調(diào)度的是parallel_schedule文件,而“make installcheck”調(diào)度的是serial_schedule文件。

新增一個回歸測試的時候,需要分別在parallel_schedule和serial_schedule中都加上該測試的名字。

回歸測試的SQL代碼和預(yù)期輸出

· sql/

該目錄中包含了回歸測試要運行的一些sql腳本,回歸測試把每一個文件都當(dāng)做一個獨立的測試項,所以通常我們一個sql文件只測試一種特性。

· excepted/

該目錄包含了所有回歸測試的期望輸出文件*.out,這些文件不僅包含了查詢語句的輸出結(jié)果,還包含了上述提到的sql文件的所有內(nèi)容(包括注釋)。

· results/

該目錄中起初是沒有任何文件的,當(dāng)我們運行完回歸測試之后,才會生成一批*.out文件。

Tips:當(dāng)添加新的測試用例時,也可以copy這里的文件放到excepted/目錄下。


樣例

下面是自定義一個回歸測試的具體例子。

· sql/simple.sql

下面這個腳本是將要被運行的回歸測試。

--

-- A simple brain-dead test to show how one is written

--

-- Create a table

CREATE TABLE simple_test (a integer, b text);

-- Add a couple of rows

COPY simple_test FROM stdin;

1 foo

2 bar

3 baz

4 floob

\.

-- Select it back out in reverse order

SELECT * FROM simple_test ORDER BY a DESC;

-- remove a row

DELETE FROM simple_test WHERE length(b) > 3;

-- Select again

SELECT * FROM simple_test ORDER BY a DESC;

-- Clean up

DROP TABLE simple_test;


· expected/simple.out

該文件是上面回歸測試腳本的期望輸出。

--

-- A simple brain-dead test to show how one is written

--

-- Create a table

CREATE TABLE simple_test (a integer, b text);

-- Add a couple of rows

COPY simple_test FROM stdin;

-- Select it back out in reverse order

SELECT * FROM simple_test ORDER BY a DESC;

a |? b?

---+-------

4 | floob

3 | baz

2 | bar

1 | foo

(4 rows)

-- remove a row

DELETE FROM simple_test WHERE length(b) > 3;

-- Select again

SELECT * FROM simple_test ORDER BY a DESC;

a |? b?

---+-----

3 | baz

2 | bar

1 | foo

(3 rows)

-- Clean up

DROP TABLE simple_test;


· parallel_schedule

這個命名為“simple”的測試需要加到調(diào)度里面才能真的被運行。理論上來說,加在任何地方都是可以的,我們可以找到跟該測試同類型的地方,或者開頭字母一樣的地方,然后把這個新增的測試名字加進去。

# ----------

# Another group of parallel tests

# ----------

#test: union case join random delete?namespace?privileges

test: union case join random delete simple?namespace?privileges

# ----------

# Another group of parallel tests


serial_schedule

make installcheck將會用到該調(diào)度。一般來說,為了方便維護,最好跟parallel_schedule的存放順序一致,如下:

# src/test/regress/serial_schedule

# This should probably be in an order similar to parallel_schedule.

test: union

test: case

test: join

test: random

test: delete?

test: simple?

test: namespace?

test: privileges

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容