• 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源码。

  • 相关阅读:
    CGO入门和OCR文字识别(非第三方API,有源码,效果好)实战
    Golang中如何正确的使用sarama包操作Kafka?
    音量强度转分贝db
    ShowDialog()弹出的窗体,关闭后,主窗体会闪烁的BUG
    小鱼提问3 static方法中可以访问某个类的私有变量吗(不通过反射的其他非正常手段)?什么情况下可以?
    “-="的陷阱
    c++ 从一个BYTE[] *filePtr 追加二进制文件
    Android解决程序切换后台被干掉,恢复状态问题
    Cookie
    dede后台搜索标签
  • 原文地址:https://www.cnblogs.com/donjor/p/6030287.html
Copyright © 2020-2023  润新知