引言:

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协议进行序列化,感觉这个
可以再包一层皮:)

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

  1. Robot Framework(十七) 扩展RobotFramework框架——扩展Robot Framework Jar

    4.4扩展Robot Framework Jar 使用标准JDK安装中包含的jar命令,可以非常简单地向Robot Framework jar添加其他测试库或支持代码.Python代码必须放在jar里 ...

  2. Robot Framework - 3 - 测试库API

    08- 创建测试库--发布测试库 ***** 测试库文档 为了便于维护,测试库文档应该从源代码中生成. Robot  Framework 有自己的文档工具 libdoc.py生成 API 文档. 一个 ...

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

    robot framework中,强大的测试库api支持,用户可根据实际需求定义测试库,导入后可使用自定义库中相应的关键字. 当自定义的测试库是类库,则需要考虑一个问题:类实例.用类实现的库可以有内部 ...

  4. Robot Framework web测试demo

    1.Open RIDE: ride.py 2.New Project: "File" -> "New Project" ,click "OK&q ...

  5. Maven 整合 robot framework 进行测试

    1. 在maven pom.xml中先配置robot framework的plugin: <plugin> <!-- integration test runner (robot-f ...

  6. 【转载】扩展Robot Framework,实现失败用例自动再执行(失败重跑)

    使用自动化脚本进行测试,经常受环境影响等各方面导致本能成功的脚本失败,下面介绍了RFS框架下,失败重跑的方法: 通过改写RobotFramework源代码增加--retry选项,实现test级别的失败 ...

  7. Robot Framework(十五) 扩展RobotFramework框架——远程库接口

    4.2远程库接口 远程库接口提供了在运行Robot Framework本身的机器上运行测试库的方法,以及使用除本机支持的Python和Java之外的其他语言实现库的方法.对于测试库,用户远程库看起来与 ...

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

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

  9. robotframework的学习笔记(十三)------Robot Framework常用库简介

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

随机推荐

  1. 2018-7-31-C#-判断两条直线距离

    title author date CreateTime categories C# 判断两条直线距离 lindexi 2018-07-31 14:38:13 +0800 2018-05-08 10: ...

  2. win10 uwp win2d CanvasVirtualControl 与 CanvasAnimatedControl

    本文来告诉大家 CanvasVirtualControl ,在什么时候使用这个控件. 在之前的入门教程win10 uwp win2d 入门 看这一篇就够了我直接用的是CanvasControl,实际上 ...

  3. java Scanner(简单文本扫描器)

    Scanner(File source)  构造一个新的 Scanner,它生成的值是从指定文件扫描的. 备注:实现了Iterable接口   package june6D; import java. ...

  4. css3 移动端旋转动画暂停

    音乐播放图片旋转动画 ios不支持暂停: animation-play-state: paused; @-webkit-keyframes rotate{ 100% { transform: rota ...

  5. 创意app1

      app名称: 与我相似的人 app目的: 旨在通过云匹配,搜索到与自己类似爱好或者性格的人用户相似的内容:衣服品牌鞋子手机笔记本键盘鼠标相机刮胡刀自行车工作  说明: 现有的格局 百度贴吧是面向多 ...

  6. (转)hibernate缓存机制详细分析

    在本篇随笔里将会分析一下hibernate的缓存机制,包括一级缓存(session级别).二级缓存(sessionFactory级别)以及查询缓存,当然还要讨论下我们的N+1的问题. 随笔虽长,但我相 ...

  7. Kafka2.4发布——新特性介绍(附Java Api Demo代码)

    新功能 允许消费者从最近的副本进行获取 为 Consumer Rebalance Protocol 增加对增量协同重新均衡(incremental cooperative rebalancing)的支 ...

  8. Spring Boot 定时+多线程执行

    Spring Boot 定时任务有多种实现方式,我在一个微型项目中通过注解方式执行定时任务. 具体执行的任务,通过多线程方式执行,单线程执行需要1小时的任务,多线程下5分钟就完成了. 执行效率提升10 ...

  9. 005 Ceph配置文件及用户管理

    一.Ceph的配置文件 Ceph 配置文件可用于配置存储集群内的所有守护进程.或者某一类型的所有守护进程.要配置一系列守护进程,这些配置必须位于能收到配置的段落之下.默认情况下,无论是ceph的服务端 ...

  10. 【一起学源码-微服务】Ribbon 源码三:Ribbon与Eureka整合原理分析

    前言 前情回顾 上一篇讲了Ribbon的初始化过程,从LoadBalancerAutoConfiguration 到RibbonAutoConfiguration 再到RibbonClientConf ...