51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2265|回复: 0
打印 上一主题 下一主题

Robotframework自定义关键字库

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-6-21 13:27:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Robotframework(RF)是一个非常好的关键字测试框架,但很多情况下RF自带的关键字无法满足我们
的业务测试需要,虽然RF的Evaluate 关键字能让我们以原生的python去执行库方法,如果一但业务处
理需要的代码量比较大时此方法就显示比较无助,让代码非常恶心难看,给我们的维护造成不便。但
是我们可以通过扩展RF自定义一个关键词库来满足我们的业务需求,而且我们非以随时向这个库中添
加关键字方法以满足我们不同的业务需求,这样就爽多了。

  需求是这样的:在发送http请求时我需要对发送的Json字符串进行一AES加密,需要做一个加解密
的关键字。
第一步:打开pychrame新创建一个包名如HeJinRongLibrary,然后创建一个编写业务的python文件如
我的叫hejinrogKeywords.py。

复制代码
  1. <p># -*-coding:utf-8 -*-</p><p>
  2. </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>
  3. </p><p>class hejinrongKeywords(object):</p><p>    ROBOT_LIBRARY_SCOPE = 'Global'</p><p>
  4. </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>
  5. </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>
  6. </p><p>
  7. </p><p>class prpcrypt(object):</p><p>
  8. </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>
  9. </p><p>    def encrypt(self, text):</p><p>        """</p><p>        :param text:需要加密的字符串</p><p>        :return: 加密后的base64编码字符串</p><p>        """</p><p>
  10. </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>
  11. </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测试一把





看看日志成功了终于特么找到一丁点成就感。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-26 15:18 , Processed in 0.061962 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表