查看源码 ct (common_test v1.27.5)

用于 Common Test 框架的主要用户接口。

此模块实现用于运行测试的命令行接口,以及用于 Common Test 用例问题的基本功能,例如配置和日志记录。

框架将配置值存储在通常名为 Config 的属性列表中。该列表包含有关测试运行的信息(由框架本身添加),并且可能还包含用户提供的值。配置被传递到单独的测试用例以及支持函数(如果已定义)。

可能的配置变量包括

警告

用于从 Config 属性列表接收单个配置值的 ?config 宏已弃用。请改用 proplists:get_value/2-3

摘要

类型

配置文件中存在的配置键

可以传递给 cth_conn_log 钩子的选项,该钩子用于记录 NETCONF 和 Telnet 连接。有关如何使用此钩子的描述和示例,请参阅 ct_netconfcct_telnet

连接的标识(句柄)。

通过 require 语句或调用 ct:require/2 引入的配置数据的名称和关联,例如,ct:require(mynodename,{node,[telnet]})

函数

中止当前正在执行的测试用例。用户必须确切知道当前正在执行哪个测试用例。因此,此函数仅在由测试用例调用(或同步调用)的函数中调用才是安全的。

使用指定的回调模块和配置字符串加载配置变量。回调模块必须已加载或存在于代码路径中。可以使用函数 ct:remove_config/2 删除已加载的配置变量。

取消任何活动的超时陷阱,并暂停当前测试用例的执行,直到用户调用函数 continue/0。然后,用户可以与运行测试的 Erlang 节点进行交互,例如,用于调试目的或手动执行部分测试用例。如果正在执行并行组,则应调用 ct:break/2

工作方式与 ct:break/1 相同,只有参数 TestCase 可以暂停在并行组中执行的测试用例。必须使用函数 ct:continue/1 来恢复 TestCase 的执行。

返回并清除在最近一次捕获打印到 stdout 的会话期间缓冲的文本字符串列表。ListOfStrings 中要忽略的日志类别可以使用 ExclCategories 指定。如果 ExclCategories = [],则不进行任何过滤。

开始捕获在执行测试用例期间打印到 stdout 的所有文本字符串。

停止捕获文本字符串(会话以 capture_start/0 开始)。

在测试套件结果页面上的表格的注释字段中打印指定的 Comment

在测试套件结果页面上的表格的注释字段中打印格式化的字符串。

在测试用例(不在并行组中执行)调用函数 ct:break/1 后,必须调用此函数才能继续。

在测试用例调用 ct:break/2 后,必须调用此函数才能继续。如果暂停的测试用例 TestCase 在并行组中执行,则必须使用此函数(而不是 continue/0)来让测试用例继续执行。

解密 EncryptFileName,该文件之前使用 ct:encrypt_config_file/2,3 生成。原始文件内容保存在目标文件中。加密密钥(一个字符串)必须在名为 .ct_config.crypt 的文本文件中可用,该文件位于当前目录或用户的家目录中(按此顺序搜索)。

解密 EncryptFileName,该文件之前使用 ct:encrypt_config_file/2,3 生成。原始文件内容保存在目标文件中。密钥的值必须与用于加密的密钥的值相同。

使用 DES3 加密源配置文件,并将结果保存在文件 EncryptFileName 中。密钥(一个字符串)必须在名为 .ct_config.crypt 的文本文件中可用,该文件位于当前目录或用户的家目录中(按此顺序搜索)。

使用 DES3 加密源配置文件,并将结果保存在目标文件 EncryptFileName 中。要使用的加密密钥是 {key,Key} 中的值,或者由 {file,File} 指定的文件中存储的值。

以指定的错误 Reason 终止测试用例。

使用由格式字符串和值列表(用作 io_lib:format/2 的参数)指定的错误消息终止测试用例。

读取配置数据值。

获取 Common Test 事件管理器的引用。此引用可用于例如在测试运行时添加用户特定的事件处理程序。

返回用于启动此 Erlang 实例的命令。如果无法找到此信息,则返回字符串 "no_prog_name"

返回正在进行的测试的状态。返回的列表包含有关正在执行哪个测试用例(当并行测试用例组正在执行时,是一个用例列表)的信息,以及到目前为止成功、失败、跳过和总测试用例的计数器。

返回指定连接所属的目标的名称。

获取用于配置和运行此测试的所有测试规范项的列表。

从用于配置和运行此测试的测试规范中读取一个或多个项。Tag 是任何有效的测试规范标签,例如 labelconfiglogdir。如果设置了选项 allow_user_terms,还可以读取用户特定的项。

读取有关为当前测试用例设置的超时陷阱的信息。Scaling 指示 Common Test 是否会尝试自动补偿由工具(如 cover)引入的运行时延迟的超时陷阱。ScaleVal 是当前缩放乘数的值(如果禁用缩放,则始终为 1)。请注意 Time 不是缩放结果。

此函数返回指定日志类别的详细级别。有关详细信息,请参阅用户指南。使用值 default 读取常规详细级别。

安装配置文件和事件处理程序。

对指定的 Telnet 连接执行命令 listenv,并返回结果作为键值对列表。

从测试用例打印到日志文件。

如果测试以选项 create_priv_dir 设置为 manual_per_tc 启动,为了使测试用例可以使用私有目录,它必须首先调用此函数来创建它。

使用 Data 将类型为 Name 的异步通知发送到 Common Test 事件管理器。以后可以由任何已安装的事件管理器捕获此通知。

从测试用例打印并记录。

解析 SQL 表的打印输出并返回元组列表。

从测试用例打印到控制台。

重新加载包含指定配置键的配置文件。

此函数将返回在调用时仍在运行的测试和组领导进程的标识。 TestProcs 是系统中以 Common Test IO 进程为组领导的进程。SharedGL 是中央 Common Test IO 进程,负责为配置函数打印到日志文件并顺序执行测试用例。OtherGLs 是 Common Test IO 进程,用于并行测试用例组中测试用例的日志文件打印。

删除使用指定回调模块和配置字符串加载的配置变量(及其别名)。

