查看源码 ct (common_test v1.27.5)
用于 Common Test
框架的主要用户接口。
此模块实现用于运行测试的命令行接口,以及用于 Common Test
用例问题的基本功能,例如配置和日志记录。
框架将配置值存储在通常名为 Config
的属性列表中。该列表包含有关测试运行的信息(由框架本身添加),并且可能还包含用户提供的值。配置被传递到单独的测试用例以及支持函数(如果已定义)。
可能的配置变量包括
data_dir
- 数据文件目录priv_dir
- 临时文件目录- 任何由测试套件中的
init_per_suite/1
或init_per_testcase/2
添加的内容。
警告
用于从
Config
属性列表接收单个配置值的?config
宏已弃用。请改用proplists:get_value/2-3
。
摘要
类型
配置文件中存在的配置键
可以传递给 cth_conn_log
钩子的选项,该钩子用于记录 NETCONF 和 Telnet 连接。有关如何使用此钩子的描述和示例,请参阅 ct_netconfc 或 ct_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
是任何有效的测试规范标签,例如 label
、config
或 logdir
。如果设置了选项 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
中的配置函数上设置断点。
退出交互模式。
使用 Data
向 Common 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_netconfc 或 ct_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]})
。
函数
-spec abort_current_testcase(Reason) -> ok | {error, ErrorReason} when Reason :: term(), ErrorReason :: no_testcase_running | parallel_group.
中止当前正在执行的测试用例。用户必须确切知道当前正在执行哪个测试用例。因此,此函数仅在由测试用例调用(或同步调用)的函数中调用才是安全的。
中止测试用例的原因 Reason
将打印在测试用例日志中。
-spec add_config(Callback, Config) -> ok | {error, Reason} when Callback :: atom(), Config :: string(), Reason :: term().
使用指定的回调模块和配置字符串加载配置变量。回调模块必须已加载或存在于代码路径中。可以使用函数 ct:remove_config/2
删除已加载的配置变量。
-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 程序运行测试 部分。
-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
。
-spec capture_get() -> ListOfStrings when ListOfStrings :: [string()].
-spec capture_get(ExclCategories) -> ListOfStrings when ExclCategories :: [atom()], ListOfStrings :: [string()].
返回并清除在最近一次捕获打印到 stdout
的会话期间缓冲的文本字符串列表。ListOfStrings
中要忽略的日志类别可以使用 ExclCategories
指定。如果 ExclCategories = []
,则不进行任何过滤。
-spec capture_start() -> ok.
开始捕获在执行测试用例期间打印到 stdout
的所有文本字符串。
-spec capture_stop() -> ok.
停止捕获文本字符串(会话以 capture_start/0
开始)。
-spec comment(Comment) -> ok when Comment :: term().
在测试套件结果页面上的表格的注释字段中打印指定的 Comment
。
如果多次调用,则仅打印最后一个注释。测试用例返回值 {comment,Comment}
会覆盖由此函数设置的字符串。
在测试套件结果页面上的表格的注释字段中打印格式化的字符串。
参数 Format
和 Args
在调用 io_lib:format/2
中用于创建注释字符串。comment/2
的行为与函数 ct:comment/1
的行为相同。
-spec continue() -> ok.
在测试用例(不在并行组中执行)调用函数 ct:break/1
后,必须调用此函数才能继续。
-spec continue(TestCase) -> ok when TestCase :: atom().
在测试用例调用 ct:break/2
后,必须调用此函数才能继续。如果暂停的测试用例 TestCase
在并行组中执行,则必须使用此函数(而不是 continue/0
)来让测试用例继续执行。
-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
的文本文件中可用,该文件位于当前目录或用户的家目录中(按此顺序搜索)。
-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
生成。原始文件内容保存在目标文件中。密钥的值必须与用于加密的密钥的值相同。
-spec encrypt_config_file(SrcFileName, EncryptFileName) -> ok | {error, Reason} when SrcFileName :: string(), EncryptFileName :: string(), Reason :: term().
使用 DES3 加密源配置文件,并将结果保存在文件 EncryptFileName
中。密钥(一个字符串)必须在名为 .ct_config.crypt
的文本文件中可用,该文件位于当前目录或用户的家目录中(按此顺序搜索)。
有关在运行测试时使用加密配置文件的信息,请参阅用户指南中的加密配置文件部分。
有关 DES3 加密/解密的详细信息,请参阅应用程序 Crypto
。
-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
。
以指定的错误 Reason
终止测试用例。
使用由格式字符串和值列表(用作 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().
-spec get_config(Required, Default) -> Value when Required :: KeyOrName | {KeyOrName, SubKey} | {KeyOrName, SubKey, SubKey}, KeyOrName :: key_or_name(), SubKey :: atom(), Default :: term(), Value :: term().
-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/2
或 require
语句指定)匹配的值或配置元素。
示例
给定以下配置文件
{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/2
或 require
语句),则可以使用该名称代替键来读取该值
ct:require(myuser,{unix,user}) -> ok.
ct:get_config(myuser,Default) -> [{username,Username}, {password,Password}]
如果配置变量在多个文件中定义,请使用选项 all
来访问所有可能的值。 这些值在列表中返回。元素的顺序对应于在启动时指定配置文件的顺序。
如果要返回配置元素(键值元组)而不是值,请使用选项 element
。 返回的元素的形式为 {Required,Value}
。
另请参阅 ct:get_config/1
、ct:get_config/2
、ct:require/1
、ct:require/2
。
-spec get_event_mgr_ref() -> EvMgrRef when EvMgrRef :: atom().
获取 Common Test
事件管理器的引用。此引用可用于例如在测试运行时添加用户特定的事件处理程序。
示例
gen_event:add_handler(ct:get_event_mgr_ref(), my_ev_h, [])
-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().
返回正在进行的测试的状态。返回的列表包含有关正在执行哪个测试用例(当并行测试用例组正在执行时,是一个用例列表)的信息,以及到目前为止成功、失败、跳过和总测试用例的计数器。
-spec get_target_name(Handle) -> {ok, TargetName} | {error, Reason} when Handle :: handle(), TargetName :: target_name(), Reason :: term().
返回指定连接所属的目标的名称。
-spec get_testspec_terms() -> TestSpecTerms | undefined when TestSpecTerms :: [{Tag, Value}], Tag :: atom(), Value :: [term()].
获取用于配置和运行此测试的所有测试规范项的列表。
-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
是任何有效的测试规范标签,例如 label
、config
或 logdir
。如果设置了选项 allow_user_terms
,还可以读取用户特定的项。
所有返回的值元组,除了用户项之外,第一个元素都是节点名称。
要读取测试项,请使用 Tag = tests
(而不是 suites
,groups
或 cases
)。Value
是一个列表,其中包含所有格式为 [{Node,Dir,[{TestSpec,GroupsAndCases1},...]},...]
的测试,其中 GroupsAndCases = [{Group,[Case]}] | [Case]
。
-spec get_timetrap_info() -> {Time, {Scaling, ScaleVal}} when Time :: integer() | infinity, Scaling :: boolean(), ScaleVal :: integer().
读取有关为当前测试用例设置的超时陷阱的信息。Scaling
指示 Common Test
是否会尝试自动补偿由工具(如 cover)引入的运行时延迟的超时陷阱。ScaleVal
是当前缩放乘数的值(如果禁用缩放,则始终为 1)。请注意 Time
不是缩放结果。
-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().
-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.
-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.
从测试用例打印到日志文件。
此函数用于直接从测试用例向测试用例日志文件打印字符串。
默认的 Category
是 default
,默认的 Importance
是 ?STD_IMPORTANCE
,FormatArgs
的默认值是 []
。
有关 Category
,Importance
和 no_css
选项的详细信息,请参阅用户指南中的 日志记录 - 类别和详细级别 部分。
除非使用 esc_chars
选项,否则 Common Test 不会转义使用此函数打印的文本中的特殊 HTML 字符(<,> 和 &)。
-spec make_priv_dir() -> ok | {error, Reason} when Reason :: term().
如果测试以选项 create_priv_dir
设置为 manual_per_tc
启动,为了使测试用例可以使用私有目录,它必须首先调用此函数来创建它。
使用 Data
将类型为 Name
的异步通知发送到 Common Test 事件管理器。以后可以由任何已安装的事件管理器捕获此通知。
另请参阅 gen_event
。
-spec pal(Format) -> ok when Format :: string().
-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.
-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.
从测试用例打印并记录。
此函数用于从测试用例打印字符串,同时打印到测试用例日志文件和控制台。
默认的 Category
是 default
,默认的 Importance
是 ?STD_IMPORTANCE
,FormatArgs
的默认值是 []
。
有关 Category
和 Importance
的详细信息,请参阅用户指南中的 日志记录 - 类别和详细级别 部分。
请注意,在将文本打印到日志文件之前,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().
-spec print(Category, Importance, Format, FormatArgs, Opts) -> ok when Category :: atom() | integer() | string(), Importance :: integer(), Format :: string(), FormatArgs :: list(), Opts :: [Opt], Opt :: {heading, string()}.
从测试用例打印到控制台。
此函数用于从测试用例向控制台打印字符串。
默认的 Category
是 default
,默认的 Importance
是 ?STD_IMPORTANCE
,FormatArgs
的默认值是 []
。
有关 Category
和 Importance
的详细信息,请参阅用户指南中的 日志记录 - 类别和详细级别 部分。
-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().
重新加载包含指定配置键的配置文件。
此函数更新从中读取指定配置变量的配置数据,并返回此变量的(可能)新值。
如果某些变量存在于配置中,但未使用此函数加载,则它们会从配置表中删除,同时删除其别名。
-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 钩子函数中终止。
删除使用指定回调模块和配置字符串加载的配置变量(及其别名)。
-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. 需要具有子键 sub1
和 sub2
的键 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
。
-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
。
-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
)文件必须存储在 TestDir
或 TestDir/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
表示遇到的错误类型。
-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
表示遇到的错误类型。
使用此函数设置或修改日志记录类别的详细程度。 有关详细信息,请参阅用户指南。 使用值 default
设置常规详细级别。
-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 ...",...]}
-spec step(TestDir, Suite, Case) -> Result when TestDir :: string(), Suite :: atom(), Case :: atom(), Result :: term().
使用调试器单步执行测试用例。
另请参阅 ct:run/3
。
-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
。
使用 Data
向 Common Test
事件管理器发送 Name
类型的同步通知。这稍后可以被任何已安装的事件管理器捕获。
另请参阅 gen_event
。
-spec testcases(TestDir, Suite) -> Testcases | {error, Reason} when TestDir :: string(), Suite :: atom(), Testcases :: list(), Reason :: term().
返回指定套件中的所有测试用例。
-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
值,在这种情况下,该值是新时间陷阱的值。
-spec userdata(TestDir, Suite) -> SuiteUserData | {error, Reason} when TestDir :: string(), Suite :: atom(), SuiteUserData :: [term()], Reason :: term().
返回从 suite/0
返回的元组列表中用标签 userdata
指定的任何数据。
-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
指定的任何数据。