Creating test data

User Guide - Creating test data:http://robotframework.org/robotframework/latest/RobotFrameworkUserGuide.html#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 允许用户根据某个测试用例或测试集的失败或成功来执行某个命名关键字。

Robot Framework - 5 - 创建测试数据的更多相关文章

  1. Robot Framework - 2 - 创建测试库

    04- 创建测试库--基础概念 Robot Framework 实际的测试能力是由测试库提供的. ***** 支持的编程语言 Robot Framework 自身是用 Python 编写的,能使用 P ...

  2. Robot Framework - 4 - 创建和扩展测试库的示例

    创建和扩展Library的示例 示例:Check status on Linux OS 创建与使用library的基本步骤:           1--- library实现的内容和实现的方式     ...

  3. 【转】Robot Framework 快速入门

    目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...

  4. Robot Framework 快速入门

    Robot Framework 快速入门 目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键 ...

  5. Robot Framework(一)入门

    1.1简介 Robot Framework是一个基于Python的,可扩展的关键字驱动的测试自动化框架,用于端到端验收测试和验收测试驱动开发(ATDD).它可用于测试分布式异构应用程序,其中验证需要涉 ...

  6. Robot Framework 快速入门_中文版

    目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...

  7. Robot Framework(1)- 入门介绍

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html RF 的介绍 R ...

  8. Robot Framework(十三) 执行测试用例——创建输出

    3.5创建输出 执行测试时会创建几个输出文件,并且所有这些文件都与测试结果有某种关联.本节讨论创建的输出,如何配置它们的创建位置以及如何微调其内容. 3.5.1不同的输出文件 输出目录 输出文件 日志 ...

  9. Robot Framework(十四) 扩展RobotFramework框架——创建测试库

    4.1创建测试库 Robot Framework的实际测试功能由测试库提供.有许多现有的库,其中一些甚至与核心框架捆绑在一起,但仍然经常需要创建新的库.这个任务并不复杂,因为正如本章所示,Robot ...

随机推荐

  1. 201621123002《java程序设计》第九周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 //功能需求:将所有大于5的生成一个新的List对象 List lis ...

  2. 团队项目Alpha冲刺阶段之学习总结

    线性布局 线性布局是程序中最常见的种布局方式,可以分为水平线性布局和重直线性布局两种,通过Android:orientation属性可以设置线性布局的方向.线性布局的特点是各个子元法彼此连接,中间不留 ...

  3. 20170529计划---统计业务量并生成EXCEL通过邮件发送

    每个月都要统计这些业务量的东东,烦死了,赶紧通过python写一个来搞定吧,三天搞定吧,未完待续哈. 2017-5-29 19:50粗略地做了一个思维导图哈 终于第三天完成啦 #encoding=ut ...

  4. 用Python语言开发VTK程序的步骤

    在Windows环境下用Python语言开发VTK程序 1.安装Python集成开发环境IDLE:下载地址:https://www.python.org/downloads/ 2.然后到VTK官网下载 ...

  5. 每天五分钟,玩转Docker。

    Docker技术在国内如火如荼的流行了起来,我当然也想要赶上这时髦的技术啦.下面,我将重新拾起一年多未用的Docker,继续我的云计算之路. Day 1  学习Docker,先从Docker的命令行工 ...

  6. PM学习梳理--搭建产品架构

  7. Scrum冲刺阶段6

    成员今日完成的任务 人员 任务 何承华 学习后端设计 陈宇 后端设计 丁培辉 学习后端设计 温志铭 信息界面设计 杨宇潇 信息界面界面设计 张主强 服务器构建学习 成员遇到的问题 人员 问题 何承华 ...

  8. Cordova配置与WebApp混合开发环境配置

    好久都没来更新随笔了,这阵子比较忙,不过还是在不断的学习当中,今天给大家分享一下Cordova的配置与搭建WebApp混合开发环境的配置. 准备好了吗?让我们一步步来咯!!! 1.配置JDK环境 用的 ...

  9. 很漂亮的PHP验证码(记录)

    在提交表单的时候为了防止机器操作或者是恶意的攻击,在填写表单的时候一般都用验证码来过滤掉一些非法提交数据.今天给大家介绍一款超实用超漂亮的PHP验证码库:Captcha. 安装 使用composer: ...

  10. Centos7 登录mysql 出现mysql.sock不存在

    记一次纠错大战 本来今天开开心心地部署nginx和uwsgi到我的Django服务器,刚想给老师演示一遍我这项目如何酷炫时,一登陆就出现mysql连接不上了 (2003, "Can't co ...