檢視原始碼 ct_suite 行為 (common_test v1.27.5)

以下章節說明 Common Test 在測試執行期間呼叫的必要和選用的測試套件函式。更多詳細資訊,請參閱使用者指南中的撰寫測試套件章節。

摘要

回呼:回呼函式

傳回要執行的測試套件模組中所有測試案例和測試案例群組的清單。

此函式在測試案例群組執行完成後呼叫。它旨在用於在 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/1Module:suite/0 設定的屬性。

測試案例的實作。呼叫函式以測試並檢查結果。如果出現錯誤,請確保函式導致執行階段錯誤或呼叫 ct:fail/1,2(也會導致測試案例程序終止)。

類型

-type ct_config() :: [{Key :: atom(), Value :: term()}].

可修改的配置資料。

-type ct_group_def() ::
          {ct_groupname(),
           ct_group_props(),
           [ct_testname() | ct_group_def() | {group, ct_groupname()} | ct_testcase_ref()]}.

測試群組定義,由 Module:groups/0 傳回。

連結到此類型

ct_group_props()

檢視原始碼 (未匯出)
-type ct_group_props() ::
          [parallel | sequence | shuffle |
           {shuffle, Seed :: {integer(), integer(), integer()}} |
           {ct_group_repeat_type(), ct_test_repeat()}].
連結到此類型

ct_group_props_ref()

檢視原始碼 (未匯出)
-type ct_group_props_ref() :: ct_group_props() | default.
連結到此類型

ct_group_ref()

檢視原始碼 (未匯出)
-type ct_group_ref() ::
          {group, ct_groupname()} |
          {group, ct_groupname(), ct_group_props_ref()} |
          {group, ct_groupname(), ct_group_props_ref(), ct_subgroups_def()}.
連結到此類型

ct_group_repeat_type()

檢視原始碼 (未匯出)
-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_hooks() ::
          [CTHModule ::
               atom() |
               {CTHModule :: atom(), CTHInitArgs :: term()} |
               {CTHModule :: atom(), CTHInitArgs :: term(), CTHPriority :: integer()}].
-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/0Module:group/1Module:Testcase/0 傳回。

連結到此類型

ct_info_required()

檢視原始碼 (未匯出)
-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()}.
連結到此類型

ct_info_required_subkeys()

檢視原始碼 (未匯出)
-type ct_info_required_subkeys() :: SubKey :: atom() | [SubKey :: atom()].
連結到此類型

ct_info_timetrap()

檢視原始碼 (未匯出)
-type ct_info_timetrap() ::
          MilliSec ::
              integer() |
              {seconds, integer()} |
              {minutes, integer()} |
              {hours, integer()} |
              {Mod :: atom(), Func :: atom(), Args :: list()} |
              ct_info_timetrap_fun().
連結到此類型

ct_info_timetrap_fun()

檢視原始碼 (未匯出)
-type ct_info_timetrap_fun() :: fun().
-type ct_status() :: ok | skipped | failed.

巢狀子群組的狀態值。

連結到此類型

ct_subgroups_def()

檢視原始碼 (未匯出)
-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 傳回。

連結到此類型

ct_test_repeat()

檢視原始碼 (未匯出)
-type ct_test_repeat() :: integer() | forever.
連結到此類型

ct_testcase_ref()

檢視原始碼 (未匯出)
-type ct_testcase_ref() :: {testcase, ct_testname(), ct_testcase_repeat_prop()}.
連結到此類型

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

有關群組的詳細資訊,請參閱使用者指南中的測試案例群組章節。

連結到此回呼

end_per_group(GroupName, Config)

檢視原始碼 (選用)
-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 中擷取狀態。如果設定了屬性 sequencerepeat_until_*Common Test 也會使用此狀態來決定是否繼續執行群組。

有關測試案例群組的詳細資訊,請參閱使用者指南中的測試案例群組章節。

如果定義了此函式,則也必須定義 Module:init_per_group/2

連結到此回呼

end_per_suite(Config)

檢視原始碼 (選用)
-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

連結到此回呼

end_per_testcase(TestCase, Config)

檢視原始碼 (選用)
-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

連結到此回呼

group(GroupName)

檢視原始碼 (選用) (自 OTP R15B 起)
-callback group(GroupName :: ct_groupname()) -> [Info :: ct_info()].

測試案例群組資訊函式。它應該傳回標籤元組的清單,這些元組指定與測試案例群組(即其測試案例和子群組)執行相關的各種屬性。Module:group/1 設定的屬性會覆寫先前由 Module:suite/0 設定的相同金鑰的屬性。

標籤 timetrap 設定每個測試案例允許執行的最長時間(包含 Module:init_per_testcase/2Module: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()].

定義測試案例群組。有關詳細資訊,請參閱使用者指南中的測試案例群組章節。

連結到此回呼

init_per_group(GroupName, Config)

檢視原始碼 (選用)
-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

連結到此回呼

init_per_suite(Config)

檢視原始碼 (選用)
-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_configskip_and_save 的資訊,請參閱使用者指南中的 儲存組態資料 一節。

如果定義了此函數,則必須同時定義 Module:end_per_suite/1

連結到此回呼

init_per_testcase(TestCase, Config)

檢視原始碼 (選用)
-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/2Module: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

除了定義的元組之外,其他元組都會被忽略。

有關測試套件資訊函數的詳細資訊,請參閱使用者指南中的 測試套件資訊函數 一節。

連結到此回呼

'Testcase'()

檢視原始碼 (選用) (自 OTP R14B 起)
-callback 'Testcase'() -> [ct_info()].

測試案例資訊函式。它應該傳回標籤元組的清單,這些元組指定與此特定測試案例執行相關的各種屬性。 Module:Testcase/0 設定的屬性會覆寫先前為測試案例由 Module:group/1Module:suite/0 設定的屬性。

標籤 timetrap 設定測試案例允許執行的最長時間。如果超過 timetrap 時間,則測試案例會因原因 timetrap_timeout 而失敗。Module:init_per_testcase/2Module:end_per_testcase/2 都包含在 timetrap 時間內。 可以使用 TimeFunc 函數,透過回傳 TimeVal 來設定新的 timetrap。它也可以透過在某個時間點回傳非 TimeVal 的值來觸發 timetrap 超時。詳情請參閱使用者指南中的 Timetrap 超時 一節。

標籤 require 指定測試案例(或 init_per_testcase/2end_per_testcase/2)所需的組態變數。如果在任何組態檔中都找不到所需的組態變數,則會跳過測試案例。有關 require 功能的詳細資訊,請參閱函數 ct:require/1,2

如果未設定 timetraprequire,則會使用 Module:suite/0(或 Module:group/1)指定的預設值。

透過 userdata,使用者可以指定任何與測試案例相關的資訊,這些資訊可以透過呼叫 ct:userdata/3 來讀取。

除了定義的元組之外,其他元組都會被忽略。

有關測試案例資訊函數的詳細資訊,請參閱使用者指南中的 測試案例資訊函數 一節。

連結到此回呼

'Testcase'(Config)

檢視原始碼 (選用) (自 OTP R14B 起)
-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 中(請參閱使用者指南中的 儲存組態資料 一節)。

如果函數回傳任何其他詞語,則測試案例會被視為成功。

如果測試案例函數崩潰,則會被視為失敗。

有關測試案例實作的詳細資訊,請參閱使用者指南中的 測試案例 一節。