04- 创建测试库--基础概念

Robot Framework 实际的测试能力是由测试库提供的。

***** 支持的编程语言

  • Robot Framework 自身是用 Python 编写的,能使用 Python 扩展测试库。
  • 如果在 Jython 运行Robot Framework 的话,那么测试库也可以用 Java 来实现。
  • 也可以通过 Python C API 使用 C 语言来实现测试库。

***** 不同的测试库 API

Robot Framework 有三种不同的测试库 API:
 
--- 静态API
这是最简单的方法。
采用一个 Python 的 module 或者 Class,提供一系列的关键字。
module 或 class 的方法名和关键字相匹配,关键字和方法具有同样的参数。
这些关键字可以通报异常,输出日志,返回需要的值等等。
 
--- 动态 API
作为动态API的 Class,要实现两个方法:
一个用来获取它们自己实现了的关键字的名字,另外一个用来执行这些关键字。
关键字具体实现及运行,是在运行期决定的。
这些关键字可以通报异常,输出日志,返回需要的值。
 
--- 混合API
相比静态API,作为混合API的Class ,多了一个方法用来发现实现了哪些关键字,这些关键字可以直接使用。
其他的一切都跟静态 API 一模一样。
 

05- 创建测试库Class或者Module

***** 测试库名称

测试库以.py为后缀名,文件名与实现该测试库的模块名或者类名相同。
Python 类总是被写在一个模块中的。
  • 如果实现一个库的类的名称跟它所在的模块同名,则 Robot Framework允许引入它的时候去掉模块名。
  • 如果模块名和类名不同,使用测试库要同时使用模块名和类名。
  • 如果测试库名称真的太长了,推荐通过 WITH NAME语法给测试库添加一个简短的别名。

***** 提供参数给测试库

所有实现测试库的类都可以带参数。但是,如果库是用模块来实现的,则不能带任何参数。
测试库需要的参数个数跟它的构造器接收的参数个数相同。默认值和可变个数参数也能工作。
参数被传递给测试库时,可以通过变量。

***** 测试库的范围

Robot Framework默认地为每个测试用例创建测试库的新实例,让测试用例之间保持独立。
属性 ROBOT_LIBRARY_SCOPE,测试库可以控制新的库什么时候被创建。
这个属性必须是字符串,并且它只有以下三个值:
  • TEST CASE ---- 为每个测试用例创建一个新的实例。
  • TEST SUITE ---- 为每个测试集创建一个新的实例。
  • GLOBAL ---- 在整个测试执行过程中,只有 1 个实例被创建,被所有测试用例和测试集共享。

***** 声明测试库的版本

属性 ROBOT_LIBRARY_VERSION,声明测试库的版本。
如果 ROBOT_LIBRARY_VERSION 不存在,就尝试读取__version__属性。
这些属性必须是类或者模块的属性。
 

示例: LibraryExampleA.py

# -*- coding: utf-8 -*-

###创建测试库Class或者Module

class LibraryExampleA():

    ROBOT_LIBRARY_SCOPE = 'TEST SUITE'  #测试库的范围
__version__ = '0.1' #声明测试库的版本
def __init__(self):
self._counter = 0
def count(self):
self._counter += 1
print self._counter
def clear_counter(self):
self._counter = 0
## def keyword(self):
## pass

06- 创建测试库--创建静态关键字

***** 关键字名称

在测试数据中使用的关键字名称不区分方法名的大小写,空格和下划线也会被忽略。

***** 关键字参数

在静态和混合库 API 中,一个关键字需要多少参数,取决于实现它的方法。
最通用也是最简单的情况是,当一个关键字需要的参数是固定个数的。

***** 带有默认值的参数

在 Python 中,带有默认值的参数可以声明在方法签名中。

***** 可变数量的参数

Robot Framework支持带有可变数量参数的关键字。
Python 支持方法接收可变数量的参数。同样的语法也可以在测试库中使用。

***** 参数的类型

通常情况下,关键字参数是作为字符串传给 Robot Framework 的。
如果关键字需要其他类型的参数,要么就使用变量,要么利用内建关键字将字符串转换成需要的类型。
参数的数量正确,调用关键字时将会成功;参数类型不匹配,执行关键字时失败。
在 Python 中,可以很简单的将参数转换为合适的类型,例如:port = int(PortNumber)。

示例: LibraryExampleB.py

