查看源代码 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
中(请参阅用户指南中的保存配置数据部分)。
如果该函数返回任何其他项,则该测试用例被视为成功。
如果测试用例函数崩溃,则视为失败。
有关测试用例实现的详细信息,请参阅用户指南中的测试用例部分。