非常教程

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,则返回值为或referenceerlang: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的当前内部状态。

Returninit_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_skiptc_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

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1