Robot Framework - 入门与操作(3)

08- 创建测试库--发布测试库

***** 测试库文档

为了便于维护,测试库文档应该从源代码中生成。

Robot  Framework 有自己的文档工具 libdoc.py生成 API 文档。

一个关键字文档的第一行通常应该包括该关键字的简要概述。

这行内容会被 libdoc.py 当作关键字的 tool tip,也会被显示到测试日志中。

Robot  Framework User Guide : Library documentation tool (libdoc)

举例: python -m robot.libdoc LibraryExampleD LibraryExampleD.html

***** 对测试库进行测试

单元测试方法:Python 有很好的单元测试工具(unittest /…),非常适合用来验证测试库。

验收测试方法:使用 Robot Framework 本身来验证测试库。

BuiltIn 测试库中有很多有用的关键字可以达到这个目的。

一个特别值得注意的是 Run Keyword And Expect Error 关键字,它能够验证关键字是否如预期地报告了错误。

使用单元测试方法还是验收测试方法取决与具体情况。

***** 打包测试库

简单的库(只有一个文件),让用户拷贝到任意位置,并设置到测试库搜索路径就可以了。

较为复杂的库则应该打包,以使安装更加容易。

对于 Python 来说,打包工具就是 Python 标准库中的 distutils,或者新的 setuptools。

打包工具的好处是测试库会被自动的安装到测试库搜索路径中。

***** 不推荐的关键字

将*DEPRECATED*添加到关键字文档的开始处,该关键字就变成不推荐的(deprecated)。

当这种关键字被执行的时候,警告信息将会输出到控制台和单独的测试日志文件中。

示例: LibraryExampleD.py

# -*- coding: utf-8 -*-
###发布测试库
class LibraryExampleD():
#测试库文档
    """This is an example library with some documentation."""
    def keyword_with_short_documentation(self, argument):
        """This keyword has only a short documentation"""
        pass
    def keyword_with_longer_documentation(self):
        """First line of the documentation is here.
        Longer documentation continues here and it can contain
        multiple lines or paragraphs.
        """
        pass
#不推荐的关键字
    def example_keyword(argument):
        """*DEPRECATED* Use keyword `Other Keyword` instead.
        This keyword does something to given `argument` and returns the result.
        """

09- Robot Framework 的测试库 API

Robot Framework 有三种不同的测试库 API:

--- 静态API

这是最简单的方法。

采用一个 Python 的 module 或者 Class,提供一系列的关键字。

module 或 class 的方法名和关键字相匹配,关键字和方法具有同样的参数。

这些关键字可以通报异常,输出日志,返回需要的值等等。

--- 动态 API

作为动态API的 Class,要实现两个方法:

一个用来获取它们自己实现了的关键字的名字,另外一个用来执行这些关键字。

关键字具体实现及运行,是在运行期决定的。

这些关键字可以通报异常,输出日志,返回需要的值。

--- 混合API

相比静态API,作为混合API的Class ,多了一个方法用来发现实现了哪些关键字,这些关键字可以直接使用。

其他的一切都跟静态 API 一模一样。

10- 创建测试库-- 动态测试库

动态测试库与静态之间不同

关键字的实现,关键字参数和文档的实现,以及关键字实际执行的方式

每个动态库必须同时具有 get_keyword_names 和 run_keyword 方法,其他方法都是可选的。

***** 获取关键字的名称

get_keyword_names 方法来发现实现了什么关键字。

这个方法不需要任何参数,必须返回一个字符串的列表(在 Python 中)。

返回值中包含了测试库实现的所有关键字的名称。

动态库必须要有这个方法。如果没有,或者因为某种原因调用该方法失败,这个测试库就会被视为静态库。

***** 运行关键字

run_keyword方法来运行它们的关键字。

这个方法带有 2 个参数:

第一个参数是需要运行的关键字名称,其格式必须与 get_keyword_names 中返回的值相同

第二个参数是将要传到该关键字的参数列表

***** 获取关键字的参数

get_keyword_arguments 方法获取实际需要什么参数,并告诉 Robot Framework。

这个方法将关键字的名称作为一个参数,并返回一个包含了该关键字接受的参数的字符串列表。

动态关键字可以要求任何数量的参数,也可以带具有默认值的参数,可以接受可变数量的参数。

***** 获取关键字的文档

get_keyword_documentation方法取得关键字的文档,并放入用libdoc生成的库文档中。

这个方法带有一个参数,该参数是关键字的名称,并以字符串形式返回它的文档。

***** Remote

使用动态 API 最好的例子就是 Robot Framework 的 Remote 库

