檢視原始碼 ct_suite 行為 (common_test v1.27.5)
以下章節說明 Common Test
在測試執行期間呼叫的必要和選用的測試套件函式。更多詳細資訊,請參閱使用者指南中的撰寫測試套件章節。
摘要
類型
可修改的配置資料。
測試群組定義,由 Module:groups/0
傳回。
測試群組的名稱。
測試套件資訊,由 Module:suite/0
、 Module:group/1
和 Module:Testcase/0
傳回。
巢狀子群組的狀態值。
測試套件定義,由 Module:all/0
傳回。
測試案例函式的名稱。
回呼:回呼函式
傳回要執行的測試套件模組中所有測試案例和測試案例群組的清單。
此函式在測試案例群組執行完成後呼叫。它旨在用於在 Module:init_per_group/2
之後進行清理。
此函式作為套件中的最後一個測試案例呼叫。它旨在用於在 Module:init_per_suite/1
之後進行清理。
此函式在每個測試案例之後呼叫,可用於在 Module:init_per_testcase/2
和測試案例之後進行清理。
測試案例群組資訊函式。它應該傳回標籤元組的清單,這些元組指定與測試案例群組(即其測試案例和子群組)執行相關的各種屬性。Module:group/1
設定的屬性會覆寫先前由 Module:suite/0
設定的相同金鑰的屬性。
此配置函式在執行測試案例群組之前呼叫。它通常包含群組中所有測試案例和子群組通用的初始化,且這些初始化只需要執行一次。
此配置函式作為套件中的第一個函式呼叫。它通常包含套件中所有測試案例通用的初始化,且這些初始化只需要執行一次。
此函式在每個測試案例之前呼叫。
測試套件資訊函式。傳回標籤元組的清單,這些元組指定與此測試套件執行相關的各種屬性(套件中所有測試案例通用)。
測試案例資訊函式。它應該傳回標籤元組的清單,這些元組指定與此特定測試案例執行相關的各種屬性。 Module:Testcase/0
設定的屬性會覆寫先前為測試案例由 Module:group/1
或 Module:suite/0
設定的屬性。
測試案例的實作。呼叫函式以測試並檢查結果。如果出現錯誤,請確保函式導致執行階段錯誤或呼叫 ct:fail/1,2
(也會導致測試案例程序終止)。
類型
可修改的配置資料。
-type ct_group_def() :: {ct_groupname(), ct_group_props(), [ct_testname() | ct_group_def() | {group, ct_groupname()} | ct_testcase_ref()]}.
測試群組定義,由 Module:groups/0
傳回。
-type ct_group_props() :: [parallel | sequence | shuffle | {shuffle, Seed :: {integer(), integer(), integer()}} | {ct_group_repeat_type(), ct_test_repeat()}].
-type ct_group_props_ref() :: ct_group_props() | default.
-type ct_group_ref() :: {group, ct_groupname()} | {group, ct_groupname(), ct_group_props_ref()} | {group, ct_groupname(), ct_group_props_ref(), ct_subgroups_def()}.
-type ct_group_repeat_type() ::
repeat | repeat_until_all_ok | repeat_until_all_fail | repeat_until_any_ok |
repeat_until_any_fail.
-type ct_groupname() :: atom().
測試群組的名稱。
-type ct_info() :: {timetrap, ct_info_timetrap()} | {require, ct_info_required()} | {require, Name :: atom(), ct_info_required()} | {userdata, UserData :: term()} | {silent_connections, Conns :: [atom()]} | {stylesheet, CSSFile :: string()} | {ct_hooks, CTHs :: ct_hooks()}.
測試套件資訊,由 Module:suite/0
、 Module:group/1
和 Module:Testcase/0
傳回。
-type ct_info_required() :: Key :: atom() | {Key :: atom(), SubKeys :: ct_info_required_subkeys()} | {Key :: atom(), SubKey :: atom()} | {Key :: atom(), SubKey :: atom(), SubKeys :: ct_info_required_subkeys()}.
-type ct_info_timetrap_fun() :: fun().
-type ct_status() :: ok | skipped | failed.
巢狀子群組的狀態值。
-type ct_subgroups_def() :: {ct_groupname(), ct_group_props_ref()} | {ct_groupname(), ct_group_props_ref(), ct_subgroups_def()}.
-type ct_test_def() :: ct_testname() | ct_group_ref() | ct_testcase_ref().
測試套件定義,由 Module:all/0
傳回。
-type ct_test_repeat() :: integer() | forever.
-type ct_testcase_ref() :: {testcase, ct_testname(), ct_testcase_repeat_prop()}.
-type ct_testcase_repeat_prop() :: [{repeat, ct_test_repeat()} | {repeat_until_ok, ct_test_repeat()} | {repeat_until_fail, ct_test_repeat()}].
-type ct_testname() :: atom().
測試案例函式的名稱。
回呼:回呼函式
-callback all() -> [TestDef :: ct_test_def()] | {skip, Reason :: term()}.
傳回要執行的測試套件模組中所有測試案例和測試案例群組的清單。
此清單也指定 Common Test
執行案例和群組的順序。測試案例由原子、測試案例函式的名稱或表示該測試案例應重複的 testcase
元組表示。測試案例群組由 group
元組表示,其中 GroupName
(原子)是群組的名稱(在 Module:groups/0
中定義)。也可以指定群組的執行屬性,包括最上層群組及其任何子群組。此處指定的群組執行屬性會覆寫群組定義中的屬性(請參閱 Module:groups/0
)。(使用值 default
時,將使用群組定義屬性)。
如果傳回 {skip, Reason}
,則會跳過模組中的所有測試案例,並在 HTML 結果頁面上印出 Reason
。
有關群組的詳細資訊,請參閱使用者指南中的測試案例群組章節。
-callback end_per_group(GroupName :: ct_groupname(), Config :: ct_config()) -> term() | {return_group_result, Status :: ct_status()}.
此函式在測試案例群組執行完成後呼叫。它旨在用於在 Module:init_per_group/2
之後進行清理。
巢狀子群組的狀態值可以透過 {return_group_result, Status}
傳回。可以在上一層群組的 Module:end_per_group/2
中擷取狀態。如果設定了屬性 sequence
或 repeat_until_*
,Common Test
也會使用此狀態來決定是否繼續執行群組。
有關測試案例群組的詳細資訊,請參閱使用者指南中的測試案例群組章節。
如果定義了此函式,則也必須定義 Module:init_per_group/2
。
-callback end_per_suite(Config :: ct_config()) -> term() | {save_config, SaveConfig :: ct_config()}.
此函式作為套件中的最後一個測試案例呼叫。它旨在用於在 Module:init_per_suite/1
之後進行清理。
有關 save_config
的資訊,請參閱使用者指南中的儲存組態資料章節。
如果定義了此函式,則也必須定義 Module:init_per_suite/1
。
-callback end_per_testcase(TestCase :: ct_testname(), Config :: ct_config()) -> term() | {fail, Reason :: term()} | {save_config, SaveConfig :: ct_config()}.
此函式在每個測試案例之後呼叫,可用於在 Module:init_per_testcase/2
和測試案例之後進行清理。
任何回傳值(除了 {fail, Reason}
和 {save_config, SaveConfig}
之外)都會被忽略。如果回傳 {fail, Reason}
,則 TestCase
會被標記為錯誤(即使它在回傳一個值而不是終止的意義上是成功的)。
有關 save_config
的資訊,請參閱使用者指南中的儲存組態資料章節。
如果定義了此函數,則必須同時定義 Module:init_per_testcase/2
。
-callback group(GroupName :: ct_groupname()) -> [Info :: ct_info()].
測試案例群組資訊函式。它應該傳回標籤元組的清單,這些元組指定與測試案例群組(即其測試案例和子群組)執行相關的各種屬性。Module:group/1
設定的屬性會覆寫先前由 Module:suite/0
設定的相同金鑰的屬性。
標籤 timetrap
設定每個測試案例允許執行的最長時間(包含 Module:init_per_testcase/2
和 Module:end_per_testcase/2
)。如果超過 timetrap 時間,則測試案例會因原因 timetrap_timeout
而失敗。 可以使用 TimeFunc
函數,透過回傳 TimeVal
來設定新的 timetrap。它也可以透過在某個時間點回傳非 TimeVal
的值來觸發 timetrap 超時。詳情請參閱使用者指南中的 Timetrap 超時 一節。
標籤 require
指定套件中測試案例(或組態函數)所需的組態變數。如果在任何組態檔中都找不到所需的組態變數,則會跳過此群組中的所有測試案例。有關 require
功能的詳細資訊,請參閱函數 ct:require/1,2
。
透過 userdata
,使用者可以指定任何與測試案例群組相關的資訊,這些資訊可以透過呼叫 ct:userdata/2
來讀取。
標籤 ct_hooks
指定要與此套件一起執行的 Common Test Hooks。
除了定義的元組之外,其他元組都會被忽略。
有關測試案例群組資訊函數的詳細資訊,請參閱使用者指南中的 群組資訊函數 一節。
-callback groups() -> [GroupDef :: ct_group_def()].
定義測試案例群組。有關詳細資訊,請參閱使用者指南中的測試案例群組章節。
-callback init_per_group(GroupName :: ct_groupname(), Config :: ct_config()) -> NewConfig :: ct_config() | {skip, Reason :: term()}.
此配置函式在執行測試案例群組之前呼叫。它通常包含群組中所有測試案例和子群組通用的初始化,且這些初始化只需要執行一次。
GroupName
是群組的名稱,如群組定義中所指定(請參閱 Module:groups/0
)。參數 Config
是可以修改的組態資料。此函數的回傳值會作為 Config
提供給群組中的所有測試案例和子群組。
如果回傳 {skip, Reason}
,則會跳過群組中的所有測試案例,並且 Reason
會列印在群組的概述日誌中。
有關測試案例群組的資訊,請參閱使用者指南中的 測試案例群組 一節。
如果定義了此函數,則必須同時定義 Module:end_per_group/2
。
-callback init_per_suite(Config :: ct_config()) -> NewConfig :: ct_config() | {skip, Reason :: term()} | {skip_and_save, Reason :: term(), SaveConfig :: ct_config()}.
此配置函式作為套件中的第一個函式呼叫。它通常包含套件中所有測試案例通用的初始化,且這些初始化只需要執行一次。
參數 Config
是可以修改的組態資料。此函數的回傳值會指定為套件中所有組態函數和測試案例的 Config
。
如果回傳 {skip, Reason}
,則會跳過套件中的所有測試案例,並且 Reason
會列印在套件的概述日誌中。
有關 save_config
和 skip_and_save
的資訊,請參閱使用者指南中的 儲存組態資料 一節。
如果定義了此函數,則必須同時定義 Module:end_per_suite/1
。
-callback init_per_testcase(TestCase :: ct_testname(), Config :: ct_config()) -> NewConfig :: ct_config() | {fail, Reason :: term()} | {skip, Reason :: term()}.
此函式在每個測試案例之前呼叫。
引數 TestCase
是測試案例名稱,而 Config
(鍵值元組列表)是可以修改的組態資料。此函數回傳的 NewConfig
列表會作為 Config
提供給測試案例。
如果回傳 {fail, Reason}
,則測試案例會被標記為失敗,而不會執行。
如果回傳 {skip, Reason}
,則會跳過測試案例,並且 Reason
會列印在套件的概述日誌中。
如果定義了此函數,則必須同時定義 Module:end_per_testcase/2
。
-callback suite() -> [Info :: ct_info()].
測試套件資訊函式。傳回標籤元組的清單,這些元組指定與此測試套件執行相關的各種屬性(套件中所有測試案例通用)。
標籤 timetrap
設定每個測試案例允許執行的最長時間(包含 Module:init_per_testcase/2
和 Module:end_per_testcase/2
)。如果超過 timetrap 時間,則測試案例會因原因 timetrap_timeout
而失敗。 可以使用 TimeFunc
函數,透過回傳 TimeVal
來設定新的 timetrap。它也可以透過在某個時間點回傳非 TimeVal
的值來觸發 timetrap 超時。詳情請參閱使用者指南中的 Timetrap 超時 一節。
標籤 require
指定套件中測試案例(或組態函數)所需的組態變數。如果在任何組態檔中都找不到所需的組態變數,則會跳過所有測試案例。有關 require
功能的詳細資訊,請參閱函數 ct:require/1,2
。
透過 userdata
,使用者可以指定任何與測試套件相關的資訊,這些資訊可以透過呼叫 ct:userdata/2
來讀取。
標籤 ct_hooks
指定要與此套件一起執行的 Common Test Hooks。
除了定義的元組之外,其他元組都會被忽略。
有關測試套件資訊函數的詳細資訊,請參閱使用者指南中的 測試套件資訊函數 一節。
-callback 'Testcase'() -> [ct_info()].
測試案例資訊函式。它應該傳回標籤元組的清單,這些元組指定與此特定測試案例執行相關的各種屬性。 Module:Testcase/0
設定的屬性會覆寫先前為測試案例由 Module:group/1
或 Module:suite/0
設定的屬性。
標籤 timetrap
設定測試案例允許執行的最長時間。如果超過 timetrap 時間,則測試案例會因原因 timetrap_timeout
而失敗。Module:init_per_testcase/2
和 Module:end_per_testcase/2
都包含在 timetrap 時間內。 可以使用 TimeFunc
函數,透過回傳 TimeVal
來設定新的 timetrap。它也可以透過在某個時間點回傳非 TimeVal
的值來觸發 timetrap 超時。詳情請參閱使用者指南中的 Timetrap 超時 一節。
標籤 require
指定測試案例(或 init_per_testcase/2
或 end_per_testcase/2
)所需的組態變數。如果在任何組態檔中都找不到所需的組態變數,則會跳過測試案例。有關 require
功能的詳細資訊,請參閱函數 ct:require/1,2
。
如果未設定 timetrap
或 require
,則會使用 Module:suite/0
(或 Module:group/1
)指定的預設值。
透過 userdata
,使用者可以指定任何與測試案例相關的資訊,這些資訊可以透過呼叫 ct:userdata/3
來讀取。
除了定義的元組之外,其他元組都會被忽略。
有關測試案例資訊函數的詳細資訊,請參閱使用者指南中的 測試案例資訊函數 一節。
-callback 'Testcase'(Config) -> term() | {skip, Reason} | {fail, Reason} | {comment, Comment} | {save_config, SaveConfig} | {skip_and_save, Reason, SaveConfig} when Config :: ct_config(), SaveConfig :: ct_config(), Reason :: term(), Comment :: string().
測試案例的實作。呼叫函式以測試並檢查結果。如果出現錯誤,請確保函式導致執行階段錯誤或呼叫 ct:fail/1,2
(也會導致測試案例程序終止)。
例如,可以使用 STDLIB 中的 proplists:get_value/2
來讀取 Config
列表中的元素。
可能的回傳值為
{fail, Reason}
- 測試案例被視為失敗,並且Reason
會被記錄。{skip, Reason}
- 測試案例被視為跳過,並且Reason
會被記錄。{comment, Comment}
- 測試案例被視為成功,並且Comment
會被記錄。{save_config, SaveConfig}
- 測試案例被視為成功,並且SaveConfig
會儲存在Config
中(請參閱使用者指南中的 儲存組態資料 一節)。{skip_and_save, Reason, SaveConfig}
- 測試案例被視為跳過,Reason
會被記錄,並且SaveConfig
會儲存在Config
中(請參閱使用者指南中的 儲存組態資料 一節)。
如果函數回傳任何其他詞語,則測試案例會被視為成功。
如果測試案例函數崩潰,則會被視為失敗。
有關測試案例實作的詳細資訊,請參閱使用者指南中的 測試案例 一節。