检查所需的配置是否可用。任意深度的元组可以指定为 Required。只有元组的最后一个元素可以是 SubKey 的列表。

检查所需的配置是否可用,并为其指定一个名称。Required 的语义与 ct:require/1 中的相同,只是不能指定 SubKey 的列表。

运行指定目录中所有套件中的所有测试用例。

运行指定套件中的所有测试用例。

运行指定的测试用例。

按照 Opts 中选项的组合运行测试。这些选项与程序 ct_run 使用的选项相同,请参阅 ct_run 手册页中的 从命令行运行测试

运行由 TestSpec 指定的测试。使用的术语与测试规范文件中使用的术语相同。

使用此函数设置或修改日志记录类别的详细程度。 有关详细信息,请参阅用户指南。 使用值 default 设置常规详细级别。

此函数类似于 STDLIB 中的 timer:sleep/1,将测试用例挂起指定的时间。但是,此函数还会将 Time 乘以 multiply_timetraps 值(如果设置),并且在某些情况下,如果 scale_timetraps 设置为 true(默认为 false),则会自动缩放时间。

在交互模式下启动 Common Test

使用调试器单步执行测试用例。

使用调试器单步执行测试用例。 如果指定了选项 config,则也会在 Suite 中的配置函数上设置断点。

退出交互模式。

使用 DataCommon Test 事件管理器发送 Name 类型的同步通知。这稍后可以被任何已安装的事件管理器捕获。

返回指定套件中的所有测试用例。

为正在运行的测试用例设置新的时间陷阱。

返回从 suite/0 返回的元组列表中用标签 userdata 指定的任何数据。

返回从 Suite:group(GroupName)Suite:Case() 返回的元组列表中用标签 userdata 指定的任何数据。

类型

-type config_key() :: atom().

配置文件中存在的配置键

-type conn_log_mod() :: ct_netconfc | ct_telnet.
-type conn_log_option() :: {log_type, conn_log_type()} | {hosts, [key_or_name()]}.
-type conn_log_options() :: [conn_log_option()].

可以传递给 cth_conn_log 钩子的选项,该钩子用于记录 NETCONF 和 Telnet 连接。有关如何使用此钩子的描述和示例,请参阅 ct_netconfcct_telnet

-type conn_log_type() :: raw | pretty | html | silent.
-type handle() :: pid().

连接的标识(句柄)。

-type key_or_name() :: config_key() | target_name().
-type target_name() :: atom().

通过 require 语句或调用 ct:require/2 引入的配置数据的名称和关联,例如,ct:require(mynodename,{node,[telnet]})

函数

链接到此函数

abort_current_testcase(Reason)

查看源代码
-spec abort_current_testcase(Reason) -> ok | {error, ErrorReason}
                                when
                                    Reason :: term(),
                                    ErrorReason :: no_testcase_running | parallel_group.

中止当前正在执行的测试用例。用户必须确切知道当前正在执行哪个测试用例。因此,此函数仅在由测试用例调用(或同步调用)的函数中调用才是安全的。

中止测试用例的原因 Reason 将打印在测试用例日志中。

链接到此函数

add_config(Callback, Config)

查看源代码 (自 OTP R14B 起)
-spec add_config(Callback, Config) -> ok | {error, Reason}
                    when Callback :: atom(), Config :: string(), Reason :: term().

使用指定的回调模块和配置字符串加载配置变量。回调模块必须已加载或存在于代码路径中。可以使用函数 ct:remove_config/2 删除已加载的配置变量。

链接到此函数

break(Comment)

查看源代码 (自 OTP R15B02 起)
-spec break(Comment) -> ok | {error, Reason}
               when
                   Comment :: string(),
                   Reason ::
                       {multiple_cases_running, TestCases} | 'enable break with release_shell option',
                   TestCases :: [atom()].

取消任何活动的超时陷阱,并暂停当前测试用例的执行,直到用户调用函数 continue/0。然后,用户可以与运行测试的 Erlang 节点进行交互,例如,用于调试目的或手动执行部分测试用例。如果正在执行并行组,则应调用 ct:break/2

取消的时间陷阱不会在中断后自动重新激活,但必须使用 ct:timetrap/1 显式启动。

为了使中断/继续功能正常工作,Common Test 必须释放控制 stdin 的 shell 进程。 这是通过将启动选项 release_shell 设置为 true 来完成的。 有关详细信息,请参阅用户指南中的 从 Erlang Shell 或 Erlang 程序运行测试 部分。

链接到此函数

break(TestCase, Comment)

查看源代码 (自 OTP R15B02 起)
-spec break(TestCase, Comment) -> ok | {error, Reason}
               when
                   TestCase :: atom(),
                   Comment :: string(),
                   Reason :: 'test case not running' | 'enable break with release_shell option'.

工作方式与 ct:break/1 相同,只有参数 TestCase 可以暂停在并行组中执行的测试用例。必须使用函数 ct:continue/1 来恢复 TestCase 的执行。

有关详细信息,请参阅 ct:break/1

链接到此函数

capture_get()

查看源代码 (自 OTP R15B 起)
-spec capture_get() -> ListOfStrings when ListOfStrings :: [string()].

等效于 capture_get([default])

链接到此函数

capture_get(ExclCategories)

查看源代码 (自 OTP R15B 起)
-spec capture_get(ExclCategories) -> ListOfStrings
                     when ExclCategories :: [atom()], ListOfStrings :: [string()].

返回并清除在最近一次捕获打印到 stdout 的会话期间缓冲的文本字符串列表。ListOfStrings 中要忽略的日志类别可以使用 ExclCategories 指定。如果 ExclCategories = [],则不进行任何过滤。

另请参阅 ct:capture_start/0ct:capture_stop/0ct:log/3

链接到此函数

capture_start()

查看源代码 (自 OTP R15B 起)
-spec capture_start() -> ok.

开始捕获在执行测试用例期间打印到 stdout 的所有文本字符串。

另请参阅 ct:capture_get/1ct:capture_stop/0

链接到此函数

capture_stop()

查看源代码 (自 OTP R15B 起)
-spec capture_stop() -> ok.

