使用远程接口库进一步扩展Robot Framework的测试能力

引言:

Robot Framework的四层结构已经极大的提高了它的扩展性。我们可以使用它丰富的扩展库来完成大部分测试工作。可是碰到下面两种情况,仅靠四层结构就不好使了:

1.有些复杂的测试可能跨越多个物理机器,且有的测试库也必须部署在被测系统上。

2.一个测试要使用多个库,但是有的只能用jybot运行,有的只能用pybot运行(这种情况很常见)。

远程库接口的原理:

为了解决上述两个难题,Robot Framework提供了远程库接口技术(remote library interface)。

什么是远程库接口技术呢?其实很简单,远程库接口就是把原来的测试库变成了三部分

一部分我们可以叫他远程库(Remote Library),第二部分叫做远程服务器(Remote Server),第三部分是真正的测试库(Test Library)。 测试库提供真正的测试功能,它被远程服务器包裹起来,通过XML-RPC协议被远程库访问(见下图)。它的实现思路说白了就是设计模式中的Proxy模式。

这样做的好处显而易见。远程库只要遵守XML-RPC协议就可以访问远程服务器,远程服务器的实现方式是什么就无关紧要了,这就意味着我们可以使用任何支持XML-RPC的高级语言为RF写扩展库了,查了查资料,几乎所有的高级语言都支持这个古老的简单协议。

使用远程接口库:

如上文所说,RF把原来的测试库分成了远程库、远程服务器、测试库三部分。那么怎样才能把原有的测试库进行改造呢?我们首先得有个Server。目前RF
提供了Python,Ruby,.Net,Java,Perl和Clojure的Server。在这个链接可以下载它们:

http://code.google.com/p/robotframework/wiki/RemoteLibrary

下载到远程服务器后进行包裹工作,然后在RF调用远程库。

下面我使用Python例子来详细说明如何使用远程库。

Ø  下载Server

Python的server实现的非常简单,只有一个文件,几kb大小。

我们可以在这个网址下载它:

http://robotframework.googlecode.com/hg/tools/remoteserver/robotremoteserver.py

Ø  改造测试库

有人会问,不是用proxy模式么?为什么要改造测试库?不是应该改造做proxy的server么?

其实改造谁都行。但是python有一个非常好的特性就是能够根据是直接被调用或者间接被调用动态决定行为。我们利用这一点,就能改造已有的测试库,使它同时能够当做本地库,也能被远程调用。

拿Robotframework的内建String库为例:

首先我们将robotremoteserver.py拷贝到String.py同一目录下,然后打开String库的源代码并在最后加入下面代码:

if __name__ == ‘__main__‘:

import
sys

from
robotremoteserver import RobotRemoteServer

RobotRemoteServer(String(), *sys.argv[1:])

保存。然后一个远程服务器包裹的String库就好了。

分析一下代码,我们只是实例化了一个远程服务器,并且将String类作为参数传了进去。

其实我们在这里还能设置远程服务器IP和端口号。

if __name__ == ‘__main__‘:

import
sys

from
robotremoteserver import RobotRemoteServer

RobotRemoteServer(String(),’172.22.xx.xx’,’8081’ *sys.argv[1:])

如果不设置,也可以在运行这个Server的时候设置。

Ø  运行远程库

在命令行模式进入String.py所在的目录,执行

String.py  172.22.22.42 
8081

这时候RF就会告诉你一个包裹着测试库的远程服务器已经被启动了。

Ø  在RF中调用远程库

首先我们要引用Remote Library,引用后就能直接使用了,跟使用本地库没有任何区别。

下面是测试远程String库的脚本。

*** Settings ***

Library          
Remote   
172.22.22.42:8081   
WITH NAME   
RString

*** Test Cases ***

TestFetch

${str}   
Fetchfromleft   
I love test   
5

脚本中引用了刚才我们建立的远程库,所有远程库的名称都叫做Remote,不同的只是后面的ip地址和端口号,我们也可用WITH
NAME 关键字给它起一个别名,这是为了解决多个远程库里有相同关键字的问题(可以使用关键字前加命名空间的方式加以区分)

下面链接是其它高级语言实现的远程库接口的说明,由于原理相似,就不再一一说明了。

JAVA:  http://code.google.com/p/jrobotremoteserver/

Perl:  http://code.google.com/p/plrobotremoteserver/

.NET:   http://code.google.com/p/sharprobotremoteserver/

小结:

