zoukankan      html  css  js  c++  java
  • Robot Framework开发系统关键字详细

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

    1、首先在..Python27Libsite-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),否则导入自定义库时会出错。

  • 相关阅读:
    Instr() 函数用法
    tomcat通过tomcat 安装根目录下的conf-Catalina-localhost目录发布项目详解
    字符串中包含任意几个字符中的至少一个
    四大奶粉中的三个
    mysql几个操作数据库命令符下的常用命令
    访问网络资源302 200 解释
    浅谈Java变量的初始化顺序详解
    static块的本质
    迭代器
    集合接口和类
  • 原文地址:https://www.cnblogs.com/jinjiangongzuoshi/p/4966725.html
Copyright © 2011-2022 走看看