Robot Framework开发系统关键字详细

本文的目的,是记录如何在rf下,开发属于自己的库函数(又称之系统关键字)

1、首先在..\Python27\Lib\site-packages目录下创建自定义库目录如Verification_Library,用于放自定义的library库。

2、在自定义文件夹Verification_Library中新建一个"version.py"文件,用于描述自定义测试库的版本信息。
代码如下:

VERSION=‘1.0‘

3、在自定义库的文件夹Verification_Library下,新建一个keywords类,如文件名:verification.py, 测试类别为:Verfication  详细如下:

(本实例的目的,实现对传入的json格式的data数据进行校验--应用场景,主要是针对http request库返回的response中的data数据进行校验):

__author__ = ‘Administrator‘
#coding=utf-8
#脚本作用:公共json数据校验方法,遍历data数据,校验字符串及整型数值

import logging

data={"classify":
    [{
    "id":1,
    "name":"XX"
    }],
    "test":{},
    "hotSongs":[{
            "songId" : 2,
            "songName" :"ddd",
            "singerId" : 3,
            "singerName" :"aaa",
            "hash" : "435B50137E16526DFF5BB10DA13A2A4D",
            "climaxHash":"E0B5EA5454B5E651C609CE7B713E32F3",
            "startTime" : 104000,
            "endTime" : 125000,
            "krc" : "but I just can‘t make a sound",
            "singerImg" : "20111226113925990226.jpg"
      },
                {
            "songId" : 3,
            "songName" :"ddd",
            "singerId" : 4,
            "singerName" :"aaa",
            "hash" : "435B50137E16526DFF5BB10DA13A2A4D",
            "climaxHash":"E0B5EA5454B5E651C609CE7B713E32F3",
            "startTime" : 104000,
            "endTime" : 125000,
            "krc" : "but I just can‘t make a sound",
            "singerImg" : "20111226113925990226.jpg"
      }]
}

data1={     "songId" : 2,
            "songName" :"ddd",
            "singerId" : 3,
            "singerName" :"aaa",
            "hash" : "435B50137E16526DFF5BB10DA13A2A4D",
            "climaxHash":"E0B5EA5454B5E651C609CE7B713E32F3",
            "startTime" : 104000,
            "endTime" : 125000,
            "krc" : "but I just can‘t make a sound",
            "singerImg" : "20111226113925990226.jpg"
      }

class Verfication(object):

    def verfication_data(self,data,msg=None):
        ‘‘‘
        1、验证传入的参数,如果为字典,则遍历字典中的各个key,判断各个key值,如果为字符串型,则校验字符串为非空,如果为整型,则校验字符串大于0
        2、如果传入的参数为列表,则将列表中各个参数取出,如果列表中各个参数为字典,处理方法参照第1步。
        ‘‘‘
        if isinstance(data,dict):
            logging.info("---基本信息获取---")
            logging.info("传入的data为json对象!")
            logging.info(‘传入过来的json对象主key的长度:%s‘%len(data))
            keys=data.keys()
            logging.info(keys)
            logging.info(‘---开始进行校验---‘)
            #定义变量,计算遍历次数
            times=0
            for key,value in data.iteritems():
                times=times+1
                logging.info("")
                logging.info("---传入的data数据,第%s对象元素,key值对应为:%s---"%(times,key))
                logging.info(‘%s:%s‘ % (key, value))
                self.analysis_subItem(value,msg)

        else:
            print type(data)
            logging.info("传入的data数据不是dict对象")

    #判断value值对应的类型,从而进行相应的处理,嵌入递归函数
    def analysis_subItem(self,item,msg):
        ‘‘‘
        1、不管value值取出如何,最终还是拆解成最小单元,字符串或者是整型来进行判断
        :return:
        ‘‘‘
        if isinstance(item,str):
            if self.get_length(item) == 0:
                raise AssertionError(msg or "‘%s‘ should not be empty." % str)
        elif isinstance(item,int):
            if int(item)<=0:
                raise AssertionError("当前int型获取到的数字小于等于0")

        elif isinstance(item,list):
               value_list_len=len(item)
               logging.info(‘%s对应值的类型为list且长度为%s‘%(item,value_list_len))
               for i in range(value_list_len):
                   logging.info("")
                   logging.info("内嵌的列表中,第%s个子元素"%(i+1))
                   self.analysis_subItem(item[i],msg)

        elif isinstance(item,dict):
               value_dict_len=len(item)
               logging.info(‘%s对应值的类型为dict且长度为%s‘%(item,value_dict_len))
               times=0
               for subkey,subvalue in item.iteritems():
                    times=times+1
                    logging.info("")
                    logging.info("---内嵌的字典中,第%s对象元素,key值对应为:%s---"%(times,subkey))
                    logging.info(‘%s:%s‘ % (subkey, subvalue))
                    self.analysis_subItem(subvalue,msg)

    #计算字符串长度
    def get_length(self,item):
            length =self._get_length(item)
            logging.info(‘Length is %d‘ % length)
            logging.info("")
            return length

    def _get_length(self,item):
            try:
                return len(item)

            except:
                raise RuntimeError("Could not get length of ‘%s‘." % item)

