• Robotframework自定义关键字库


        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:Python27Libsite-packages文件夹中,让python可以取到。
    第三步:使用这个库,和平时一样导入这个库,显示为黑色证明导入成功。

    按下F5可以看到我们的关键字

    最后新创建一个case测试一把

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

     自定义关键字库,说到底其实还是代码技术,要写一个优秀的库是需要比较好的python功底的,推荐阅读RequestsLibrary源码。

  • 相关阅读:
    基于session做的权限控制
    spring有关jar包的作用
    Failed to apply plugin [id 'com.android.application'] 和 Could not find com.android.tools.build:gradle:2.XX的最正确的解决方法
    Android Handler机制(四)---Handler源码解析
    System.currentTimeMillis()与SystemClock.uptimeMillis()
    【转】博客美化(6)为你的博文自动添加目录
    Android Handler机制(三)----Looper源码解析
    Android Handler机制(二)---MessageQueue源码解析
    Android Handler机制(一)---Message源码分析
    关于Android Force Close 出现的原因 以及解决方法
  • 原文地址:https://www.cnblogs.com/donjor/p/6030287.html
Copyright © 2020-2023  润新知