Robot Framework - 入门与操作(5)

Creating test data

***** Test suites

测试集没有测试用例个数的限制,但建议不要超过 10 个测试用例。
除非是使用数据驱动模式,这种模式的测试用例仅包含一个高级别关键字。
测试集的注释是在测试集的设置表格中使用  Documentation 标示。
除注释之外的其他元数据可以使用测试集表格中的  Metadata 设置。
这种方式的元数据将在测试报告和日志中显示出来。
测试集的  setup 和 teardown 都可以使用参数。
一个测试集的 setup 将在所有测试用例和子测试集之前被执行,并且 teardown 将在他们所有之后被执行。
假如测试集的 setup 执行失败,所有的测试用例和子测试集都将被标识为失败并不会被执行。
Teardown 用于所有测试用例执行完之后的清理。即使 setup 执行失败,它也将被执行。
假如测试集的 teardown执行失败,所有用例都将被标识为失败,不管他们实际执行的结果如何。
 

***** Test cases

测试用例可以有自己的设置。
[Documentation]
用于说明测试用例的注释。
[Tags]
用于标记测试用例。
[Setup], [Teardown]
用于指定测试用例的 Setup 和 Teardown。其同义词是[Precondition]和[Postcondition]
[Template]
用于指定测试用例模板。这个测试本身将只包含数据,这被用于关键字的参数。
[Timeout]
设置测试用例超时。
 

***** Documentation & Tags & Metadata

[Documentation]
设置可以用于设置测试用例的注释。
这些文字将在命令行输出中显示,也会显示在测试日志和测试报告中。
可以用简单的HTML 格式、或是变量来创建动态注释。
重要的是如果测试用例有清晰和具有描述性的名称,则没有必要对用例添加注释。
[tag]
简单但强大的对测试用例进行分类的机制。
Tag 可以是任意文字,但他们都会被转换为小写字母,并且空格会被删除掉。
假如一个测试用例获取了多次相同的 tag,除了第一个其他的 tag 都将被删除。
Tag 可以用变量创建,假设这些变量是存在的。
Force Tags
如果是在测试集文件中设置的该 tag,那么该测试集下的所有测试用例都将得到该 tag。
Default Tags
测试用例如果没有[tags]设置,将获取该 Default Tags。
Metadata 设置
测试集可以有除注释之外的其他元数据的设置可以使用测试集表格中的 Metadata 设置。
这种方式的元数据将在测试报告和日志中显示出来。
元数据的名称和值跟随在 Metadata 后的列中。
 

***** Setup & Teardown

setup 是在测试用例执行之前执行的, teardown 是在测试用例执行之后执行的。
可以使用带有参数的普通关键字。
Setup 和 teardown 通常是单个关键字。
teardown 在测试用例失败后也能被执行,所以能用来执行必须清理的动作,无论测试用例的状态如何。
teardown 中的所有关键字都将被执行,即使其中有一个失败的。
在测试集中可以设置[Test setup]和[Test teardown]。单独的用例也可以有 setup 和 teardown。
在用例中设置[setup]和[teardown],并且会覆盖 Test setup 和 Test teardown设置。
在[setup]和[teardown]之后没有关键字,则意味着该用例没有 setup 和 teardown。
作为 Setup 和 teardown 执行的关键字名称可以是一个变量。
 

***** Template Test

Test templates convert normal keyword-driven test cases into data-driven tests.
测试模板可以让关键字驱动测试用例转换为数据驱动测试用例。
测试模板主要的使用目的是减少数据驱动测试的冗余。
可以代替文件中测试用例的所有相同关键字。
普通测试用例是由关键字和可能的参数组成,使用了模板的测试用例只需要定义模板关键字的参数即可。
假如一个模板测试用例同下面例子一样有多行测试数据,那这个模板将所有行的数据有效。
模板测试是一种特殊的形式,所有的轮次都将被执行,即使出现执行失败。
 

***** Test case styles_Keyword-driven

由一些关键字和参数所组成。
正常结构是首先让系统进入初始状态(如:有效登陆中的打开登陆页面),
然后是对系统进行操作(输入名字,输入密码,提交认证),最后验证系统行为表现是否同预期一致(如:欢迎页面是否打开)。
 

***** Test case styles_Data-driven

