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),否则导入自定义库时会出错。
技术改变世界!
--狂诗绝剑