Erlang 20参考手册
common_test
ct_hooks
模块
ct_hooks
模块摘要
通用测试顶部的回调接口。
描述
在通用测试钩(星期三)框架允许的默认行为扩展Common Test的回调之前,所有测试套件来电之后。它适用于Common Test想要抽象出多个测试套件共有的行为的高级用户。
简而言之,Cth允许您:
- 在每个套件配置调用之前操作运行时配置。
- 操作所有套件配置调用的返回,并扩展到测试结果本身。
以下部分描述Common Test在测试执行期间调用的强制性和可选CTH函数。有关更多详细信息,请参阅Common Test Hooks用户指南中的部分。
有关如何将CTH添加到套件的信息,请参见Installing a CTH用户指南中的一节。
注
有关CTH的最简单示例,请参见Example CTH用户指南中的部分。
回调函数
以下函数定义了Cth的回调接口。
出口
Module:init(Id, Opts) -> {ok, State} | {ok, State, Priority}
类型
强制性
此函数始终在任何其他回调函数之前调用。用它来启动任何常见状态。这是返回一个状态为这个CTH。
Id如果未实现ct_hooks:id/1,则返回值为或reference(erlang:make_ref/0在ERTS中创建)ct_hooks:id/1。
Priority是这个钩子的相对优先级。首先执行较低优先级的挂钩。如果未指定优先级,则将其设置为0。
有关何时init调用的详细信息,请参见CTH Scope用户指南中的一节。
Module:pre_init_per_suite(SuiteName, InitData, CTHState) -> Result
类型
任选
init_per_suite如果它存在,此函数将被调用。它通常包含必须在init_per_suite调用之前完成的初始化/日志记录。如果{skip,Reason}或者{fail,Reason}被返回,init_per_suite并且套件的所有测试用例都被跳过并Reason打印在套件的概要日志中。
SuiteName要运行的套件的名称。
InitData是测试套件的原始配置列表,或者SkipOrFail如果之前的CTH已经返回了此元组,则为元组。
CTHState 是CTH的当前内部状态。
Return是init_per_suite函数的结果。如果{skip,Reason}还是{fail,Reason},init_per_suite永远不会被调用,而不是开始被认为分别被跳过或失败。如果NewConfig列表返回,init_per_suite则使用该NewConfig列表调用。有关更多详细信息,请参阅Pre Hooks用户指南中的部分。
这个函数只有在CTH被添加之前被调用init_per_suite is run。有关详细信息,请参阅CTH Scope用户指南中的部分。
Module:post_init_per_suite(SuiteName, Config, Return, CTHState) -> Result
类型
任选
init_per_suite如果存在,则调用该函数。它通常包含额外的检查以确保正确启动所有正确的依赖关系。
Return是什么init_per_suite被返回,那就是{fail,Reason},{skip,Reason},一个Config列表,或者一个术语描述了如何init_per_suite失败。
NewReturn是可能修改的返回值init_per_suite。要从失败中init_per_suite恢复ConfigList,请tc_status移除该元素并返回。有关更多详细信息,请参阅Post Hooks用户指南中的“操作测试”一节。
CTHState是Cth的当前内部状态。
只有在CTH被添加之前或之后,该函数才被调用init_per_suite。有关详细信息,请参阅CTH Scope用户指南中的部分。
Module:pre_init_per_group(SuiteName, GroupName, InitData, CTHState) -> Result
类型
任选
init_per_group如果它存在,此函数将被调用。它的行为方式与之相同pre_init_per_suite,但是对于功能而言init_per_group。
如果Module:pre_init_per_group/4未导出,common_test将尝试调用Module:pre_init_per_group(GroupName, InitData, CTHState)。这是为了向后兼容。
Module:post_init_per_group(SuiteName, GroupName, Config, Return, CTHState) -> Result
类型
任选
init_per_group如果存在,则调用该函数。它的行为方式与之相同post_init_per_suite,但是对于功能而言init_per_group。
如果Module:post_init_per_group/5未导出,common_test将尝试调用Module:post_init_per_group(GroupName, Config, Return, CTHState)。这是为了向后兼容。
Module:pre_init_per_testcase(SuiteName, TestcaseName, InitData, CTHState) -> Result
类型
任选
init_per_testcase如果它存在,此函数将被调用。它的行为方式与之相同pre_init_per_suite,但是对于函数而言init_per_testcase。
如果Module:pre_init_per_testcase/4未导出,common_test将尝试调用Module:pre_init_per_testcase(TestcaseName, InitData, CTHState)。这是为了向后兼容。
CTHS现在不能在这里添加。该特性可能会在稍后的版本中添加,但现在它会破坏向后兼容性。
Module:post_init_per_testcase(SuiteName, TestcaseName, Config, Return, CTHState) -> Result
类型
任选
init_per_testcase如果存在,则调用该函数。它的行为方式与之相同post_init_per_suite,但是对于功能而言init_per_testcase。
如果Module:post_init_per_testcase/5未导出,common_test将尝试调用Module:post_init_per_testcase(TestcaseName, Config, Return, CTHState)。这是为了向后兼容。
Module:pre_end_per_testcase(SuiteName, TestcaseName, EndData, CTHState) -> Result
类型
任选
end_per_testcase如果它存在,此函数将被调用。它的行为方式与之相同pre_end_per_suite,但是对于功能而言end_per_testcase。
这个函数不能通过返回跳过元组或失败元组来改变测试用例的结果,但是它可能会插入Config可读入end_per_testcase/2或插入的项post_end_per_testcase/5。
如果Module:pre_end_per_testcase/4未导出,common_test将尝试调用Module:pre_end_per_testcase(TestcaseName, EndData, CTHState)。这是为了向后兼容。
Module:post_end_per_testcase(SuiteName, TestcaseName, Config, Return, CTHState) -> Result
类型
任选
end_per_testcase如果存在,则调用该函数。它的行为方式与之相同post_end_per_suite,但是对于功能而言end_per_testcase。
如果Module:post_end_per_testcase/5未导出,common_test将尝试调用Module:post_end_per_testcase(TestcaseName, Config, Return, CTHState)。这是为了向后兼容。
Module:pre_end_per_group(SuiteName, GroupName, EndData, CTHState) -> Result
类型
任选
end_per_group如果它存在,此函数将被调用。它的行为方式与之相同pre_init_per_suite,但是对于功能而言end_per_group。
如果Module:pre_end_per_group/4未导出,common_test将尝试调用Module:pre_end_per_group(GroupName, EndData, CTHState)。这是为了向后兼容。
Module:post_end_per_group(SuiteName, GroupName, Config, Return, CTHState) -> Result
类型
任选
end_per_group如果存在,则调用该函数。它的行为方式与之相同post_init_per_suite,但是对于功能而言end_per_group。
如果Module:post_end_per_group/5未导出,common_test将尝试调用Module:post_end_per_group(GroupName, Config, Return, CTHState)。这是为了向后兼容。
Module:pre_end_per_suite(SuiteName, EndData, CTHState) -> Result
类型
任选
end_per_suite如果它存在,此函数将被调用。它的行为方式与之相同pre_init_per_suite,但是对于功能而言end_per_suite。
Module:post_end_per_suite(SuiteName, Config, Return, CTHState) -> Result
类型
任选
此函数将在end_per_suite如果它存在的话。它的行为方式与post_init_per_suite,但为了功能end_per_suite相反。
Module:on_tc_fail(SuiteName, TestName, Reason, CTHState) -> NewCTHState
类型
任选
只要测试用例(或配置函数)失败,就会调用该函数。它在调用失败的测试用例的post函数后调用,即:
- 如果
init_per_suite失败,这个函数被调用post_init_per_suite。
- 如果测试用例失败,这个函数会被调用
post_end_per_testcase。
如果失败的测试用例属于测试用例组,则第一个参数是一个元组{FuncName,GroupName},否则只是函数名。
随附的数据采用与事件Reason相同的格式。有关详细信息,请参阅用户指南中的部分。FailReasontc_doneEvent Handling
如果Module:on_tc_fail/4未导出,common_test将尝试调用Module:on_tc_fail(TestName, Reason, CTHState)。这是为了向后兼容。
Module:on_tc_skip(SuiteName, TestName, Reason, CTHState) -> NewCTHState
类型
任选
只要跳过测试用例(或配置函数),就会调用该函数。它在为跳过的测试用例调用post函数后调用,即:
- 如果
init_per_group被跳过,这个函数被调用post_init_per_group。
- 如果跳过测试用例,则此函数在之后调用
post_end_per_testcase。
如果跳过的测试用例属于测试用例组,则第一个参数是元组。{FuncName,GroupName},否则只有函数名。
随附的数据Reason遵循与事件相同的格式tc_auto_skip和tc_user_skip有关详细信息,请参阅Event Handling在用户%27s指南中。
如果Module:on_tc_skip/4不导出,常见[医]测试将尝试调用Module:on_tc_skip(TestName, Reason, CTHState)相反。这是为了向后兼容。
Module:terminate(CTHState)
类型
任选
这个函数在CTH的最后被调用scope。
Module:id(Opts) -> Id
类型
任选
该Id唯一标识CTH实例。如果两个CTH返回相同的值Id,则忽略第二个CTH,并且后续对CTH的调用仅针对第一个实例。有关详细信息,请参阅Installing a CTH用户指南中的部分。
这个功能不会有任何副作用,因为它可以被多次调用Common Test。
如果没有实现,CTH就像这个函数返回一个呼叫一样make_ref/0。
common_test相关
Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。
| 主页 | https://www.erlang.org/ |
| 源码 | https://github.com/erlang/otp |
| 版本 | 20 |
| 发布版本 | 20.1 |
加载中,请稍侯......