停止捕获文本字符串(会话以 capture_start/0 开始)。

另请参阅 ct:capture_get/1ct:capture_start/0

-spec comment(Comment) -> ok when Comment :: term().

在测试套件结果页面上的表格的注释字段中打印指定的 Comment

如果多次调用,则仅打印最后一个注释。测试用例返回值 {comment,Comment} 会覆盖由此函数设置的字符串。

链接到此函数

comment(Format, Args)

查看源代码 (自 OTP R15B 起)
-spec comment(Format, Args) -> ok when Format :: string(), Args :: list().

在测试套件结果页面上的表格的注释字段中打印格式化的字符串。

参数 FormatArgs 在调用 io_lib:format/2 中用于创建注释字符串。comment/2 的行为与函数 ct:comment/1 的行为相同。

链接到此函数

continue()

查看源代码 (自 OTP R15B02 起)
-spec continue() -> ok.

在测试用例(不在并行组中执行)调用函数 ct:break/1 后,必须调用此函数才能继续。

链接到此函数

continue(TestCase)

查看源代码 (自 OTP R15B02 起)
-spec continue(TestCase) -> ok when TestCase :: atom().

在测试用例调用 ct:break/2 后,必须调用此函数才能继续。如果暂停的测试用例 TestCase 在并行组中执行,则必须使用此函数(而不是 continue/0)来让测试用例继续执行。

链接到此函数

decrypt_config_file(EncryptFileName, TargetFileName)

查看源代码
-spec decrypt_config_file(EncryptFileName, TargetFileName) -> ok | {error, Reason}
                             when
                                 EncryptFileName :: string(),
                                 TargetFileName :: string(),
                                 Reason :: term().

解密 EncryptFileName,该文件之前使用 ct:encrypt_config_file/2,3 生成。原始文件内容保存在目标文件中。加密密钥(一个字符串)必须在名为 .ct_config.crypt 的文本文件中可用,该文件位于当前目录或用户的家目录中(按此顺序搜索)。

链接到此函数

decrypt_config_file(EncryptFileName, TargetFileName, KeyOrFile)

查看源代码
-spec decrypt_config_file(EncryptFileName, TargetFileName, KeyOrFile) -> ok | {error, Reason}
                             when
                                 EncryptFileName :: string(),
                                 TargetFileName :: string(),
                                 KeyOrFile :: {key, string()} | {file, string()},
                                 Reason :: term().

解密 EncryptFileName,该文件之前使用 ct:encrypt_config_file/2,3 生成。原始文件内容保存在目标文件中。密钥的值必须与用于加密的密钥的值相同。

链接到此函数

encrypt_config_file(SrcFileName, EncryptFileName)

查看源代码
-spec encrypt_config_file(SrcFileName, EncryptFileName) -> ok | {error, Reason}
                             when SrcFileName :: string(), EncryptFileName :: string(), Reason :: term().

使用 DES3 加密源配置文件,并将结果保存在文件 EncryptFileName 中。密钥(一个字符串)必须在名为 .ct_config.crypt 的文本文件中可用,该文件位于当前目录或用户的家目录中(按此顺序搜索)。

有关在运行测试时使用加密配置文件的信息,请参阅用户指南中的加密配置文件部分。

有关 DES3 加密/解密的详细信息,请参阅应用程序 Crypto

链接到此函数

encrypt_config_file(SrcFileName, EncryptFileName, KeyOrFile)

查看源代码
-spec encrypt_config_file(SrcFileName, EncryptFileName, KeyOrFile) -> ok | {error, Reason}
                             when
                                 SrcFileName :: string(),
                                 EncryptFileName :: string(),
                                 KeyOrFile :: {key, string()} | {file, string()},
                                 Reason :: term().

使用 DES3 加密源配置文件,并将结果保存在目标文件 EncryptFileName 中。要使用的加密密钥是 {key,Key} 中的值,或者由 {file,File} 指定的文件中存储的值。

有关在运行测试时使用加密配置文件的信息,请参阅用户指南中的加密配置文件部分。

有关 DES3 加密/解密的详细信息,请参阅应用程序 Crypto

-spec fail(Reason) -> no_return() when Reason :: term().

以指定的错误 Reason 终止测试用例。

链接到此函数

fail(Format, Args)

查看源代码 (自 OTP R15B 起)
-spec fail(Format, Args) -> no_return() when Format :: io:format(), Args :: [term()].

使用由格式字符串和值列表(用作 io_lib:format/2 的参数)指定的错误消息终止测试用例。

-spec get_config(Required) -> Value
                    when
                        Required :: KeyOrName | {KeyOrName, SubKey} | {KeyOrName, SubKey, SubKey},
                        KeyOrName :: key_or_name(),
                        SubKey :: atom(),
                        Value :: term().

等效于 get_config(Required, undefined, [])

链接到此函数

get_config(Required, Default)

查看源代码
-spec get_config(Required, Default) -> Value
                    when
                        Required :: KeyOrName | {KeyOrName, SubKey} | {KeyOrName, SubKey, SubKey},
                        KeyOrName :: key_or_name(),
                        SubKey :: atom(),
                        Default :: term(),
                        Value :: term().

等效于 get_config(Required, Default, [])

链接到此函数

get_config(Required, Default, Opts)

查看源代码
-spec get_config(Required, Default, Opts) -> ValueOrElement
                    when
                        Required :: KeyOrName | {KeyOrName, SubKey} | {KeyOrName, SubKey, SubKey},
                        KeyOrName :: key_or_name(),
                        SubKey :: atom(),
                        Default :: term(),
                        Opts :: [Opt],
                        Opt :: element | all,
                        ValueOrElement :: term() | Default.

读取配置数据值。

返回与配置变量键或其关联名称(如果已使用 ct:require/2require 语句指定)匹配的值或配置元素。

示例

给定以下配置文件

{unix,[{telnet,IpAddr},
       {user,[{username,Username},
              {password,Password}]}]}.

那么

ct:get_config(unix,Default) -> [{telnet,IpAddr},
 {user, [{username,Username}, {password,Password}]}]
