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 |