Robot Framework 新版教程 - 创建测试套件
(Robot Framework 7.x 教程, Part 5)
Robot Framework 的测试用例创建于测试用例文件中,这些文件可以组织到不同的目录中。这些文件和目录共同构成了一个分层的测试套件结构。在创建任务时,这些概念同样适用,但使用的术语有所不同。
套件文件
Robot Framework 的测试用例在套件文件(也称为测试用例文件)的测试用例部分中创建。这样的文件会自动将其包含的所有测试用例构成一个测试套件。文件中可以包含的测试用例数量没有上限,但建议少于十个,除非使用数据驱动的方法——在此方法中,一个测试用例仅包含一个高层级的关键字。
在设置部分中,可以使用以下配置来自定义套件:
- Name:用于设置自定义的套件名称。默认名称基于文件或目录名生成。
- Documentation:用于指定套件的说明文档。
- Metadata:用于以名称-值对的形式设置自由的套件元数据。
- Suite Setup, Suite Teardown:指定套件的初始化和清理操作。
套件目录
测试用例文件可以按目录组织,这些目录会形成更高级别的测试套件。由目录创建的测试套件本身不能直接包含任何测试用例,而是包含其他带有测试用例的套件。这些目录还可以进一步放入其他目录中,从而形成更高级别的套件。目录结构没有限制,因此可以根据需要灵活组织测试用例。
当执行一个测试目录时,会递归处理其中的文件和目录,具体规则如下:
- 名称以点号(
.)或下划线(_)开头的文件和目录将被忽略。 - 名为 CVS 的目录将被忽略(区分大小写)。
- 支持格式的文件会被处理。
- 其他文件将被忽略。
如果被处理的文件或目录中未包含任何测试用例,系统会静默忽略(仅向系统日志写入一条消息),并继续执行后续处理。
套件初始化文件
通过目录创建的测试套件可以拥有与通过测试用例文件创建的套件类似的设置。由于目录本身无法包含这类信息,因此必须将其放置在一个特殊的测试套件初始化文件中。初始化文件的名称必须始终采用 __init__.ext 格式,其中扩展名必须是支持的测试文件格式之一(通常是 __init__.robot)。该命名格式借鉴自 Python,在这种命名方式下,文件表示该目录是一个模块。
从 Robot Framework 6.1 开始,也可以通过提供多个路径,在开始测试执行时为自动创建的套件定义一个套件初始化文件。
初始化文件的结构和语法与测试用例文件相同,但它们不能包含测试用例部分,并且不支持所有设置。在初始化文件中创建或导入的变量和关键字,在较低层级的测试套件中不可用。如果需要共享变量或关键字,可以将它们放入资源文件中,该资源文件既可以被初始化文件导入,也可以被测试用例文件导入。
初始化文件的主要用途是类似于套件文件,指定与测试套件相关的设置,但也可以设置一些与测试用例相关的设置。以下将说明如何在初始化文件中使用不同的设置。
Name,Documentation,Metadata,Suite Setup,Suite Teardown。这些套件专有的设置在套件初始化文件中的使用方式与在套件文件中完全相同。Test Tags。指定的标签会无条件地递归设置到此目录包含的所有套件文件中的所有测试中。此功能为 Robot Framework 6.1 的新增特性。在旧版本中需要使用已弃用的Force Tags设置。Test Setup,Test Teardown,Test Timeout。为此目录包含的所有测试用例设置测试初始化/清理或测试超时的默认值。可在更低层级中覆盖此设置。请注意,用作初始化和清理的关键字必须在用到它们的测试用例文件中可用,仅在初始化文件中定义关键字是不够的。Task Setup,Task Teardown,Task Tags,Task Timeout。分别为Test Setup、Test Teardown、Test Tags和Test Timeout的别名,可用于创建任务(而非测试)时。Default Tags,Test Template。初始化文件中不支持这些设置。
*** Settings ***
Documentation Example suite
Suite Setup Do Something ${MESSAGE}
Test Tags example
Library SomeLibrary
*** Variables ***
${MESSAGE} Hello, world!
*** Keywords ***
Do Something
[Arguments] ${args}
Some Keyword ${arg}
Another Keyword
套件名称
默认情况下,测试套件的名称基于文件或目录的名称生成。生成规则为:忽略扩展名,将可能存在的下划线替换为空格,并将完全小写的名称转换为首字母大写形式。例如,some_tests.robot 会变为 Some Tests,My_test_directory 会变为 My test directory。
文件或目录名可以包含一个前缀,用于控制套件的执行顺序。前缀与基本名称之间由两个下划线分隔。在构建实际的测试套件名称时,前缀及下划线均会被移除。例如,文件 01__some_tests.robot 和 02__more_tests.robot 会分别创建测试套件 Some Tests 和 More Tests,且前者会先于后者执行。
从 Robot Framework 6.1 开始,还可以通过在设置区(Setting section)使用 Name 设置项来为套件指定自定义名称:
*** Settings ***
Name Custom suite name
顶层套件的名称可以通过命令行中的 --name 选项进行覆盖。
套件文档
测试套件的文档通过 Settings 部分中的 Documentation 设置项进行设置。该设置项既可用于套件文件,也可用于套件初始化文件。套件文档在显示位置和创建方式上与测试用例文档具有完全相同的特性。有关语法的详细信息,请参阅文档格式化附录。
*** Settings ***
Documentation An example suite documentation with *some* _formatting_.
... Long documentation can be split into multiple lines.
顶层套件的文档可以通过命令行中的 --doc 选项进行覆盖。
测试套件的自由元数据
除了文档之外,测试套件还可以拥有自由元数据。这些元数据在 Settings 部分通过 Metadata 设置项以“名称-值”对的形式进行定义,其展示方式与文档类似,会在报告和日志中呈现。
元数据的名称是提供给 Metadata 设置项的第一个参数,其余参数则指定其值。元数据的值处理方式与文档类似,这意味着它支持 HTML 格式和变量,并且较长的值可以拆分成多行。
*** Settings ***
Metadata Version 2.0
Metadata Robot Framework http://robotframework.org
Metadata Platform ${PLATFORM}
Metadata Longer Value
... Longer metadata values can be split into multiple
... rows. Also *simple* _formatting_ is supported.
顶层套件的自由元数据可以通过命令行中的 --metadata 选项进行设置。
套件的初始化和清理
不仅测试用例可以设置初始化和清理,测试套件同样可以拥有初始化和清理步骤。套件初始化 会在执行该套件内任何测试用例或子测试套件之前运行,而 套件清理 则在它们之后执行。所有测试套件均可设置初始化和清理;对于通过目录创建的套件,必须在套件初始化文件中进行配置。
与测试用例类似,套件的初始化和清理也是关键字,并且可以接受参数。它们分别在 Settings 部分通过 Suite Setup 和 Suite Teardown 设置项进行定义。关键字名称及可能的参数位于设置名称之后的列中。
如果套件初始化失败,则该套件及其所有子套件中的所有测试用例将立即被标记为失败状态,并且实际不会被执行。这使得套件初始化非常适合用于检查运行测试用例前必须满足的前提条件。
套件清理通常用于在所有测试用例执行完毕后进行清理工作。即使同一套件的初始化失败,清理步骤仍会执行。如果套件清理失败,则无论测试用例的原始执行状态如何,套件中的所有测试用例都将被标记为失败。需要注意的是,即使套件清理中的某个关键字执行失败,后续的所有关键字仍会继续执行。
作为初始化或清理执行的关键字名称可以是变量。这使得可以通过命令行将关键字名称作为变量传入,从而实现在不同环境下使用不同的初始化或清理步骤。