ct:get_config({unix,telnet},Default) -> IpAddr
ct:get_config({unix,user,username},Default) -> Username
ct:get_config({unix,ftp},Default) -> Default
ct:get_config(unknownkey,Default) -> Default

如果配置变量键已与名称关联(通过 ct:require/2require 语句),则可以使用该名称代替键来读取该值

ct:require(myuser,{unix,user}) -> ok.
ct:get_config(myuser,Default) -> [{username,Username}, {password,Password}]

如果配置变量在多个文件中定义,请使用选项 all 来访问所有可能的值。 这些值在列表中返回。元素的顺序对应于在启动时指定配置文件的顺序。

如果要返回配置元素(键值元组)而不是值,请使用选项 element。 返回的元素的形式为 {Required,Value}

另请参阅 ct:get_config/1ct:get_config/2ct:require/1ct:require/2

链接到此函数

get_event_mgr_ref()

查看源代码 (自 OTP 17.5 起)
-spec get_event_mgr_ref() -> EvMgrRef when EvMgrRef :: atom().

获取 Common Test 事件管理器的引用。此引用可用于例如在测试运行时添加用户特定的事件处理程序。

示例

gen_event:add_handler(ct:get_event_mgr_ref(), my_ev_h, [])
链接到此函数

get_progname()

查看源代码 (自 OTP 21.0 起)
-spec get_progname() -> string().

返回用于启动此 Erlang 实例的命令。如果无法找到此信息,则返回字符串 "no_prog_name"

-spec get_status() -> TestStatus | {error, Reason} | no_tests_running
                    when
                        TestStatus :: [StatusElem],
                        StatusElem ::
                            {current, TestCaseInfo} |
                            {successful, Successful} |
                            {failed, Failed} |
                            {skipped, Skipped} |
                            {total, Total},
                        TestCaseInfo :: {Suite, TestCase} | [{Suite, TestCase}],
                        Suite :: atom(),
                        TestCase :: atom(),
                        Successful :: integer(),
                        Failed :: integer(),
                        Skipped :: {UserSkipped, AutoSkipped},
                        UserSkipped :: integer(),
                        AutoSkipped :: integer(),
                        Total :: integer(),
                        Reason :: term().

返回正在进行的测试的状态。返回的列表包含有关正在执行哪个测试用例(当并行测试用例组正在执行时,是一个用例列表)的信息,以及到目前为止成功、失败、跳过和总测试用例的计数器。

链接到此函数

get_target_name(Handle)

查看源代码
-spec get_target_name(Handle) -> {ok, TargetName} | {error, Reason}
                         when Handle :: handle(), TargetName :: target_name(), Reason :: term().

返回指定连接所属的目标的名称。

链接到此函数

get_testspec_terms()

查看源代码 (自 OTP 18.0 起)
-spec get_testspec_terms() -> TestSpecTerms | undefined
                            when TestSpecTerms :: [{Tag, Value}], Tag :: atom(), Value :: [term()].

获取用于配置和运行此测试的所有测试规范项的列表。

链接到此函数

get_testspec_terms(Tags)

查看源代码 (自 OTP 18.0 起)
-spec get_testspec_terms(Tags) -> TestSpecTerms | undefined
                            when
                                Tags :: [Tag] | Tag,
                                Tag :: atom(),
                                TestSpecTerms :: [{Tag, Value}] | {Tag, Value},
                                Value :: [{Node, term()}] | [term()],
                                Node :: atom().

从用于配置和运行此测试的测试规范中读取一个或多个项。Tag 是任何有效的测试规范标签,例如 labelconfiglogdir。如果设置了选项 allow_user_terms,还可以读取用户特定的项。

所有返回的值元组,除了用户项之外,第一个元素都是节点名称。

要读取测试项,请使用 Tag = tests (而不是 suitesgroupscases)。Value 是一个列表,其中包含所有格式为 [{Node,Dir,[{TestSpec,GroupsAndCases1},...]},...] 的测试,其中 GroupsAndCases = [{Group,[Case]}] | [Case]

链接到此函数

get_timetrap_info()

查看源代码 (自 OTP R15B 起)
-spec get_timetrap_info() -> {Time, {Scaling, ScaleVal}}
                           when
                               Time :: integer() | infinity, Scaling :: boolean(), ScaleVal :: integer().

读取有关为当前测试用例设置的超时陷阱的信息。Scaling 指示 Common Test 是否会尝试自动补偿由工具(如 cover)引入的运行时延迟的超时陷阱。ScaleVal 是当前缩放乘数的值(如果禁用缩放,则始终为 1)。请注意 Time 不是缩放结果。

链接到此函数

get_verbosity(Category)

查看源代码 (自 OTP 19.1 起)
-spec get_verbosity(Category) -> Level | undefined when Category :: default | atom(), Level :: integer().

此函数返回指定日志类别的详细级别。有关详细信息,请参阅用户指南。使用值 default 读取常规详细级别。

-spec install(Opts) -> ok | {error, Reason}
                 when
                     Opts :: [Opt],
                     Opt :: {config, ConfigFiles} | {event_handler, Modules} | {decrypt, KeyOrFile},
                     ConfigFiles :: [ConfigFile],
                     ConfigFile :: string(),
                     Modules :: [atom()],
                     KeyOrFile :: {key, Key} | {file, KeyFile},
                     Key :: string(),
                     KeyFile :: string(),
                     Reason :: term().

安装配置文件和事件处理程序。

在第一个测试之前运行此函数一次。

示例

install([{config,["config_node.ctc","config_user.ctc"]}])

此函数由程序 ct_run 自动运行。

-spec listenv(Telnet) -> {ok, [Env]} | {error, Reason}
                 when
                     Telnet :: ct_telnet:connection(),
                     Env :: {Key, Value},
                     Key :: string(),
                     Value :: string(),
                     Reason :: term().

对指定的 Telnet 连接执行命令 listenv,并返回结果作为键值对列表。

-spec log(Format) -> ok when Format :: string().

等效于 log(default, ?STD_IMPORTANCE, Format, [], [])