数据驱动,即测试用例只使用一个更高级别的关键字。
通常这个关键字是用户自定义关键字以隐藏实际的测试工作流。
用于测试相同的脚本有不同的输入或输出数据。
测试模板可以让关键字驱动测试用例转换为数据驱动测试用例。
当使用测试模板,测试中的所有轮都将被执行,即使中间出现失败。
 

***** Test case styles_Behavior-driven

是为了让非技术的项目利益相关者也能读懂用例。
是验收测试驱动开发(ATDD)的基石。
使用 Given-When-Then 模式的行为驱动开发(BDD)。
当使用该模式编写测试用例:
  • 由 Given 开头的关键字通常表示初始化状态
  • 由 when 开头的关键字表示后续动作的执行
  • 由 then 开头的关键字表示预期结果
  • 由 and 开头的关键字通常表示有超过一个以上的行为
  • 如果全名匹配没有找到时,前缀 Given、When、and、Then 将在搜索关键字时被忽略
 

***** Import Library & Library Name

Import Library
测试库通常是在测试集的设置表中引入。
库名称是大小写敏感的(模块或类的实现名,并且必须严格匹配),但是其中的任何空格都将被忽略。
引入测试库的方式:还可以使用内建库的关键字 Import Library。
在引入测试库的时候可以携带参数。
被引入库的关键字在使用了 Import Library 关键字的测试集中是可用的。
Library Name
在测试日志中测试库的名称显示在关键字的前面,假如有多个关键字有相同的名称,则必须在关键字名称前面加上测试库名称。
在库名称后面使用 WITH NAME 来指定其新名字。
这个指定的名字将在测试日志中显示,并且当在测试数据中使用关键字全名(LibraryName.Keyword Name)时必须使用这个新的库名。

***** Variable types_Variables

Robot Framework 有两种不同的变量,标量和链表。
它们的语法分别是${SCALAR}和 @{LIST}。
除了这些,环境变量可以直接使用%{VARIABLE}。
当标量变量只是在测试数据单元格中做为一个值使用时,这个标量变量将被分配的值所代替,这个值可以是任何对象。
当一个标量变量在测试数据单元格中与任何其它内容一起使用时(常量字符串或其他变量),它的值首先被转成 Unicode 字符串,然后与该单元格中的其它内容连接起来。
通过关键字返回的值也可以赋值给变量。
这就使得不同的关键字之间可以通信,即使它们在不同的测试库中。
推荐在变量名称后面的等号(=),可以使赋值更清晰。
通过关键字返回获取值的变量,作用域范围仅是该测试用例和关键字范围。
在内建库中有关键字可用于在测试过程中动态设置变量。
假如一个变量已经存在于新的作用域中,它的值将被覆盖,否则将创建一个新的变量。
  • 使用 Set \ Test \ Variable 创建的变量,可以在该测试用例范围内的任何位置有效。
  • 使用 Set Suite Variable 创建的变量,可以在当前测试集范围内的任何位置有效。
  • 使用 Set Global Variable keyword 创建的变量,在所有测试用例和测试集中有效。
 

***** Variable types_ListVariables

列表变量是复合变量,可以分配多个值给它。
列表变量的最大好处是允许为大数据集合分配一个名称。
可以列出和包含不受限制的条目(空链表也是允许的)。
列表变量通常只包含字符串,但是其他内容也是允许的。
访问列表变量中某个确定的元素@{list}[i]。索引是从 0 开始的,如果试图访问超过最大索引的值将引起错误。
通过将列表变量的@替换为$,可以像标量变量一样简单的使用链表。
这种功能只有在不存在与链表的基础名称相同的标量变量时才可用。
关键字返回一个链表,它可以被赋值给多个标量变量和/或一个列表变量。
通过关键字返回获取值的变量,作用域范围仅是该测试用例和关键字范围。
 

***** Variable types_Environment Variables

环境变量,语法是%{ENV_VAR_NAME}。但仅限于字符串值。
关键字 Set Environment Variable 创建一个新环境变量
关键字 Delete \ Environment \ Variable 删除一个已存在的环境变量,
关键字在操作系统库(OperatingSystem library)
环境变量是全局的,只要环境变量在一个测试用例中被设置,则其后的用例都可以使用。
 

***** Variable_Variable Files

