Robot Framework開發(fā)系統(tǒng)關(guān)鍵字詳細(xì)
本文的目的,是記錄如何在rf下,開發(fā)屬于自己的庫函數(shù)(又稱之系統(tǒng)關(guān)鍵字)
1、首先在..\Python27\Lib\site-packages目錄下創(chuàng)建自定義庫目錄如Verification_Library,用于放自定義的library庫。
2、在自定義文件夾Verification_Library中新建一個"version.py"文件,用于描述自定義測試庫的版本信息。
代碼如下:
VERSION='1.0'
3、在自定義庫的文件夾Verification_Library下,新建一個keywords類,如文件名:verification.py, 測試類別為:Verfication 詳細(xì)如下:
(本實例的目的,實現(xiàn)對傳入的json格式的data數(shù)據(jù)進(jìn)行校驗--應(yīng)用場景,主要是針對http request庫返回的response中的data數(shù)據(jù)進(jìn)行校驗):
__author__ = 'Administrator' #coding=utf-8 #腳本作用:公共json數(shù)據(jù)校驗方法,遍歷data數(shù)據(jù),校驗字符串及整型數(shù)值 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、驗證傳入的參數(shù),如果為字典,則遍歷字典中的各個key,判斷各個key值,如果為字符串型,則校驗字符串為非空,如果為整型,則校驗字符串大于0 2、如果傳入的參數(shù)為列表,則將列表中各個參數(shù)取出,如果列表中各個參數(shù)為字典,處理方法參照第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('---開始進(jìn)行校驗---') #定義變量,計算遍歷次數(shù) times=0 for key,value in data.iteritems(): times=times+1 logging.info("") logging.info("---傳入的data數(shù)據(jù),第%s對象元素,key值對應(yīng)為:%s---"%(times,key)) logging.info('%s:%s' % (key, value)) self.analysis_subItem(value,msg) else: print type(data) logging.info("傳入的data數(shù)據(jù)不是dict對象") #判斷value值對應(yīng)的類型,從而進(jìn)行相應(yīng)的處理,嵌入遞歸函數(shù) def analysis_subItem(self,item,msg): ''' 1、不管value值取出如何,最終還是拆解成最小單元,字符串或者是整型來進(jìn)行判斷 :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("當(dāng)前int型獲取到的數(shù)字小于等于0") elif isinstance(item,list): value_list_len=len(item) logging.info('%s對應(yīng)值的類型為list且長度為%s'%(item,value_list_len)) for i in range(value_list_len): logging.info("") logging.info("內(nèi)嵌的列表中,第%s個子元素"%(i+1)) self.analysis_subItem(item[i],msg) elif isinstance(item,dict): value_dict_len=len(item) logging.info('%s對應(yīng)值的類型為dict且長度為%s'%(item,value_dict_len)) times=0 for subkey,subvalue in item.iteritems(): times=times+1 logging.info("") logging.info("---內(nèi)嵌的字典中,第%s對象元素,key值對應(yīng)為:%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、對于創(chuàng)建普通的模塊來說這樣已經(jīng)ok了。但要想在robot framework啟動后加載這個關(guān)鍵字,還需要在自定義庫目錄Verification_Library下創(chuàng)建__init__.py文件,用于定義自定義庫的相關(guān)信息和需要用到的keywords調(diào)用繼承和聲明。
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' #此句作用是指該庫運(yùn)行的時候會作用在全局。
5、啟動ride程序在setting部分添加library庫信息,添加庫名為Verification_Library
即可成功導(dǎo)入自定義庫。
注意:
庫文件夾名稱一定要和__init__文件中的類名稱相同(Verification_Library),否則導(dǎo)入自定義庫時會出錯。

浙公網(wǎng)安備 33010602011771號