-spec log(X1, X2) -> ok
             when
                 X1 :: Category | Importance | Format,
                 X2 :: Format | FormatArgs,
                 Category :: atom() | integer() | string(),
                 Importance :: integer(),
                 Format :: string(),
                 FormatArgs :: list().

等效于 log(Category, Importance, Format, FormatArgs, [])

-spec log(X1, X2, X3) -> ok
             when
                 X1 :: Category | Importance,
                 X2 :: Importance | Format,
                 X3 :: Format | FormatArgs | Opts,
                 Category :: atom() | integer() | string(),
                 Importance :: integer(),
                 Format :: string(),
                 FormatArgs :: list(),
                 Opts :: [Opt],
                 Opt :: {heading, string()} | no_css | esc_chars.

等效于 log(Category, Importance, Format, FormatArgs, Opts)

链接到此函数

log(X1, X2, X3, X4)

查看源代码 (自 OTP R15B02 起)
-spec log(X1, X2, X3, X4) -> ok
             when
                 X1 :: Category | Importance,
                 X2 :: Importance | Format,
                 X3 :: Format | FormatArgs,
                 X4 :: FormatArgs | Opts,
                 Category :: atom() | integer() | string(),
                 Importance :: integer(),
                 Format :: string(),
                 FormatArgs :: list(),
                 Opts :: [Opt],
                 Opt :: {heading, string()} | no_css | esc_chars.

等效于 log(Category, Importance, Format, FormatArgs, Opts)

链接到此函数

log(Category, Importance, Format, FormatArgs, Opts)

查看源代码 (自 OTP 18.3 起)
-spec log(Category, Importance, Format, FormatArgs, Opts) -> ok
             when
                 Category :: atom() | integer() | string(),
                 Importance :: integer(),
                 Format :: string(),
                 FormatArgs :: list(),
                 Opts :: [Opt],
                 Opt :: {heading, string()} | no_css | esc_chars.

从测试用例打印到日志文件。

此函数用于直接从测试用例向测试用例日志文件打印字符串。

默认的 Categorydefault,默认的 Importance?STD_IMPORTANCEFormatArgs 的默认值是 []

有关 CategoryImportanceno_css 选项的详细信息,请参阅用户指南中的 日志记录 - 类别和详细级别 部分。

除非使用 esc_chars 选项,否则 Common Test 不会转义使用此函数打印的文本中的特殊 HTML 字符(<,> 和 &)。

链接到此函数

make_priv_dir()

查看源代码 (自 OTP R15B01 起)
-spec make_priv_dir() -> ok | {error, Reason} when Reason :: term().

如果测试以选项 create_priv_dir 设置为 manual_per_tc 启动,为了使测试用例可以使用私有目录,它必须首先调用此函数来创建它。

链接到此函数

notify(Name, Data)

查看源代码 (自 OTP R15B02 起)
-spec notify(Name, Data) -> ok when Name :: atom(), Data :: term().

使用 Data 将类型为 Name 的异步通知发送到 Common Test 事件管理器。以后可以由任何已安装的事件管理器捕获此通知。

另请参阅 gen_event

-spec pal(Format) -> ok when Format :: string().

等同于 pal(default, ?STD_IMPORTANCE, Format, [])

-spec pal(X1, X2) -> ok
             when
                 X1 :: Category | Importance | Format,
                 X2 :: Format | FormatArgs,
                 Category :: atom() | integer() | string(),
                 Importance :: integer(),
                 Format :: string(),
                 FormatArgs :: list().

等同于 pal(Category, Importance, Format, FormatArgs, [])

-spec pal(X1, X2, X3) -> ok
             when
                 X1 :: Category | Importance,
                 X2 :: Importance | Format,
                 X3 :: Format | FormatArgs | Opt,
                 Category :: atom() | integer() | string(),
                 Importance :: integer(),
                 Format :: string(),
                 FormatArgs :: list(),
                 Opt :: {heading, string()} | no_css.

等同于 pal(Category, Importance, Format, FormatArgs, Opts)

链接到此函数

pal(X1, X2, X3, X4)

查看源代码 (自 OTP R15B02 起)
-spec pal(X1, X2, X3, X4) -> ok
             when
                 X1 :: Category | Importance,
                 X2 :: Importance | Format,
                 X3 :: Format | FormatArgs,
                 X4 :: FormatArgs | Opts,
                 Category :: atom() | integer() | string(),
                 Importance :: integer(),
                 Format :: string(),
                 FormatArgs :: list(),
                 Opts :: [Opt],
                 Opt :: {heading, string()} | no_css.

等同于 pal(Category, Importance, Format, FormatArgs, Opts)

链接到此函数

pal(Category, Importance, Format, FormatArgs, Opts)

查看源代码 (自 OTP 19.2 起)
-spec pal(Category, Importance, Format, FormatArgs, Opts) -> ok
             when
                 Category :: atom() | integer() | string(),
                 Importance :: integer(),
                 Format :: string(),
                 FormatArgs :: list(),
                 Opts :: [Opt],
                 Opt :: {heading, string()} | no_css.

从测试用例打印并记录。

此函数用于从测试用例打印字符串,同时打印到测试用例日志文件和控制台。

默认的 Categorydefault,默认的 Importance?STD_IMPORTANCEFormatArgs 的默认值是 []

有关 CategoryImportance 的详细信息,请参阅用户指南中的 日志记录 - 类别和详细级别 部分。

请注意,在将文本打印到日志文件之前,Common Test 会转义文本中的特殊字符(<,> 和 &)。

-spec parse_table(Data) -> {Heading, Table}
                     when Data :: [string()], Heading :: tuple(), Table :: [tuple()].

解析 SQL 表的打印输出并返回元组列表。

要解析的打印输出通常是 SQL 中 select 命令的结果。返回的 Table 是元组列表,其中每个元组是表中的一行。

Heading 是一个字符串元组,表示表中每一列的标题。

-spec print(Format) -> ok when Format :: string().

等同于 print(default, ?STD_IMPORTANCE, Format, [], [])

链接到此函数

print(X1, X2)