示例: LibraryExampleE.py

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

###动态测试库

class LibraryExampleE():

#获取关键字名称
    def get_keyword_names(self):
        return [‘first keyword‘, ‘second keyword‘]
#运行关键字
    def run_keyword(self, name, args):
        print "Running keyword ‘%s‘ with arguments %s." % (name, args)
#获取关键字的参数
    def get_keyword_arguments(self, name):
        return [‘*arguments‘]
#获取关键字的文档
    def get_keyword_documentation(self, name):
        return """This is an example Dynamic library with some documentation."""

11- 创建测试库-- 混合测试库

混合 API 的库,介于静态和动态 API 之间,既能直接实现一些方法,更重要的是,还能够动态的处理它们。

***** 获取关键字的名称

get_keyword_names方法来返回一个它所实现的关键字的名称列表,与动态 API 类似。

***** 运行关键字

采用反射来发现实现关键字的方法,与静态 API 类似。

***** 获取关键字的参数和文档

跟静态 API 的方式一样,取得这个方法的引用之后,它就从引用中去搜索参数和文档信息。

***** 小结

混合 API 一个很大的好处就是,它不需要特殊的方法来取得关键字的参数和文档。

真正动态的关键字在__getattr__中处理,其他的就直接在主库类中实现,这在实践中也经常用到。

当使用 Python 的时候,混合 API 在大多数情况下是更好的选择。

***** Telent

使用混合 API 的好例子就是 Robot Framework 自带的 Telnet 库。

示例: LibraryExampleF.py

# -*- coding: utf-8 -*-
#混合测试库

import LibraryExampleFlib

class LibraryExampleF():
    """This is an example Dynamic library with some documentation."""
#获取关键字名称
    def get_keyword_names(self):
        return [‘my_keyword‘,‘external_keyword‘]
#运行关键字
    def my_keyword(self, arg):
        print "My Keyword called with ‘%s‘" % arg
#__getattr__方法
    def __getattr__(self, name):
        if name == ‘external_keyword‘:
            return LibraryExampleFlib.hello
        raise AttributeError("Non-existing attribute ‘%s‘" % name)

LibraryExampleFlib.py
def hello():
    print "Hello, world!"
def Nothing():
    pass

12- 创建测试库-- 使用 Robot Framework 内部模块

Python 实现的测试库可以使用 Robot Framework 的内部模块。

小心使用!

Robot Framework 的API并不是都能从外部调用,而且不同版本之间的API 有些本质上的变化。

最安全的 API 就是实现 BuiltIn 库中关键字的那些方法。

关键字的改变要非常谨慎,一般首先就要把以前的老用法废弃掉。

最有用的方式之一就是 replace_variables,这个方法允许访问当前可用的变量。

示例: LibraryExampleG.py

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

###使用RobotFramework内部模块

import os.path
from robot.libraries.BuiltIn import BuiltIn

class LibraryExampleG():

    def do_something(argument):
        output = ‘do_something_that_creates_a_lot_of_output(argument)‘
        outputdir = BuiltIn().replace_variables(‘${OUTPUTDIR}‘)
        path = os.path.join(outputdir, ‘results.txt‘)
        f = open(path, ‘w‘)
        f.write(output)
        f.close()
        print ‘*HTML* Output written to <a href="results.txt">results.txt</a>‘

13- 创建测试库-- 扩展已存在的测试库

添加新的功能给已存在的测试库,以及怎么在自己的库中使用它们。

***** 修改原始代码

直接修改其源代码的方式的问题是容易产生混乱,而且也需要额外重新打包。

***** 继承

使用继承来扩展一个已存在的库。

新的测试库与原始库的名称不相同。能够很容易地识别出正在使用一个定制库。

问题是新库将和原始库拥有同样的关键字,意味着会有冲突。另外一个问题是测试库不能共享它们的状态。

***** 直接使用其他测试库

方法是静态的,也不依赖测试库的状态的时候,可以简单地引入这个测试库,并使用它的方法。

***** 从 Robot Framework 中获取活动的测试库实例

BuiltIn 关键字 Get Library Instance,它被用来从 Robot Framework 自身中获取当前活动的库实例。

这个关键字返回的库实例,这个实例能看见当前的库状态。

***** 使用动态库或者混合库 API 的测试库

动态或者混合库 API 的测试库通常都有一套它们自己的扩展方式。

对于这些测试库,你需要从库的开发者,或者参考库文档或源代码中获取相关指南。

原文地址:https://www.cnblogs.com/anliven/p/10010242.html