# -*- coding: utf-8 -*-

###创建静态关键字

class LibraryExampleB():

#关键字名称
def hello(self,name):
print "Hello, %s!" % name
def do_nothing(self):
pass
#关键字参数
def no_arguments(self):
print "Keyword got no arguments."
def one_argument(self,arg):
print "Keyword got one argument '%s'." % arg
def multiple_arguments(self,a1, a2, a3):
print "Keyword got three arguments '%s', '%s' and '%s'." % (a1, a2, a3)
#带有默认值的参数
def one_default(self,arg='default'):
print "Argument has value %s" % arg
def multiple_defaults(self,arg1, arg2='default 1', arg3='default 2'):
print "Got arguments %s, %s and %s" % (arg1, arg2, arg3)
#可变数量的参数
def any_arguments(self,*args):
print "Got arguments:"
for arg in args:
print arg
def one_required(self,required, *others):
print "Required: %s\nOthers:" % required
for arg in others:
print arg
def also_defaults(self,req, def1="default 1", def2="default 2", *rest):
print req, def1, def2, rest
#参数的类型
def connect_to_host(self,address, port=25):
port = int(port)
print address, port

07- 创建测试库--与RobotFramework通信

***** 报告关键字的状态

如果一个被执行的方法抛出一个异常,该关键字的状态就是 FAIL,如果它正常返回了,则状态为 PASS。
错误信息包含了异常的类型和信息,它被显示在日志、报告和控制台中。
异常的跟踪可以通过 DEBUG 日志级别来输出日志。这些信息在日志文件中默认是不可见的。

***** 停止测试执行

可以通过让一个测试用例失败来停止整个测试运行。
属性ROBOT_EXIT_ON_FAILURE (值为 True)设置到关键字抛出的异常中,就能达到这种目的。

***** 不管失败继续执行

可以让整个测试执行在出现了 failure 的时候继续执行。
属性ROBOT_CONTINUE_ON_FAILURE (值为 True)设置到关键字抛出的异常中,就能达到这种目的。

***** 输出日志信息

默认地,一个方法写入标准输出的一切信息都会被当作 INFO 级别输出到日志文件中。
要使用其他的日志级别(非 INFO)或者创建一些信息,可以通过将级别绑定到信息中。
格式: *LEVEL*Actual log message
*LEVEL*必须位于信息的头部,并且 LEVEL 的值必须是 TRACE、 DEBUG、 INFO、 WARN 、HTML 其中之一。

***** 警告

警告(WARN)级别的信息会自动被写入控制台和日志文件中单独的测试执行错误那一节。
使用警告来报告一下重要而不危险的问题给用户。

***** 输出 HTML 格式的日志

如果测试库想要使用格式、超链接、图片等等,它们可以使用特殊的日志级别 HTML。

***** 日志级别

大多数情况下, INFO 级别已经足够。
DEBUG 和 TRACE,可以很容易的调试测试库自身可能存在的问题。
WARN 级别可以让信息更加可见,HTML 级别对于需要其他格式时很有用。

***** 返回值

返回值可以赋给测试数据中的变量,然后这个变量又作为其他关键字的输入。
返回值在 Python中采用 return 语句。
一般地,一个值被赋给一个标量变量。
关键字能通过多个标量变量或者构成一个列表变量返回多个值。 对于Python, 返回值必须是列表或者元组。

示例: LibraryExampleC.py

# -*- coding: utf-8 -*-

###与RobotFramework通信

import base64

class LibraryExampleC():

#返回值
def return_string(self):
return 'Hello, world!'
def return_object(self,info):
return base64.b64encode(info)
def return_two_values(self):
return 'first value', 'second value'
def return_multiple_values(self):
return ['a', 'list', 'of', 'strings'] #日志例子
def log_example(self):
print 'Hello from a library.'
print '*WARN* Warning from a library.'
print '*INFO* Hello again!'
print 'This will be part of the previous message.'
print '*INFO* This is a new message.'
print '*INFO* This is <b>normal text</b>.'
print '*HTML* This is <b>bold</b>.'
print '*HTML* <a href="http://robotframework.org">Robot Framework</a>'