查看源代码 (自 OTP R15B02 起)
-spec print(X1, X2) -> ok
               when
                   X1 :: Category | Importance | Format,
                   X2 :: Format | FormatArgs,
                   Category :: atom() | integer() | string(),
                   Importance :: integer(),
                   Format :: string(),
                   FormatArgs :: list().

等同于 print(Category, Importance, Format, FormatArgs, [])

-spec print(X1, X2, X3) -> ok
               when
                   X1 :: Category | Importance,
                   X2 :: Importance | Format,
                   X3 :: Format | FormatArgs | Opts,
                   Category :: atom() | integer() | string(),
                   Importance :: integer(),
                   Format :: string(),
                   FormatArgs :: list(),
                   Opts :: [Opt],
                   Opt :: {heading, string()}.

等同于 print(Category, Importance, Format, FormatArgs, Opts)

链接到此函数

print(X1, X2, X3, X4)

查看源代码 (自 OTP R15B02 起)
-spec print(X1, X2, X3, X4) -> ok
               when
                   X1 :: Category | Importance,
                   X2 :: Importance | Format,
                   X3 :: Format | FormatArgs,
                   X4 :: FormatArgs | Opts,
                   Category :: atom() | integer() | string(),
                   Importance :: integer(),
                   Format :: string(),
                   FormatArgs :: list(),
                   Opts :: [Opt],
                   Opt :: {heading, string()}.

等同于 print(Category, Importance, Format, FormatArgs, Opts)

链接到此函数

print(Category, Importance, Format, FormatArgs, Opts)

查看源代码 (自 OTP 19.2 起)
-spec print(Category, Importance, Format, FormatArgs, Opts) -> ok
               when
                   Category :: atom() | integer() | string(),
                   Importance :: integer(),
                   Format :: string(),
                   FormatArgs :: list(),
                   Opts :: [Opt],
                   Opt :: {heading, string()}.

从测试用例打印到控制台。

此函数用于从测试用例向控制台打印字符串。

默认的 Categorydefault,默认的 Importance?STD_IMPORTANCEFormatArgs 的默认值是 []

有关 CategoryImportance 的详细信息,请参阅用户指南中的 日志记录 - 类别和详细级别 部分。

链接到此函数

reload_config(Required)

查看源代码 (自 OTP R14B 起)
-spec reload_config(Required) -> ValueOrElement | {error, Reason}
                       when
                           Required :: KeyOrName | {KeyOrName, SubKey} | {KeyOrName, SubKey, SubKey},
                           KeyOrName :: key_or_name(),
                           SubKey :: atom(),
                           ValueOrElement :: term(),
                           Reason :: term().

重新加载包含指定配置键的配置文件。

此函数更新从中读取指定配置变量的配置数据,并返回此变量的(可能)新值。

如果某些变量存在于配置中,但未使用此函数加载,则它们会从配置表中删除,同时删除其别名。

链接到此函数

remaining_test_procs()

查看源代码 (自 OTP 20.2 起)
-spec remaining_test_procs() -> {TestProcs, SharedGL, OtherGLs}
                              when
                                  TestProcs :: [{pid(), GL}],
                                  GL :: pid(),
                                  SharedGL :: pid(),
                                  OtherGLs :: [pid()].

此函数将返回在调用时仍在运行的测试和组领导进程的标识。 TestProcs 是系统中以 Common Test IO 进程为组领导的进程。SharedGL 是中央 Common Test IO 进程,负责为配置函数打印到日志文件并顺序执行测试用例。OtherGLs 是 Common Test IO 进程,用于并行测试用例组中测试用例的日志文件打印。

此函数返回的进程信息可用于在测试执行完成后定位并终止剩余进程。该函数通常从 Common Test Hook 函数调用。

请注意,执行配置函数或测试用例的进程永远不会包含在 TestProcs 中。因此,可以使用后配置钩子函数(例如 post_end_per_suite,post_end_per_group,post_end_per_testcase)来终止 TestProcs 中所有以当前组长进程作为其组长的进程。

还要注意,共享的组长(SharedGL)永远不能由用户终止,只能由 Common Test 终止。但是,并行测试用例组的组长进程(OtherGLs)可以在 post_end_per_group 钩子函数中终止。

链接到此函数

remove_config(Callback, Config)

查看源代码 (自 OTP R14B 起)
-spec remove_config(Callback, Config) -> ok when Callback :: atom(), Config :: string().

删除使用指定回调模块和配置字符串加载的配置变量(及其别名)。

-spec require(Required) -> ok | {error, Reason}
                 when
                     Required :: Key | {Key, SubKeys} | {Key, SubKey, SubKeys},
                     Key :: atom(),
                     SubKeys :: SubKey | [SubKey],
                     SubKey :: atom(),
                     Reason :: term().

检查所需的配置是否可用。任意深度的元组可以指定为 Required。只有元组的最后一个元素可以是 SubKey 的列表。

示例 1. 需要变量 myvar

ok = ct:require(myvar).

在这种情况下,配置文件必须至少包含

{myvar,Value}.

示例 2. 需要具有子键 sub1sub2 的键 myvar

ok = ct:require({myvar,[sub1,sub2]}).

在这种情况下,配置文件必须至少包含

{myvar,[{sub1,Value},{sub2,Value}]}.

示例 3. 需要具有子键 sub1 且具有 subsub1 的键 myvar

ok = ct:require({myvar,sub1,sub2}).

在这种情况下,配置文件必须至少包含

{myvar,[{sub1,[{sub2,Value}]}]}.

另请参阅 ct:get_config/1, ct:get_config/2, ct:get_config/3, ct:require/2

链接到此函数

require(Name, Required)

查看源代码
-spec require(Name, Required) -> ok | {error, Reason}
                 when
                     Name :: atom(),
                     Required :: Key | {Key, SubKey} | {Key, SubKey, SubKey},
                     SubKey :: Key,
                     Key :: atom(),
                     Reason :: term().

检查所需的配置是否可用,并为其指定一个名称。Required 的语义与 ct:require/1 中的相同,只是不能指定 SubKey 的列表。

