Robotframework(RF)是一個非常好的關鍵字測試框架,但很多情況下RF自帶的關鍵字無法滿足我們的業務測試需要,雖然RF的Evaluate 關鍵字能讓我們以原生的python去執行庫方法,如果一但業務處理需要的代碼量比較大時此方法就顯示比較無助,讓代碼非常惡心難看,給我們的維護造成不便。但是我們可以通過擴展RF自定義一個關鍵詞庫來滿足我們的業務需求,而且我們非以隨時向這個庫中添加關鍵字方法以滿足我們不同的業務需求,這樣就爽多了。
需求是這樣的:在發送http請求時我需要對發送的Json字符串進行一AES加密,需要做一個加解密的關鍵字。
第一步:打開pychrame新創建一個包名如HeJinRongLibrary,然后創建一個編寫業務的python文件如我的叫hejinrogKeywords.py。
# -*-coding:utf-8 -*- from robot.api import logger from Crypto.Cipher import AES import base64 from binascii import a2b_hex class hejinrongKeywords(object): ROBOT_LIBRARY_SCOPE = 'Global' def body_encrypt(self, key, iv, text): logger.info(u"加密字符串%s" % text) return prpcrypt(key, iv).encrypt(text) def data_decrypt(self, key, iv, text): logger.info(u"解密字符串%s" % text) return prpcrypt(key, iv).decrypt(text) class prpcrypt(object): def __init__(self, key, iv): ''' :param key:AES 加密key :return: ''' self.key = key self.iv = iv BS = AES.block_size self.pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) self.unpad = lambda s : s[0:-ord(s[-1])] def encrypt(self, text): """ :param text:需要加密的字符串 :return: 加密后的base64編碼字符串 """ raw = self.pad(text) cipher = AES.new( self.key, AES.MODE_CBC, self.iv ) hex_data = cipher.encrypt(raw).encode("hex") return base64.b64encode(a2b_hex(hex_data)) def decrypt(self,text): """ :param text: 需要解密的字符串 :return: 解密后的base64編碼字符串 """ enc = base64.decodestring(text) cipher = AES.new(self.key, AES.MODE_CBC, self.iv) return self.unpad(cipher.decrypt(enc))
在此代碼中我們可以忽略prpcrypt類方法先不管,我們看hejinrongKeywords方法中,常量ROBOT_LIBRARY_SCOPE = 'Global' 表示這個庫是全局的。然后定義了兩個關鍵字body_encrypt和data_decrypt分別用於加解密,在方法中引入logger用rf日志api記錄輸入便於調試,就這么簡單。
最后打開__init__.py文件定義一下這個庫。
from hejinrogKeywords import hejinrongKeywords __verison__ = "0.1.1" class HeJinRongLibrary(hejinrongKeywords): ROBOT_LIBRARY_SCOPE = 'GLOBAL'
定義此庫的版本為0.1.1,定義庫名為HeJinRongLibrary,並繼承hejinrongKeywords中的所有方法。這樣后面不管我們需要什么關鍵字都可以在hejinrongKeywords中新增方法,或是新創建其它類由HeJinRongLibrary繼承。這到里這個RF的庫算是完成了。
第二步:我們將整個文件copy到C:\Python27\Lib\site-packages文件夾中,讓python可以取到。
第三步:使用這個庫,和平時一樣導入這個庫,顯示為黑色證明導入成功。
按下F5可以看到我們的關鍵字
最后新創建一個case測試一把
看看日志成功了終於特么找到一丁點成就感。
自定義關鍵字庫,說到底其實還是代碼技術,要寫一個優秀的庫是需要比較好的python功底的,推薦閱讀RequestsLibrary源碼。