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(a,b):
        ‘‘‘Computing a and b are two numbers together, for example:
        |    add     |   2    |    5     |
        ‘‘‘
        return a + b

    def sub(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

时间: 2024-10-25 03:31:30

Robot Framework自动化测试(六)--- robotremoteserver使用的相关文章

Robot Framework自动化测试(一)---第一个脚本

最近工具中用Robot Framework框架来做自动化,所以,花时间学习了一下. =======所需环境=================== Python: https://www.python.org/ RF框架是基于python 的,所以一定要有python环境. Robot framework : https://pypi.python.org/pypi/robotframework/2.8.5 这个不是解释了,RF框架.虽然在做基于UI的自动化时,它展现出来的很像QTP,我之前也以为

Robot Framework自动化测试(二)---元素定位

说明: 不要误认为Robot framework 只是个web UI测试工具,更正确的理解Robot framework是个测试框架,之所以可以拿来做web UI层的自动化是国为我们加入了selenium2的API.比如笔者所处工作中,更多的是拿Robot framework来做数据库的接口测试,当然,需要先将相关的数据库包导入. 那么测试框架的本质是什么?个人觉得有以下几个方面. 1.比较 测试实质就是“比较”,在测试之前需要先写用例,假设经过各种操作之后会得到一个预期的结果,然后,在测试的过

Robot Framework自动化测试框架(一)

摘要: Robot Framework是一款python编写的功能自动化测试框架.具备良好的可扩展性,支持关键字驱动,可以同时测试多种类型的客户端或者接口,可以进行分布式测试执行.主要用于轮次很多的验收测试和验收测试驱动开发(ATDD). 正文: 1.环境搭建 1.1 robotframework安装:pip install robotframework 1.2 RIDE就是一个图形界面的用于创建.组织.运行测试的软件,robotframework-ride安装:pip install robo

Robot Framework自动化测试框架(二):WEB自动化

摘要: WEB自动化离不开selenium,当然robot framework也是一样,结合了selenium,需要安装:pip install selenium2library,习惯了编码写WEB自动化,robot framework基于关键字自动化的工具也还算可以,让测试变得更简单就好. 正文: 1.元素定位: 1.1 id或name定位 1.2 xpath定位 1.Xpath的绝对路径: Xpath = /html/body/div[1]/div[4]/div[2]/div/form/sp

Robot Framework自动化测试 ---视频与教程免费分享

当我第一次使用Robot Framework时,我是拒绝的.我跟老大说,我拒绝其实对于习惯了代码的自由,所以讨厌这种"填表格"式的脚本.老大说,Robot Framework使用简单,类库丰富,还可以自由开发系统关键字.那我说,你不能让我用我就用,我要先用用看.自从我用了半年多以来,duang~! 真的挺好用的.duang~! ,我相信我用完是这个样子,你们用完也是这个样子.duang~! duang~! ----今年流行"duang",我也来一段.哈哈~! Rob

三年磨一剑,robot framework 自动化测试框架核心指南,真正讲透robot framework自动化测试框架(笔者新书上架)。

序 关于自动化测试的工具和框架其实有很多.自动化测试在测试IT行业中扮演着越来越重要的角色,不管是在传统的IT行业还是高速发展的互联网行业或是如今的大数据和大热的人工智能领域,都离不开测试,也更加离不开自动化测试.自动化测试已经发展了很多年,在很多大的互联网公司里他们不但有自己的自动化测试框架,甚至基本都建立了自己的自动化测试平台或者已经对外开放使用的自动化测试云平台,也就是说自动化测试几乎已经成为一名测试工程师必须掌握的一个技能,并且随着很多自动化测试工具和框架的不断发展和完善,自动化测试也变

Robot Framework自动化测试(五)--- 开发系统关键字

最近一直在用robot framework 做自动化测试项目,老实说对于习惯直接使用python的情况下,被框在这个工具里各种不爽,当然,使用工具的好处也很多,降低了使用成本与难度:当然,在享受工具带来便利的同时也会受制于工具.对于特定的需求,工具没提供相关的Library和关键字的时候,就只能放弃了. 还好robot framework提供了 Evaluate 关键字,对于Evaluate 关键字的使用等有时间再讲.当robot framework 不能解决需求,我是直接写个.py 程序,通过

Robot Framework自动化测试 ---文档分享

当我第一次使用Robot Framework时,我是拒绝的.我跟老大说,我拒绝其实对于习惯了代码的自由,所以讨厌这种“填表格”式的脚本.老大说,Robot Framework使用简单,类库丰富,还可以自由开发系统关键字.那我说,你不能让我用我就用,我要先用用看.自从我用了半年多以来,duang~! 真的挺好用的.duang~! ,我相信我用完是这个样子,你们用完也是这个样子.duang~! duang~! ----今年流行“duang”,我也来一段.哈哈~! Robot Framework特点:

Robot Framework自动化测试环境部署

文档版本:v1.0 作者:令狐冲 如有问题请发邮件到:[email protected] 使用Robot Framework框架(以下简称RF)来做自动化测试. 模块化设计 1.所需环境一览表 软件 版本 发布日期 用途 官方网站 ActivePython 2.7 很早以前 RF是基于Python语言的,ActivePython其实就是在Python官方安装包上加了一些有用的组件,如pip http://www.activestate.com/activepython Robot Framewo