如果请求的数据可用,则子条目与 Name 相关联,以便可以使用 ct:get_config/1,2 读取元素的值,前提是使用 Name 代替整个 Required 项。

示例

需要一个具有 Telnet 连接和 FTP 连接的节点。将节点命名为 a

ok = ct:require(a,{machine,node}).

然后,对该节点的所有引用都可以使用节点名称。例如,通过 FTP 获取的文件如下所示

ok = ct:ftp_get(a,RemoteFile,LocalFile).

为了使其正常工作,配置文件必须至少包含

{machine,[{node,[{telnet,IpAddr},{ftp,IpAddr}]}]}.

注意

此函数的行为在 Common Test 1.6.2 中发生了根本性的变化。为了保持一些向后兼容性,仍然可以执行以下操作:ct:require(a,{node,[telnet,ftp]}). 这会将名称 a 与顶层 node 条目关联。为了使其正常工作,配置文件必须至少包含:{node,[{telnet,IpAddr},{ftp,IpAddr}]}.

另请参阅 ct:get_config/1, ct:get_config/2, ct:get_config/3, ct:require/1

-spec run(TestDirs) -> Result
             when
                 TestDirs :: TestDir | [TestDir],
                 TestDir :: string(),
                 Result :: [TestResult] | {error, Reason},
                 TestResult :: term(),
                 Reason :: term().

运行指定目录中所有套件中的所有测试用例。

另请参阅 ct:run/3

-spec run(TestDir, Suite) -> Result
             when
                 TestDir :: string(),
                 Suite :: atom(),
                 Result :: [TestResult] | {error, Reason},
                 TestResult :: term(),
                 Reason :: term().

运行指定套件中的所有测试用例。

另请参阅 ct:run/3

链接到此函数

run(TestDir, Suite, Cases)

查看源代码
-spec run(TestDir, Suite, Cases) -> Result
             when
                 TestDir :: string(),
                 Suite :: atom(),
                 Cases :: atom() | [atom()],
                 Result :: [TestResult] | {error, Reason},
                 TestResult :: term(),
                 Reason :: term().

运行指定的测试用例。

要求先运行 ct:install/1

套件(*_SUITE.erl)文件必须存储在 TestDirTestDir/test 中。运行测试时,会编译所有套件。

-spec run_test(Opts) -> Result
                  when
                      Opts :: [OptTuples],
                      OptTuples ::
                          {dir, TestDirs} |
                          {suite, Suites} |
                          {group, Groups} |
                          {testcase, Cases} |
                          {spec, TestSpecs} |
                          {join_specs, boolean()} |
                          {label, Label} |
                          {config, CfgFiles} |
                          {userconfig, UserConfig} |
                          {allow_user_terms, boolean()} |
                          {logdir, LogDir} |
                          {silent_connections, Conns} |
                          {stylesheet, CSSFile} |
                          {cover, CoverSpecFile} |
                          {cover_stop, boolean()} |
                          {step, StepOpts} |
                          {event_handler, EventHandlers} |
                          {include, InclDirs} |
                          {auto_compile, boolean()} |
                          {abort_if_missing_suites, boolean()} |
                          {create_priv_dir, CreatePrivDir} |
                          {multiply_timetraps, M} |
                          {scale_timetraps, boolean()} |
                          {repeat, N} |
                          {duration, DurTime} |
                          {until, StopTime} |
                          {force_stop, ForceStop} |
                          {decrypt, DecryptKeyOrFile} |
                          {refresh_logs, LogDir} |
                          {logopts, LogOpts} |
                          {verbosity, VLevels} |
                          {basic_html, boolean()} |
                          {esc_chars, boolean()} |
                          {keep_logs, KeepSpec} |
                          {ct_hooks, CTHs} |
                          {ct_hooks_order, CTHsOrder} |
                          {enable_builtin_hooks, boolean()} |
                          {release_shell, boolean()},
                      TestDirs :: [string()] | string(),
                      Suites :: [string()] | [atom()] | string() | atom(),
                      Cases :: [atom()] | atom(),
                      Groups :: GroupNameOrPath | [GroupNameOrPath],
                      GroupNameOrPath :: [atom()] | atom() | all,
                      TestSpecs :: [string()] | string(),
                      Label :: string() | atom(),
                      CfgFiles :: [string()] | string(),
                      UserConfig :: [{CallbackMod, CfgStrings}] | {CallbackMod, CfgStrings},
                      CallbackMod :: atom(),
                      CfgStrings :: [string()] | string(),
                      LogDir :: string(),
                      Conns :: all | [atom()],
                      CSSFile :: string(),
                      CoverSpecFile :: string(),
                      StepOpts :: [StepOpt],
                      StepOpt :: config | keep_inactive,
                      EventHandlers :: EH | [EH],
                      EH :: atom() | {atom(), InitArgs} | {[atom()], InitArgs},
                      InitArgs :: [term()],
                      InclDirs :: [string()] | string(),
                      CreatePrivDir :: auto_per_run | auto_per_tc | manual_per_tc,
                      M :: integer(),
                      N :: integer(),
                      DurTime :: HHMMSS,
                      HHMMSS :: string(),
                      StopTime :: YYMoMoDDHHMMSS | HHMMSS,
                      YYMoMoDDHHMMSS :: string(),
                      ForceStop :: skip_rest | boolean(),
                      DecryptKeyOrFile :: {key, DecryptKey} | {file, DecryptFile},
                      DecryptKey :: string(),
                      DecryptFile :: string(),
                      LogOpts :: [LogOpt],
                      LogOpt :: no_nl | no_src,
                      VLevels :: VLevel | [{Category, VLevel}],
                      VLevel :: integer(),
                      Category :: atom(),
                      KeepSpec :: all | pos_integer(),
                      CTHs :: [CTHModule | {CTHModule, CTHInitArgs}],
                      CTHsOrder :: atom(),
                      CTHModule :: atom(),
                      CTHInitArgs :: term(),
                      Result ::
                          {Ok, Failed, {UserSkipped, AutoSkipped}} | TestRunnerPid | {error, Reason},
                      Ok :: integer(),
                      Failed :: integer(),
                      UserSkipped :: integer(),
                      AutoSkipped :: integer(),
                      TestRunnerPid :: pid(),
                      Reason :: term().