Robot Framework - 2 - 创建测试库的更多相关文章

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

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

  2. 关于Django启动创建测试库的问题

    最近项目迁移到别的机器上进行开发,启动Django的时候,有如下提示: Creating test database for alias 'default' 其实这个可能是在Django启动按钮的设置 ...

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

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

  4. Robot Framework - 5 - 创建测试数据

    Creating test data User Guide - Creating test data:http://robotframework.org/robotframework/latest/R ...

  5. Robot Framework常用的操作库列表

    标准库是Robot Framework可以直接导入使用的库,包含以下几类: Builtin:包含经常需要的关键字.自动导入无需import,因此总是可用的 Dialogs:提供了暂停测试执行和从用户的 ...

  6. Robot Framework - 建立本地测试环境

    注意:本文内容是以“在Window7系统中安装本地RobotFrmamework自动化测试环境”为例. Robot Framework简介 HomePage:http://robotframework ...

  7. Robot Framework - 基础关键字 BuiltIn 库(二)

    本篇教程,我们继续接着上篇内容进行讲解,我们本节教程讲解的是Robot Framework 机器人框架中的变量中使用判断.字符串的拼接.Evaluate的用法.调用Python文件.条件分支语句.以及 ...

  8. Robot Framework - 基础关键字 BuiltIn 库(一)

    今天给大家分享的是Robot Framework 机器人框架中 BuiltIn 基础库的使用...BuiltIn 库里面提供了很多基础方法助力于我们在自动化测试领域中做的更好!——本系列教程是教会大家 ...

  9. 学习Robot Framework必须掌握的库—-BuiltIn库

    作为一门表格语言,为了保持简单的结构,RF没有像别的高级语言那样提供类似if else while等内置关键字来实现各种逻辑功能,而是提供给了用户BuiltIn库.如果用户想在测试用例中实现比较复杂的 ...

随机推荐

  1. 2019新版UI设计面试题汇总(附答案)

    问题一.Android手机的常用设计尺寸有_________.怎么适配ios和安卓. 答案:安卓320 X 480是常规模拟器.但现在的开发都是用360x640做一倍率.480 X 800(1.5倍率 ...

  2. easyui combobox 不能选中值的问题

    easyui comboxbox 下拉框加载到数据,但是不能选中.一般情况是重复渲染,页面有同名元素,valueField重复. 这次遇到的具体问题是,第一次刷新页面,可以选中,第二次不能选中.考虑到 ...

  3. [C#.net]SqlDataAdapter 执行超时已过期 完成操作之前已超时或服务器未响应

    随着数据库数据的不断增大,查询时间也随之增长.而客户端与数据库连接时间以及命令的执行时间都是有限的.默认为30s.所以在查询数据的时候,程序会出现 “超时时间已到.在操作完成之前超时时间已过或服务器未 ...

  4. ESP8266擦除工具完整安装

    ESP8266擦除工具完整安装 一.  ESP8266擦除工具路径:http://down.liangchan.net/ESP8266%B2%C1%B3%FD%B9%A4%BE%DF%CD%EA%D5 ...

  5. Jmeter如何把响应数据的结果保存到本地的一个文件

    当做性能压测时,可能会需要把响应数据的一些字段统计出来.这里简单介绍一下. 1.首先把接口调通,确定需要统计的字段,这里以统计ccmpSeq字段来做例子. 2.添加正则表达式提取器,用来提取响应结果中 ...

  6. 20175316盛茂淞 2018-2019-2 《Java程序设计》第8周学习总结

    20175316盛茂淞 2018-2019-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 泛型 -- 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据 ...

  7. 安装jdk+tomcat

     linux安装高版本jdk后不起作用的解决办法 1.安装jdk1.8. 2.修改/etc/profile中的JAVA_HOME为新的jdk路径,并执行source /etc/profile. 3.执 ...

  8. 前后台分离开发时遇到循环引用问题"$ref"

    1. 遇到的问题 { "errMsg": "", "data": { "baseinfo": { "freeT ...

  9. 02.02.01 第1章 简介及基础操作(Power BI商业智能分析)

    02.02.01.01 powerbi简介 00:10:59 02.02.01.02 query数据导入 00:03:26 具体操作实例如下: 02.02.01.03导入access数据 00:05: ...

  10. C++程序调用python3

    今天想做一个简单的管理密码的小程序,由于最近了解了下Python,就想用Python来写.但是看了看Python的界面库用法有感觉有点麻烦,所以还不如直接使用MFC写写界面,关于csv的文件处理部分使 ...