查看源代码 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().

测试组的名称。

链接到此类型

ct_hooks()

查看源代码 (未导出)
-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_timeoutModule: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 中(请参阅用户指南中的保存配置数据部分)。

如果该函数返回任何其他项,则该测试用例被视为成功。

如果测试用例函数崩溃,则视为失败。

有关测试用例实现的详细信息,请参阅用户指南中的测试用例部分。