按照 Opts 中选项的组合运行测试。这些选项与程序 ct_run 使用的选项相同,请参阅 ct_run 手册页中的 从命令行运行测试

此处,TestDir 可用于指出 Suite 的路径。选项 testcase 对应于程序 ct_run 中的选项 -case。在 Opts 中指定的配置文件会在启动时自动安装。

如果 release_shell == true,则返回 TestRunnerPid。有关详细信息,请参阅 ct:break/1

Reason 表示遇到的错误类型。

链接到此函数

run_testspec(TestSpec)

查看源代码
-spec run_testspec(TestSpec) -> Result
                      when
                          TestSpec :: [term()],
                          Result :: {Ok, Failed, {UserSkipped, AutoSkipped}} | {error, Reason},
                          Ok :: integer(),
                          Failed :: integer(),
                          UserSkipped :: integer(),
                          AutoSkipped :: integer(),
                          Reason :: term().

运行由 TestSpec 指定的测试。使用的术语与测试规范文件中使用的术语相同。

Reason 表示遇到的错误类型。

链接到此函数

set_verbosity(Category, Level)

查看源代码 (自 OTP 19.1 起)
-spec set_verbosity(Category, Level) -> ok when Category :: default | atom(), Level :: integer().

使用此函数设置或修改日志记录类别的详细程度。 有关详细信息,请参阅用户指南。 使用值 default 设置常规详细级别。

链接到此函数

sleep(Time)

查看源代码 (自 OTP R14B 起)
-spec sleep(Time) -> ok
               when
                   Time :: {hours, Hours} | {minutes, Mins} | {seconds, Secs} | Millisecs | infinity,
                   Hours :: integer(),
                   Mins :: integer(),
                   Secs :: integer(),
                   Millisecs :: integer() | float().

此函数类似于 STDLIB 中的 timer:sleep/1,将测试用例挂起指定的时间。但是,此函数还会将 Time 乘以 multiply_timetraps 值(如果设置),并且在某些情况下,如果 scale_timetraps 设置为 true(默认为 false),则会自动缩放时间。

-spec start_interactive() -> ok.

在交互模式下启动 Common Test

从此模式开始,所有测试用例支持函数都可以直接从 Erlang shell 执行。交互模式也可以从 OS 命令行使用 ct_run -shell [-config File...] 启动。

如果要从 Erlang shell 调用任何使用“所需配置数据”的函数(例如,Telnet 或 FTP),则必须首先使用 ct:require/2 需要配置数据。

示例

> ct:require(unix_telnet, unix).
ok
> ct_telnet:open(unix_telnet).
{ok,<0.105.0>}
> ct_telnet:cmd(unix_telnet, "ls .").
{ok,["ls","file1  ...",...]}
链接到此函数

step(TestDir, Suite, Case)

查看源代码
-spec step(TestDir, Suite, Case) -> Result
              when TestDir :: string(), Suite :: atom(), Case :: atom(), Result :: term().

使用调试器单步执行测试用例。

另请参阅 ct:run/3

链接到此函数

step(TestDir, Suite, Case, Opts)

查看源代码
-spec step(TestDir, Suite, Case, Opts) -> Result
              when
                  TestDir :: string(),
                  Suite :: atom(),
                  Case :: atom(),
                  Opts :: [Opt],
                  Opt :: config | keep_inactive,
                  Result :: term().

使用调试器单步执行测试用例。 如果指定了选项 config,则也会在 Suite 中的配置函数上设置断点。

另请参阅 ct:run/3

-spec stop_interactive() -> ok.

退出交互模式。

另请参阅 ct:start_interactive/0

链接到此函数

sync_notify(Name, Data)

查看源代码 (自 OTP R15B02 起)
-spec sync_notify(Name, Data) -> ok when Name :: atom(), Data :: term().

使用 DataCommon Test 事件管理器发送 Name 类型的同步通知。这稍后可以被任何已安装的事件管理器捕获。

另请参阅 gen_event

链接到此函数

testcases(TestDir, Suite)

查看源代码
-spec testcases(TestDir, Suite) -> Testcases | {error, Reason}
                   when TestDir :: string(), Suite :: atom(), Testcases :: list(), Reason :: term().

返回指定套件中的所有测试用例。

链接到此函数

timetrap(Time)

查看源代码 (自 OTP R14B 起)
-spec timetrap(Time) -> infinity | pid()
                  when
                      Time ::
                          {hours, Hours} |
                          {minutes, Mins} |
                          {seconds, Secs} |
                          Millisecs | infinity | Func,
                      Hours :: integer(),
                      Mins :: integer(),
                      Secs :: integer(),
                      Millisecs :: integer(),
                      Func :: {M, F, A} | function(),
                      M :: atom(),
                      F :: atom(),
                      A :: list().

为正在运行的测试用例设置新的时间陷阱。

如果参数是 Func,则当此函数返回时,将触发时间陷阱。Func 还可以返回新的 Time 值,在这种情况下,该值是新时间陷阱的值。

链接到此函数

userdata(TestDir, Suite)

查看源代码
-spec userdata(TestDir, Suite) -> SuiteUserData | {error, Reason}
                  when TestDir :: string(), Suite :: atom(), SuiteUserData :: [term()], Reason :: term().

返回从 suite/0 返回的元组列表中用标签 userdata 指定的任何数据。

链接到此函数

userdata(TestDir, Suite, Case)

查看源代码
-spec userdata(TestDir, Suite, Case :: GroupOrCase) -> TCUserData | {error, Reason}
                  when
                      TestDir :: string(),
                      Suite :: atom(),
                      GroupOrCase :: {group, GroupName} | atom(),
                      GroupName :: atom(),
                      TCUserData :: [term()],
                      Reason :: term().

返回从 Suite:group(GroupName)Suite:Case() 返回的元组列表中用标签 userdata 指定的任何数据。