if __name__ == ‘__main__‘:
    run_object=Verfication()
    run_object.verfication_data(data)

4、对于创建普通的模块来说这样已经ok了。但要想在robot framework启动后加载这个关键字,还需要在自定义库目录Verification_Library下创建__init__.py文件,用于定义自定义库的相关信息和需要用到的keywords调用继承和声明。

1 __author__ = ‘Administrator‘
2 from verification import Verfication
3 from version import VERSION
4
5 __version__=VERSION
6
7 class Verification_Library(Verfication):
8     ROBOT_LIBRARY_SCOPE=‘GLOBAL‘    #此句作用是指该库运行的时候会作用在全局。

5、启动ride程序在setting部分添加library库信息,添加库名为Verification_Library
即可成功导入自定义库。

注意:
库文件夹名称一定要和__init__文件中的类名称相同(Verification_Library),否则导入自定义库时会出错。

时间: 2024-12-29 06:10:37

Robot Framework开发系统关键字详细的相关文章

最新robot framework 建立系统关键字

复习一下robot framework 如何建立系统关键字 首先在python安装路径Lib\site-packages目录下建立一个文件夹,文件名随意,如CustomLibrary 然后在文件夹下建立一个__init__.py文件,文件内容先为空 然后在Lib\site-packages目录下建立一个py文件,文件名随意,我这里设为rundata.py 编辑rundata.py内容, # coding:utf-8 class Rundata(): def add(self,a,b): retu

Robot Framework分层、开发系统关键字

开发系统关键字:http://www.cnblogs.com/fnng/p/4261293.html http://www.cnblogs.com/fnng/p/3969978.html 一.环境搭建 网上有很多的教程,这里就不多讲了 二.RIDE的界面认识 这里只介绍几个重要常用的功能,其他相信自己都能理解 1.Search Keywords(F5): 搜索关键字 2.Content Assistance:内容助手 3.View RIDE Log:查看RIDE日志,使用过程中报错,可以来这里查

Robot Framework自动化_Selenium2Library 关键字

Robot Framework自动化_Selenium2Library 关键字 培训老师:肖能尤 2016/06/12 课程目的 一.Robot framework Selenium2Library 关键字 课程内容 1    Selenium2Library 库的关键字说明 关于Selenium2Library 的关键字,我们可以参考: http://rtomac.github.io/robotframework-selenium2library/doc/Selenium2Library.ht

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

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

Robot Framework自动化测试Selenium2Library库详细用法

一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com chrome 浏览器对应的关键字: firefox FireFox ff internetexplorer Internet Explorer ie googlechrome Google Chrome gc chrome opera Opera phantomjs PhantomJS htmlunit HTMLUnit htmlunitwithjs HTMLUnit with Javas

Robot Framework安装部署详细教程

(转自"义甬君") Robot Framework安装准备 说实话,在我玩了这么多自动化工具后,感觉Robot Framework所需的环境和安装过程是相对比较繁琐和复杂的.要真正搭建一套可以使用的Robot Framework开发运行环境,需要以下: Python 2.7 (最新版Python3.6为什么不可以?-后面我会讲) pip 和 setuptools (Python 的套件管理程式,最新版的Python 2.7.13已包含) Robot Framework (此工具本身)

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

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

Robot Framework自动化测试框架之我见

一些自动化测试现状: 盲目的去做自动化,最终以失败告终: 认为是能提高效率的事情,却推广不下去: 其实上述问题产生的原因是: 自动化测试案例稳定性不高,可维护性比较差: 自动化测试工具学习成本高,自动化测试人员的成本高: 而RF(Robot Framework,后面都简称RF)具备良好的分层思想,它将测试人员分为懂开发和不懂开发的,懂开发来负责底层关键字开发和维护,供不懂开发的测试人员调用,通过填写表格的形式用自言语言来写自动化测试用例.这样写出来的用例测试用例,大大增强了易读性和可维护性. R

(一)Robot Framework 介绍

(一)Robot Framework 介绍 发布时间 2017年9月28日 虫师 Robot Framework 官方网站:http://robotframework.org/ 介绍 Robot Framework 架构是一个通用的验收测试和验收测试驱动开发的自动化测试框架(ATDD).它具有易于使用的表格来组织测试过程和测试数据. test case     open browser http://www.baidu.com chrome input text id=kw robot fram