利用远程库接口技术,我们几乎可以把所有提供接口的测试工具都粘合起来,外边报个皮就行了。我们也可以用各种高级语言写测试库了。不过值得说明的是,有些
server还不完善,比如Java远程库接口就不能正确的传递Exception,猜测是一些复杂对象不好通过XML-RPC协议进行序列化,感觉这个
可以再包一层皮:)

时间: 2024-08-24 17:09:23

使用远程接口库进一步扩展Robot Framework的测试能力的相关文章

(三)Robot Framework 创建测试、运行与生成报告

(三)Robot Framework 创建测试.运行与生成报告 发布时间 2017年9月28日 虫师 上一节我们已经介绍 Robot Framework-RIDE 只支持 Python2 ,但 Python2 到 2020 年将不再维护,所以接下来的关于 Robot Framework 的学习将不再基于 Robot Framework-RIDE,你可以参考上一节中介绍的 Sublime Text3 + sublime-robot-framework-assistant 插件来编写 Robot F

Robot Framework自定义测试库的作用域的理解

robot framework中,强大的测试库api支持,用户可根据实际需求定义测试库,导入后可使用自定义库中相应的关键字. 当自定义的测试库是类库,则需要考虑一个问题:类实例.用类实现的库可以有内部状态, 这些状态可以被关键字或构造函数修改. 因为这些状态会影响到关键字实际的行为, 所以, 保证一个测试用例不会意外地影响到另一个用例显得非常重要. 这种依赖行为有可能造成非常难定位的bug.例如, 添加了新的测试用例, 而这些用例使用库的方式并不一致. Robot Framework 为了保证测

Robot Framework web测试demo

1.Open RIDE: ride.py 2.New Project: "File" -> "New Project" ,click "OK".     Name:Robot_Demo     Type:Directory ps:The difference between File and Directory is: We can write test case in File ,but Directory not. Robot Fram

Robot framework(RF) Builti,Screenshot和Collections标准库介绍

1.1  Builti标准类库 在学习一门编程语言的时候,大多教材都是从打印“hello world”开始.我们可以像编程语言一样来学习Robot Framework.虽然通过RIDE 提供“填表”一样的写测试用例的方式.但它却有着像编程语言一样的强大的关键字,以及可以开发关键字的扩展能力. Builti标准类库包含了很多最常用的关键字,下面就逐一介绍常用关键字的使用. 3.7.1 log 关键字 log 关键字就是编程语言里的“print”一样,可以打印任何你想打印的内容. 在log关键字测试

Windows系统 - python3(3.7以上版本)部署自动化框架robot framework

一.Python3环境部署 1.下载最新版本的python3.7,可根据自己电脑的位数下载,如:我的64位的win10,下载对应的64位python3.7版本python3.7.0下载 (Python各版本下载网址:https://www.python.org/ftp/python) 2.安装开始,你可以选择自定义安装,选中自动添加path的环境变量选项,方便安装成功后不用再去配置环境变量,具体安装方法请自行搜索 python3必须配置的环境变量 二.rebot framework及相关包安装

Robot Framework 快速入门

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

Robot Framework测试框架用例脚本设计方法

Robot Framework介绍 Robot Framework是一个通用的关键字驱动自动化测试框架.测试用例以HTML,纯文本或TSV(制表符分隔的一系列值)文件存储.通过测试库中实现的关键字驱动被测软件.    Robot Framework灵活且易于扩展.它非常适合测试有不同接口的复杂软件:用户接口.命令行,Web服务,专有的编程接口等. Robot Framework是开源软件,通用的测试库源码安装包和文档等可通过http://robotframework.org获取.Robot Fr

Robot Framework + Selenium library + IEDriver环境搭建

目录: 1 Robot框架结构2 环境搭建  2.1 安装Python  2.2 安装Robot Framework  2.3 安装wxPython  2.4 安装RIDE  2.5 安装Selenium2Library  2.6 安装IEDriverServer 1 Robot框架结构 为了更好的了解环境安装,我们先看下框架结构: 图1 Robot Framework Architecture Robot Framework 通过导入不同的库,就可以使用库中所提供的关键字,从而时行相关的测试.

远程接口调用

1.1          第二部分:远程接口调用方式HttpClient 问题:现在我们已经开发好了接口了,那该如何调用这个接口呢? 答:使用Httpclient客户端. 1.1.1         Httpclient简介 1.1.1.1     什么是httpclient HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议.实现了所有 HTTP