时间: 2024-11-07 12:31:42

Robot Framework - 入门与操作(3)的相关文章

Robot Framework - 入门与操作(5)

Creating test data ***** Test suites 测试集没有测试用例个数的限制,但建议不要超过 10 个测试用例. 除非是使用数据驱动模式,这种模式的测试用例仅包含一个高级别关键字. 测试集的注释是在测试集的设置表格中使用 Documentation 标示. 除注释之外的其他元数据可以使用测试集表格中的 Metadata 设置. 这种方式的元数据将在测试报告和日志中显示出来. 测试集的 setup 和 teardown 都可以使用参数. 一个测试集的 setup 将在所有

Robot Framework - 入门与操作(4)

练习:创建和扩展Library 示例:Check status on Linux OS 创建与使用library的基本步骤: 1--- library实现的内容和实现的方式 2--- library的编写:名称.类别.引用的模块.关键字.注释等 3--- library的编译调试方式.文档生成.导入及确认... 4--- Test Case的编写与调试 5--- 扩展已存在的测试库的方式 1--- library实现的内容和方式 实现的内容: 以SSH方式登陆Linux系统,检查CPU,Memo

robot framework 入门

obot framework 入门 2012-12-23 12:47:16 分类: LINUX 其实我不喜欢动不动就框架,动不动就架构,整出一坨专业术语搞的玄而又玄,让人云山雾绕,我想做的事情很简单,自动地测试我的多个程序,更友好的显示出我的程序的测试结果. 当我的程序比较少的时候,我可以手工的执行测试程序,察看结果.但是如果的程序多了之后,我不能天天手工去执行,这样的话,太费时了,而且,通过不通过还要自己去看 $?. 有人说,你写好的程序,不改动,为啥天天测一遍.实际情况是,有时候我会改这些程

使用Robot Framework框架远程操作UNIX系统

bot Framework是一个强大的自动化测试框架,依靠社区力量编写的Test Library为它提供了非常强的扩展性.下面我将介绍的就是如何使用第三方提供的扩展测试库(Test Library)来远程登录Unix,并在上面做常见操作. 环境准备(W32环境下): 1.首先我们得拥有Robot Framework的运行环境. a.必须安装python,因为Robot Framework是用python实现的,目前Robot Framework只支持Python2.X版本. b.安装Robot

Robot Framework 入门教程总结

Robot Framework 作为一款通用测试框架,可加载多种测试库.驱动多种测试工具,并可对各种自定义脚本进行集成.对于Robot Framework,我准备将其分为 入门--Robot Framework的安装使用及基本内容,初步实现简单测试实例: 实战--以几种常见的被测件作为案例,进行实际的侧实演示: 详解--对Robot Framework的官方文档及内置库进行详细介绍: 测试库--对常用的测试库进行介绍,并进行简单实例演示: 源码分析--对Robot Framework源码进行分析

Robot Framework:Excel操作

robot framework 操作Excel需要安装库 ExcelLibrary pip install robotframework-ExcelLibrary 将ExcelLibrary 导入到robot framework中 使用例子: 遇到问题: FAIL : NotImplementedError: formatting_info=True not yet implemented   原因是因为 xlrd只能操作.xls格式,文件直接改后缀名会报错,需要重新保存为.xls文件 FAIL

2小时入门Robot Framework

1.介绍 1.1.介绍Robot Robot Framework是一个基于关键字驱动的自动化测试框架.通过该框架,测试人员可使用python封装关键字,并在非代码环境下使用关键字构建可被执行的测试用例 Robot Framework官方网站:http://robotframework.org/ 1.2.安装 1.2.1.Robot Framework Robot Framework支持Python和Jython,本文档针对ubuntu下Python进行讲解 下载地址:https://pypi.p

Robot Framework 快速入门

Robot Framework 快速入门 目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变量 组织测试用例 测试套件 启动和卸载 使用标签 创建测试库 介绍概述 Robot Framework 是一个关键词驱动的自动测试框架.测试用例位于HTML或者TSV(以tab分隔值)文件,使用在测试库中实现的关键词来在测试中运行程序.因为Robot Fra

Robot Framework(Databaselibrary库操作)

1.安装 DatabaseLibrary 库 DatabaseLibrary 下载地址:https://pypi.python.org/pypi/robotframework-databaselibrary/0.6在线文档:http://franz-see.github.io/Robotframework-Database-Library/如果像安装普通的 Python 程序,可以下载 tar.gz 文件,解压并运行 setup.py 文件进行安装. 因为在上一小节中我们已经安装了 pip,所以