Robot Framework自动化测试(六)--- robotremoteserver使用
robotremoteserver 是什么?
Python Remote Server for Robot Framework
下载地址:https://pypi.python.org/pypi/robotremoteserver/
robotremoteserver是一种远程库接口技术(remote library interface)。其实,通过这两天的使用,我的理解它就是一个远程库的容器。这看上去有点不太好理解,我们知道当我要使用的Robot Framework的库是被安装在..\Python27\Lib\site-packages\目录下面的。例如常用的Selenium2Library。
但robotremoteserver就可以启动一个Library给Robot Framework用,不管这个库在本机的任何位置,或远程的某台主机上,或者这个库不是Python开发的。这听上去有点意思,对吧!
如何使用robotremoteserver
通过上面的连接将robotremoteserver 下载下来,注意不要使用pip安装,它其实也就只有一个robotremoteserver.py文件,我们需要的也就是这个文件而已。
先来体验一下它的用法。
首先创建一个目录E:\rfremote\ ,目录名你可以随便取。然后,将robotremoteserver.py拷贝到该目录下。接着在该目录下创建CountLibrary.py文件。
#coding=utf-8
import sys
from robotremoteserver import RobotRemoteServer class CountLibrary: def add(self,a,b):
'''Computing a and b are two numbers together, for example:
| add | 2 | 5 |
'''
return a + b def sub(self,a,b):
'''Computing a and b subtract two numbers, for example:
| sub | 10 | 2 |
'''
return a - b if __name__ == '__main__':
CL = CountLibrary()
RobotRemoteServer(CL, *sys.argv[1:])
代码很简单,创建了一个计算类CountLibrary。实现了add()和sub()两个方法,用于计算两个的加法和减法。最后将CountLibrary放到RobotRemoteServer中。
通过python命令执行该CountLibrary.py文件
现在,启动Robot Framework RIDE,导入“Remote”库。
按键盘F5 ,就可以看到Remote库中的“关键字”了。
看!现在你就可以使用。Add 和 Sub 两个关键字了,Stop Remote Server 是由robotremoteserver提供的,用户关闭库的容器。
然而,这貌似没有什么卵用。我为什么不把CountLibrary.py放到..\Python27\Lib\site-packages\目录下面调用呢!?
远程调用robotremoteserver
如果你细心会看到,刚才使用python命令启动CountLibrary.py的时候,启动是一个Remote server 并且指定127.0.0.1:8270 本机。
那么这个Library其实也可以在远程的某台主机上启动。
下面把整个rfremote\目录拷贝到虚拟机或远程某台主机。通过“ipconfig”或“ifconfig”查看IP地址。我们假设远程的这台主机的IP是:192.168.31.179 。
打开robotremoteserver.py修改host:
……
class RobotRemoteServer(SimpleXMLRPCServer):
allow_reuse_address = True
_generic_exceptions = (AssertionError, RuntimeError, Exception)
_fatal_exceptions = (SystemExit, KeyboardInterrupt) def __init__(self, library, host='192.168.31.179', port=8270, port_file=None,
allow_stop=True):
……
好了!现在你的远程主机上通过python命令启动CountLibrary.py文件。
然后,在本机上再次启动Robot Framework RIDE
因为是远程库,所以,在引入这个库时要指定它是远程的IP和端口号。
然后,这依然没有什么卵用。下面就用它做点有卵用的事儿。
调用Sikuli
关于sikuli的介绍,请参考:http://www.cnblogs.com/fnng/archive/2012/12/15/2819367.html
这是一种另类的自动化技术,有它的缺点,也有它的优,如果能与现有的Robot Framework工具结合,无疑是比较牛X的说。
那么问题来了,sikuli虽然内部使用了python开发(也不是全python),但它是个jar包,也就是说它是由Java打包,只能给java调用。而Robot Framework是由纯python开发,只能引用python开发的库。虽然关系有点乱。但你要知道他们不是同类。
Jython是Python与Java 之间的红娘。Jython基于jvm虚拟机开发的Python语法。通过它可以调用Java程序或Java的标准库。
Jython下载地址:http://www.jython.org
安装(需要有java环境): > java -jar jython-installer-2.7.0.jar
使用Jython
其实,Jython也可以当Python用,我们一般用的python是基于C实现的,而Jython是基于JVM实现的python,基于JVM的语言很多,比如Groovy 、JRuby 等。
得到sikuli-script.jar 包,它可以看作是sikuli的核心模块。
两种方法:
单独下载:http://download.csdn.net/download/hqd1986/4557974
安装sikuli http://www.sikuli.org/downloadrc3.html ,在安装目录下找到sikuli-script.jar 文件。然后将其拷贝到E:\rfremote\ 目录并解压。
接下来在rfremote\目录下创建SikuliLibrary.py文件。
import sys
from robotremoteserver import RobotRemoteServer
from org.sikuli.script import * class SikuliLibrary: def __init__(self):
self.SS = Screen()
self.PT = Pattern() def _wait(self, imgFile, timeOut, similarity):
try:
self.PT = Pattern(imgFile)
self.PT = self.PT.similar(float(similarity))
self.SS.wait(self.PT, float(timeOut))
except FindFailed, err:
print "ERR: _wait"
raise AssertionError(err) def click_object(self, imgFile, timeOut, similarity):
try:
self._wait(imgFile, timeOut, similarity)
self.SS.click(imgFile)
except FindFailed, err:
raise AssertionError("Cannot click [" + imgFile + "]") def object_exists(self, imgFile, similarity, timeOut):
try:
self._wait(imgFile, timeOut, similarity)
except FindFailed, err:
raise AssertionError("Could not find [" + imgFile + "]") def type_at_object(self, imgFile, txt, timeOut, similarity):
try:
self._wait(imgFile, timeOut, similarity)
self.SS.type(imgFile, txt)
except FindFailed, err:
raise AssertionError("Cannot type at [" + imgFile + "]") def paste_at_object(self, imgFile, txt, timeOut, similarity):
try:
self._wait(imgFile, timeOut, similarity)
self.SS.paste(imgFile, txt)
except FindFailed, err:
raise AssertionError("Cannot paste at [" + imgFile + "]") if __name__ == '__main__':
SL = SikuliLibrary()
RobotRemoteServer(SL, *sys.argv[1:])
这个程序是关键,通过Jython第调用了org.sikuli.script.* 中的方法重新实现。可以理解成,调用java程序,重新实现成python程序,然后给python程序使用。
这一次用需要使用Jython运行该文件。
然后,再次启动Robot Framework RIDE
把要操作的对象截好图:
然后,在Robot Framework中调用这些图片。
过程很简单,就是点击“开始”菜单,打开chrome浏览器。
参考:
http://blog.sina.com.cn/s/blog_654c6ec70101044p.html
http://blog.csdn.net/xc5683/article/details/11189259
Robot Framework自动化测试(六)--- robotremoteserver使用的更多相关文章
- Robot Framework自动化测试(三)--- 封装系统关键字
之前对robotframework-ride了解的不多,后来知道了引入Selenium2Lirary库后可以做web UI自动化测试,但发现和python没啥关系,今天学习了封装系统关键字算是和pyt ...
- Robot Framework自动化测试环境准备(一)
Robot framework是诺西(NSN)开源的一套自动化测试工具,在通信设备自动化测试中很实用,它基于Python开发,主要模拟NMS网管配置数据到网元NODE,并读取配置看配置是否生效. == ...
- Robot Framework 自动化测试 Selenium2Library 库 用法
Robot Framework自动化测试Selenium2Library库详细用法 一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com ...
- 三年磨一剑,robot framework 自动化测试框架核心指南,真正讲透robot framework自动化测试框架(笔者新书上架)。
序 关于自动化测试的工具和框架其实有很多.自动化测试在测试IT行业中扮演着越来越重要的角色,不管是在传统的IT行业还是高速发展的互联网行业或是如今的大数据和大热的人工智能领域,都离不开测试,也更加离不 ...
- Robot Framework自动化测试的应用
Robot Framework自动化测试的应用(一) 最近尝试用Robot Framework代替之前全部采用python实现测试case,开始对Robot Framework进行些了解学习. 1. ...
- Robot Framework 自动化测试
Robot Framework 自动化测试 RIDE 是 Robot Framework 测试数据的编辑器.它使测试用例的创建.运行.测试项目的组织可以在图形界面下完成. 通过 RIDE 去学习和使用 ...
- Robot Framework自动化测试框架核心指南-如何使用Java编写自定义的RobotFramework Lib
如何使用Java编写自定义的RobotFramework Lib 本文包括2个章节 1. Robot Frdamwork中如何调用java Lib库 2.使用 java编写自定义的Lib 本文作者为: ...
- Robot Framework自动化测试框架核心指南-如何做好自动化测试平台框架的设计
自动化测试如果需要能高效快速的支撑软件项目的测试,项目的快速迭代以及上线,除了以上我们介绍的需要许多的Lib来支持以及需要高效的去编写自动化测试案例外,还需要一个好的自动化测试框架平台来支撑我们的自动 ...
- Robot Framework自动化测试 ---视频与教程免费分享
当我第一次使用Robot Framework时,我是拒绝的.我跟老大说,我拒绝其实对于习惯了代码的自由,所以讨厌这种“填表格”式的脚本.老大说,Robot Framework使用简单,类库丰富,还可以 ...
随机推荐
- 练习1-16:修改打印最长文本行的程序的主程序main,使之可以打印任意长度的输入行的长度,并尽可能多地打印文本(C程序设计语言 第2版)
该书英文配套答案 Answer to Exercise -, page Revise the main routine of the longest-line program so it will c ...
- ABP框架详解(五)Navigation
ABP框架中的Navigation功能用于管理业务系统中所有可用的菜单导航控件,通常在业务系统的首页会有一个全局性的导航菜单,JD商城,天猫,猪八戒网莫不如是.所以为方便起见,Navigation功能 ...
- JAVA学习博客---2015-7
@Updata 2015.7.17 开始熟悉API.WPS首字母自动大写,有的没有加#编号的,其实方法首字母不是大写例如Char charAt 实际上是char charAt.当然骆驼写法charA ...
- 基于ejbca构建独立ca系统
ejbca,是一个CA(Certificate Authority)系统软件,CA是数字证书认证中心的简称,主要功能是管理数字证书,包括证书的颁发.销毁.更新等,ejbca实现了CA规范,因此可以用来 ...
- pdf.js在IIS中配置使用笔记
最近在手机App开发Android版本时候遇到需要显示PDF文件的需求,记得之前直接使用系统浏览器或者WebView就可以显示,但是现在不可以了,只能另寻其他办法. 最终找到PDF.JS来进行实现,但 ...
- 打造Ubuntu下Java开发环境
一.了解JDK 不同的java软件和类库对jdk有不同要求,在了解如何安装Java之前,让我们快速地了解JRE.OpenJDK和Oracle JDK之间的不同之处. JRE(Java Runtime ...
- 认识SQLServer索引以及单列索引和多列索引的不同
一.索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使 ...
- [ZigBee] 4、ZigBee基础实验——中断
前言 上一篇介绍了CC2530的IO的基础知识,并用LED的控制来展示如何配置并控制GPIO的输出,用KEY状态的读取实验来展示如何读取GPIO的状态.从上一节的KEY状态读取的代码看出是采用轮训方式 ...
- [ACM_动态规划] Alignment (将军排队)
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=28415#problem/F 题目大意:有n个士兵排成一列,将军想从中抽出最少人数使队伍中 ...
- Unity3D使用经验总结 缺点篇
不论是从官方手册,还是各种第三方教程,几乎涉及到的,都是讲如何使用U3D,以及U3D的优点. 虽然我是用的一个让步语气,但请不要否认U3D的这些优点,它们的确存在. 但对于一个引擎的特性来说,优点与缺 ...