Robot Framework(十) 执行测试用例——测试执行
3.2测试执行
本节描述如何执行从解析的测试数据创建的测试套件结构,如何在失败后继续执行测试用例,以及如何正常停止整个测试执行。
3.2.1执行流程
执行套房和测试
测试用例总是在测试套件中执行。从测试用例文件创建的测试套件直接进行测试,而从目录创建的套件具有子测试套件,这些套件具有测试或他们自己的子套件。默认情况下,在执行套件中的所有测试运行,但也可以选择测试使用的选项--test,--suite,--include和 --exclude。不包含测试的套件将被忽略。
执行从顶级测试套件开始。如果套件具有测试,则它们是逐个执行的,如果它具有套件,则它们以深度优先顺序递归执行。执行单个测试用例时,它包含的关键字按顺序运行。通常,如果任何关键字失败,则当前测试的执行结束,但也可能 在失败后继续。以下各节将讨论确切的执行顺序以及可能的设置和拆卸如何影响执行。
设置和拆卸
可以在测试用例和测试套件级别定义设置和拆卸。
套房设置
如果测试套件有设置,则在测试和子套件之前执行。如果套件设置通过,则测试执行将继续正常进行。如果失败,套件及其子套件标记失败的所有测试用例都会失败,并显示父套件的安装失败。。不执行子测试套件中的测试和可能的套件设置和拆卸。
套件设置通常用于设置测试环境。因为如果套件设置失败,则不运行测试,因此很容易使用套件设置来验证环境是否处于可以执行测试的状态。
套房拆解
如果测试套件有拆卸,则会在所有测试用例和子套件之后执行。无论测试状态如何,即使匹配的套件设置失败,也会执行套件拆解。如果套件拆卸失败,则套件中的所有测试都会在报告和日志中标记为失败。
套件拆解主要用于在执行后清理测试环境。为了确保完成所有这些任务,即使其中一些关键字失败,也会执行拆解中使用的所有关键字。
测试设置
可能的测试设置在测试用例的关键字之前执行。如果设置失败,则不执行关键字。测试设置的主要用途是为特定测试用例设置环境。
测试拆解
在测试用例执行后执行可能的测试拆卸。无论测试状态如何,以及测试设置是否失败,都会执行它。
与套件拆解类似,测试拆卸主要用于清理活动。即使他们的一些关键字失败,它们也会被完全执行。
执行顺序
测试套件中的测试用例的执行顺序与测试用例文件中定义的顺序相同。更高级别测试套件内的测试套件基于文件或目录名称以不区分大小写的字母顺序执行。如果从命令行给出多个文件和/或目录,则按照给定的顺序执行它们。
如果需要在目录中使用某个测试套件执行顺序,则可以在文件和目录名称中添加01和 02之类的前缀。如果这些前缀与具有两个下划线的套件的基本名称分开,则它们不包含在生成的测试套件名称中:
01__my_suite.html -> My Suite 02__another_suite.html -> Another Suite
如果套件内的测试套件的字母顺序存在问题,那么一个好的解决方法是按要求的顺序单独提供它们。这很容易导致启动命令过长,但参数文件允许每行很好地列出一个文件。
也可以使用--runmode选项随机化执行顺序。
3.2.2继续失败
通常,当任何关键字失败时,测试用例会立即停止。如果被测系统处于不稳定状态,此行为会缩短测试执行时间并防止后续关键字挂起或以其他方式导致问题。这具有以下缺点:通常后续关键字将提供关于系统状态的更多信息。
在Robot Framework 2.5之前,处理故障以便不立即终止测试执行的唯一方法是使用BuiltIn关键字 运行关键字并忽略错误并运行关键字和期望错误。为此目的使用这些关键字通常会给测试用例增加额外的复杂性,并且在Robot Framework 2.5中添加了以下功能,以便在故障后继续更容易。
关键字的特殊失败
库关键字使用异常报告失败,并且可以使用特殊异常来告知核心框架,无论失败,执行都可以继续。如何创建这些异常在测试库API章节中进行了解释。
当测试结束并且存在一个或多个可持续故障时,测试将标记为失败。如果存在多个故障,则将在最终错误消息中枚举所有故障:
Several failures occurred: 1) First error message. 2) Second error message ...
如果在可持续故障之后发生正常故障,则测试执行也结束。同样在这种情况下,所有失败都将列在最终的错误消息中。
失败关键字的返回值(可能分配给变量)始终是Python None。
运行关键字并继续失败关键字
BuiltIn关键字 Run Keyword And Continue On Failure允许将任何故障转换为可持续的故障。这些失败由框架处理,与源自库关键字的可持续故障完全相同。
自动执行拆解后继续执行
为了确保所有清理活动都得到处理,继续失败模式会在测试和套件拆解中自动启动。实际上,这意味着在拆解时,所有级别中的所有关键字始终都会执行。
当测试具有模板时,将执行所有顶级关键字
使用测试模板时,始终会执行所有数据行,以确保测试所有不同的组合。在这种用法中,继续仅限于顶级关键字,并且在其内部,如果存在不可持续的故障,则执行正常结束。
3.2.3优雅地停止测试执行
有时需要在所有测试完成之前停止测试执行,但这样才能创建日志和报告。以下解释如何实现此目的的不同方式。在所有这些情况下,剩余的测试用例都标记为失败。
注意
这些功能中的大多数是Robot Framework 2.5中的新功能。早期版本仅支持ExitOnFailure模式。
按Ctrl-C
在运行测试的控制台中按下Ctrl-C时,将停止执行。在Python上运行测试时,会立即停止执行,但是在Jython中,只有在当前执行的关键字结束后才会结束。
如果再次按下Ctrl-C,则执行立即结束,并且不会创建报告和日志。
使用信号
在类Unix的机器上,可以使用信号INT和TERM终止测试执行。这些信号可以使用kill命令从命令行发送,发送信号也可以很容易地自动化。
信号对Jython的限制与按Ctrl-C相同。同样地,第二信号也强制停止执行。
使用关键字
执行的关键字也可以停止执行。为此目的,有一个单独的致命错误 BuiltIn关键字,并且自定义关键字在失败时可以使用致命异常。
ExitOnFailure模式
如果选项--runmode与值ExitOnFailure一起使用 (不区分大小写),则在关键测试失败并且其余测试标记为失败时,测试的执行会立即停止。
处理拆卸
默认情况下,即使使用上述方法之一停止测试执行,也会执行已启动的测试和套件的拆卸。这允许在不管执行结束的情况下运行清理活动。
从Robot Framework 2.5.2开始,如果使用--runmode SkipTeardownOnExit命令行选项,则在执行停止时会跳过拆卸。如果清理需要花费很多时间,这可能很有用。