robot remote server使用

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浏览器。

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据来源:中经数据库 主要指标110多个(全部都是纯粹的 市辖区 指标),大致是: GDP GDP增速 第一产业增加值占GDP比重 第二产业增加值占GDP比重 第三产业增加值占GDP比重 人均GDP 社会消费品零售总额 固定资产投资(不含农户) 新设外商投资企业数_外商直接投资 实际利用外资金额(美元) 一般公共预算收入 一般公共预算支出 一般公共预算支出_教育 一般公共预算支出_科学技术 金融机构人民币各项存款余额_个人储蓄存款 金融机构人民币各项存款余额 金融机构人民币各项贷款余额 规模以上工业企业单位数 规模以上工业企业单位数_内资企业 规模以上工业企业单位数_港澳台商投资企业 规模以上工业企业单位数_外商投资企业 规模以上工业总产值 规模以上工业总产值_内资企业 规模以上工业总产值_港澳台商投资企业 规模以上工业总产值_外商投资企业 规模以上工业企业流动资产合计 规模以上工业企业固定资产合计 规模以上工业企业利润总额 规模以上工业企业应交增值税 规模以上工业企业主营业务税金及附加 户籍人口数 年均户籍人口数 户籍人口自然增长率 第一产业就业人员占全部城镇单位就业人员比重 第二产业就业人员占全部城镇单位就业人员比重 第三产业就业人员占全部城镇单位就业人员比重 城镇非私营单位就业人员数 城镇非私营单位就业人员数_第一产业 城镇非私营单位就业人员数_第二产业 城镇非私营单位就业人员数_第三产业 城镇非私营单位就业人员数_农、林、牧、渔业 城镇非私营单位就业人员数_采矿业 城镇非私营单位就业人员数_制造业 城镇非私营单位就业人员数_电力、热力、燃气及水生产和供应业 城镇非私营单位就业人员数_建筑业 城镇非私营单位就业人员数_批发和零售业 城镇非私营单位就业人员数_交通运输、仓储和邮政业 城镇非私营单位就业人员数_住宿和餐饮业 城镇非私营单位就业人员数_信息传输、软件和信息技术服务业 城镇非私营单位就业人员数_金融业 城镇非私营单位就业人员数_房地产业 城镇非私营单位就业人员数_租赁和商务服务业 城镇非私营单位就业人员数_科学研究和技术服务业 城镇非私营单位就业人员数_水利、环境和公共设施管理业 城镇非私营单位就业人员数_居民服务、修理和其他服务业 城镇非私营单位就业人员数_教育 城镇非私营单位就业人员数_卫生和社会工作 城镇非私营单位就业人员数_文化、体育和娱乐业 城镇非私营单位就业人员数_公共管理、社会保障和社会组织 城镇非私营单位在岗职工平均人数 城镇就业人员数_私营企业和个体 城镇非私营单位在岗职工工资总额 城镇非私营单位在岗职工平均工资 城镇登记失业人员数 建成区面积 建设用地面积 建设用地面积_居住用地 液化石油气供气总量 液化石油气供气总量_居民家庭 人工煤气、天然气供气总量 人工煤气、天然气供气总量_居民家庭 液化石油气用气人口 人工煤气、天然气用气人口 城市公共汽电车运营车辆数 城市出租汽车运营车辆数 城市公共汽电车客运总量 道路面积 排水管道长度 建成区绿化覆盖面积 建成区绿化覆盖率 绿地面积 公园绿地面积 维护建设资金支出 土地面积 生活用水供水量 供水总量 全社会用电量 城乡居民生活用电量 工业生产用电量 房地产开发投资 房地产开发投资_住宅 限额以上批发和零售业法人单位数 限额以上批发和零售业商品销售总额 普通中学学校数 中等职业教育学校数 普通小学学校数 普通高等学校专任教师数 普通中学专任教师数 中等职业教育专任教师数 普通小学专任教师数 普通高等学校在校生数 普通中学在校生数 中等职业教育在校生数 普通小学在校生数 电视节目综合人口覆盖率 公共图书馆总藏量_图书 医疗卫生机构数_医院和卫生院 卫生人员数_执业(助理)医师 医疗卫生机构床位数_医院和卫生院 城镇职工基本养老保险参保人数 职工基本医疗保险参保人数 失业保险参保人数

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值