一般来说是将不常改变的变量放到以.py为后缀的变量文件中(Variables files)。
变量文件使用 Python 代码创建,技术上他们是 Python 模块。
引入变量的文件的路径是相对于引入文件所在的目录,假如没有找到则在 PYTHONPATH 目录下寻找。
这个路径可以包括变量,在 windows 中斜线将被转换为反斜线。
变量文件中的所有变量在引入它的测试数据文件中都是有效的。
假如多个引入的变量文件包含有相同名称的变量,则最早引入的那个变量将被使用。
在变量表中创建的变量和通过命令行设置的变量将覆盖变量文件中的变量。
变量名字是大小写不敏感的,推荐使用大写字母作为全局变量。
直接创建变量:
例如${VARIABLE},${ANOTHER_VARIABLE},${INTEGER},${STRINGS},${NUMBERS}
动态创建变量:
变量文件是使用真正的编程语言创建的,可以利用动态的逻辑设置变量。
例如:${RANDOM_INT},${CURRENT_TIME},${AFTERNOON}
选择变量引入:
当 Robot Framework 处理变量文件时,所有的不以下划线开头的属性都被看作变量。
如果不想让函数还是类被误认为认为是变量。可以在他们前面增加前缀下划线(_)。
这样会避免函数或类覆盖同名的其他变量导致调试困难的错误。
假如有大量的其他属性需要增加前缀,可以使用特别的属性_all_并给出需要做为变量处理的属性名称链表。
 

***** Variable_Variable Extended Syntax

扩展变量语法可以在标量变量中使用对象。
访问对象的属性:例如${OBJECT.name}
一个变量对应一个有多个属性值的对象比有多个变量要更好
调用对象的方法
例如${OBJECT.greet('Fit')}和${OBJECT.eat('Cucumber')}
但是调用方法将使测试数据变得复杂,特别是方法使用参数的时候。
假如发生这些,建议将这段代码移动到测试库中。
使用字符串和数字的方法:
标准的 Python 对象,包括字符串和数字,都可以使用扩展变量语法中的方法。
有时可以减少临时变量的使用,但是也很容易造成过度使用,创建一些隐秘的测试数据。
注意:在测试数据中使用_xxx_方法是有争议的,更好的做法是将这部分逻辑移到测试库中。
 

***** Variable_Variables Inside Variables

嵌套变量:变量被允许插入到变量中,变量是由内到外解析的。
可以嵌套多个变量,但是假如有任何一个变量值不存在则全部失败。
例如,一个嵌套变量${Hi_${GREET}},则${GREET}首先被解析。
假如它有一个值 Hello,则该变量的最终值是${Hi_Hello}。
 

***** Variable_Built-in Variables

Robot Framework 提供了一些内建变量,这些变量是自动可以使用的。
操作系统内建变量
${CURDIR} \ 提供当前测试文件存放的绝对路径。
${TEMPDIR} \ 获取操作系统临时文件夹的绝对路径。
${EXECDIR} \ 获取测试执行开始目录的绝对路径。
${/} \ 操作系统的路径分隔符。在 UNIX 系统是“/”,在 windows 系统是“\”。
${:} \ 系统路径元素分隔符。在 UNIX 中是“:”在 windows 系统是“;”。
数字变量
变量语法可以用来创建一个全是整型和浮点型的数字。
当关键字需要真实数字的时候这是非常有用的。
Boolean和None/null变量
使用变量语法创建布尔值、Python 语法中的 None 和 Java 语法中 Null。
对大小写不敏感。例如${TRUE}和${true}是相同的,另外, ${none}和${null}是同义词。
可以使用${SPACE}和${EMPTY}创建空格和空变量。
这些变量非常有用,否则需要使用反斜杠用于转义空格或空单元格。
自动变量
可以在测试用例中使用。这些变量在执行时会有不同的值,并且不是在任何时候都是有效的。
  • ${TEST NAME} \ 获取当前测试用例名称
  • @{TEST TAGS} \ 包含当前测试集中的 tag,按字母排序
  • ${PREV TEST NAME} 前一个测试用例的名称,或者为空字符串【当没有任何测试用例执行过】。
  • ${PREV TEST STATUS} 前一个测试用例的状态,PASS,FAIL 或者未空字符串。
  • ${PREV TEST MESSAGE} 前一个测试用例可能的错误信息。
  • ${SUITE NAME} \ 当前测试集的全名称。
  • ${SUITE MESSAGE} \ 测试集的所有消息,包括统计。
  • ${OUTPUT FILE} 当前输出文件的绝对路径。当输出文件被分割会有不同的值。
  • ${LOG FILE} 当前日志文件的绝对路径或字符串 None【当没有日志文件时】。
  • ${REPORT FILE} \ 当前报告文件的绝对路径或字符串 NONE【当没有报告文件生成时】。
  • ${DEBUG FILE} \ 调试文件的绝对路径或字符串 NONE【当没有调试文件时】。
  • ${OUTPUT DIR} \ 输出目录的绝对路径。
  • 等等。
 

