Robotframework自定义关键字库_keywords robot_Bonnie-帮你的博客-程序员秘密

技术标签: 自动化测试  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:\Python27\Lib\site-packages文件夹中,让python可以取到。
第三步:使用这个库,和平时一样导入这个库,显示为黑色证明导入成功。

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

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

 

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

 

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/daocaoren1543169565/article/details/80652859

智能推荐

【SQL实战经验二】:SQL语句实现属性值的换行_sql语句换行_liufen_19900213的博客-程序员秘密

采用SQL语句对属性值进行批量换行对datatable表中的NAME字段值进行换行,当长度超过3个字节时,在第3个字节前插入换行符update datatable set NAME = substr(NAME,0,3)||"\r\n"||substr(NAME,3) where length(NAME) >= 3;效果换行前:内蒙古自治区换行后内蒙古自治区换行前:Ch...

Day 07--最终修改(三)_Wutian0502的博客-程序员秘密

1.今天重点学了页面的结构和页面之间配置的关系,对小程序开发的框架有了具体完整地了解。并且写了写个人页面:2.明天着重学一下逻辑层的语法,以及界面层的数据绑定,与队友交流进度3.今天修改也终于完成,除了搞c++以外的全部身心都放在这个东西身上也觉得它有点难搞,说明计算机不是吃素的。甚至在使用xml语法的时候也遇到了困难,一顿好查才解决的。吃得苦中苦方为人上人,更何况我这并...

计算机科学与技术专业考数媒,数字媒体技术研究生院校排名_金牛远望号的博客-程序员秘密

Add 本专业学姐微信为你免费答疑关于《数字媒体技术考研》我们搜集了部分数字媒体技术考研真题和复试资源,免费赠送;并提供有偿的数字媒体技术初试/复试/调剂辅导(收费合理,内部资源,效果有保障),如果需要领资源或了解研究生辅导的,请加网页上的学姐微信。数字媒体技术研究生院校排名是对数字媒体技术专业研究生大学排名的相对研究生专业实力评估,数字媒体技术研究生院校排名反映了本专业在全国开设数字媒体技术专业...

idea中java项目显示不对_Java IntelliJ IDEA 不能显示项目里的文件结构解决办法_weixin_39789399的博客-程序员秘密

Oracle查询和问题简记现在做两个版本的系统,一个用的数据库是Access,另一个就是Oracle了.每个数据库支持的的查询SQL语句都有所区别,这里主要针对Access和Oracle做 记录. 首先贴出遇到问题最多的一条语 ...imshow() displays a white image for a grey imageMatlab expects im...

非码农也能看懂的“机器学习”原理_XDWX的博客-程序员秘密

非码农也能看懂的“机器学习”原理 <div class="postBody"> <div id="cnblogs_post_body" class="blogpost-bo

python pandas 绘图_用python-pandas作图矩阵_weixin_39976748的博客-程序员秘密

注:本文为一篇翻译文章,来自于Visualize Machine Learning Data in Python With Pandas - Machine Learning Mastery,原文标题是VisualizeMachine Learning Data in Python With Pandas(在Python里使用pandas对机器学习的数据进行可视化分析),作者的意思是我们在采用机器...

随便推点

java的Classloder的lodeClass源码解析_正人君子橘子洲的博客-程序员秘密

java中Classloder类的lodeClass方法源码解析1.什么是ClassLoder:顾名思义就是类加载器,类的加载指的是将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向Java程序员提供了访问方法区内的数据结构的接口。2.简单介绍介绍下类从出生到入土的过程:java文

POJ2251 Dungeon Master(3D迷宫 bfs)_hkhv的博客-程序员秘密

题目链接:http://poj.org/problem?id=2251Dungeon Master DescriptionYou are trapped in a 3D dungeon and need to find the quickest way out! The dungeon is composed of unit cubes which may or may not b

JAVA零基础入门第一阶段(7)_北岛玲_一锅老鸭汤的博客-程序员秘密

一.数组的说明1.数组含义存储多个数据的集合2.相关概念元素:数组里的数据下标/索引:每个数据对应的编号,从0开始3.数组的声明数据类型[] 数组名; 二.数组的初始化1.静态初始化①静态初始化初始化数组时,元素由程序员指定,长度由系统根据元素个数开辟内存空间②初始化类型//静态初始化1String[] names = new String[]{“麻生希”,“水野朝阳”,“爱田奈奈”,“京香Juila”,“明日花绮罗”};//静态初始化2:先声明,再初始化String[]

Android ViewPager多页面滑动切换以及动画效果_小地盘的博客-程序员秘密

转载:http://blog.csdn.net/zhuifeng11/article/details/7604734http://www.cnblogs.com/dwinter/archive/2012/02/27/AndroidViewPager%E5%A4%9A%E9%A1%B5%E9%9D%A2%E6%BB%91%E5%8A%A8%E5%88%87%E6%8D%A2%E4%BB%

推荐文章

热门文章

相关标签