|
Robotframework(RF)是一个非常好的关键字测试框架,但很多情况下RF自带的关键字无法满足我们
的业务测试需要,虽然RF的Evaluate 关键字能让我们以原生的python去执行库方法,如果一但业务处
理需要的代码量比较大时此方法就显示比较无助,让代码非常恶心难看,给我们的维护造成不便。但
是我们可以通过扩展RF自定义一个关键词库来满足我们的业务需求,而且我们非以随时向这个库中添
加关键字方法以满足我们不同的业务需求,这样就爽多了。
需求是这样的:在发送http请求时我需要对发送的Json字符串进行一AES加密,需要做一个加解密
的关键字。
第一步:打开pychrame新创建一个包名如HeJinRongLibrary,然后创建一个编写业务的python文件如
我的叫hejinrogKeywords.py。
复制代码
- <p># -*-coding:utf-8 -*-</p><p>
- </p><p>from robot.api import logger</p><p>from Crypto.Cipher import AES</p><p>import base64</p><p>from binascii import a2b_hex</p><p>
- </p><p>class hejinrongKeywords(object):</p><p> ROBOT_LIBRARY_SCOPE = 'Global'</p><p>
- </p><p> def body_encrypt(self, key, iv, text):</p><p> logger.info(u"加密字符串%s" % text)</p><p> return prpcrypt(key, iv).encrypt(text)</p><p>
- </p><p> def data_decrypt(self, key, iv, text):</p><p> logger.info(u"解密字符串%s" % text)</p><p> return prpcrypt(key, iv).decrypt(text)</p><p>
- </p><p>
- </p><p>class prpcrypt(object):</p><p>
- </p><p> def __init__(self, key, iv):</p><p> '''</p><p> :param key:AES 加密key</p><p> :return:</p><p> '''</p><p> self.key = key</p><p> self.iv = iv</p><p> BS = AES.block_size</p><p> self.pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)</p><p> self.unpad = lambda s : s[0:-ord(s[-1])]</p><p>
- </p><p> def encrypt(self, text):</p><p> """</p><p> :param text:需要加密的字符串</p><p> :return: 加密后的base64编码字符串</p><p> """</p><p>
- </p><p> raw = self.pad(text)</p><p> cipher = AES.new( self.key, AES.MODE_CBC, self.iv )</p><p> hex_data = cipher.encrypt(raw).encode("hex")</p><p> return base64.b64encode(a2b_hex(hex_data))</p><p>
- </p><p> def decrypt(self,text):</p><p> """</p><p> :param text: 需要解密的字符串</p><p> :return: 解密后的base64编码字符串</p><p> """</p><p> enc = base64.decodestring(text)</p><p> cipher = AES.new(self.key, AES.MODE_CBC, self.iv)</p><p> return self.unpad(cipher.decrypt(enc))</p>
复制代码
复制代码
在此代码中我们可以忽略prpcrypt类方法先不管,我们看hejinrongKeywords方法中,常量ROBOT_
LIBRARY_SCOPE = 'Global' 表示这个库是全局的。然后定义了两个关键字body_encrypt和data_decryp
t分别用于加解密,在方法中引入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中新增方法,或是新创建其它类由HeJinR
ongLibrary继承。这到里这个RF的库算是完成了。
第二步:我们将整个文件copy到C:\Python27\Lib\site-packages文件夹中,让python可以取到。
第三步:使用这个库,和平时一样导入这个库,显示为黑色证明导入成功。
按下F5可以看到我们的关键字
最后新创建一个case测试一把
看看日志成功了终于特么找到一丁点成就感。
|
|