***** UserKeyword_Default Arguments Values

允许一个关键字有不同数量的参数
参数添加默认值,即在等号(=)后跟默认的值
可以有多个参数有默认值,但是他们必须在正常位置参数后面
当一个关键字需要多个有默认值的参数并且只有其中一部分参数需要被覆盖, 使用命名关键字语法: 指定的参数不使用${}。

***** UserKeyword_Return Values

使用已经存在的关键字组合来创建新的更高级别的关键字。这些关键字被叫做用户自定义关键字。
用户关键字可以在测试用例文件、资源文件和测试集初始化文件中被创建。
用户关键字也可以返回值。返回值使用[Return]定义。
该值可以赋给测试用例中的变量或其他关键字。
 

***** AdvancedFeatures_For Loops

Robot \ Framework 也提供了自己的 For 循环语法。
For 在测试用例和用户自定义关键字中都可以使用。
普通 for 循环
每次循环被分配一系列值中的一个。
循环语法从:FOR \ 开始,冒号用于 For 循环与普通关键字区分开来。接下来的单元格内放置循环变量,再接的单元格必须含有 IN,最后两个单元格则指定 For循环的起点及结束点。
用于 For 循环里的关键字必须从下一行起,并且要向右缩进一个单元格。
当关键字或其他元素不再缩进时说明 For 循环结束。
不支持直接的 For 循环嵌套,但我们可以通过把含有 For 循环的关键字再放置在另一个For 循环里来实现 For 循环的嵌套。
使用多个循环变量
所有循环变量必须放在:FOR 和 IN 之间。
变量数是任意的,但 IN 后面变量对应的值的个数必须是变量个数的倍数。
For \ in \ range循环
以:FOR开头,循环变量放在紧跟其后的单元格中。只允许有一个循环变量,它包含当前循环索引。
循环变量后面的单元格必须包含 IN RANGE。
IN RANGE后面的单元格可以只有1个表示循环范围数,或者有3个分别表示上限,下限和步长。
退出For循环
正常情况下 For 循环只有在所有循环数据都完成或该测试用例或关键字失败的条件下才退出。
或者,利用BuiltIn关键字 Exit For Loop 可以实现在所有循环没有完成的情况下退出。
重复执行单个关键字
利用BuiltIn 的关键字 Repeat \ Keyword 来处理。
 

***** AdvancedFeatures_Conditional Execution

通常来说,为了便于理解和掌握,不提倡测试用例甚至是关键字里面出现条件逻辑。
这种条件逻辑应该以自然编程语言的形式出现在测试库里。
Framework没有提供类似 if/else 结构的条件逻辑,但可以通过以下几种方式实现相同的功能:
***用于测试用例或测试集 
Setup 或 Teardown 的关键字名称可以用一个变量来指定,这样可以方便地改变关键字名称,例如在命令里改变它。
***BuiltIn keyword --- Run Keyword
可以将一个关键字作为 Run 参数的形式来执行,这个关键字其实就是 Run的一个变量。
这个变量的值(也就是某个关键字)可以动态地从前一个关键字中获得或是由命令行给出。
***BuiltIn keywords --- Run Keyword If and Run Keyword Unless
当该关键字的表达式分别为逻辑真和假时,跟在其后的关键字将被执行,它们可以很好地用于创建类似 if/else 逻辑结构表达式。参见前面文档的例子。
***BuiltIn keywords --- Set Variable If
可以根据给定条件的逻辑真或假来设置某个变量的值。
***还有几个 BuiltIn \ keywords 允许用户根据某个测试用例或测试集的失败或成功来执行某个命名关键字。

猜你喜欢

转载自www.cnblogs.com/anliven/p/10010348.html
今日推荐