本文的目的,是记录如何在rf下,开发属于自己的库函数(又称之系统关键字)

1、首先在..\Python27\Lib\site-packages目录下创建自定义库目录如Verification_Library,用于放自定义的library库。

2、在自定义文件夹Verification_Library中新建一个"version.py"文件,用于描述自定义测试库的版本信息。
代码如下:

VERSION='1.0'

3、在自定义库的文件夹Verification_Library下,新建一个keywords类,如文件名:verification.py, 测试类别为:Verfication  详细如下:

(本实例的目的,实现对传入的json格式的data数据进行校验--应用场景,主要是针对http request库返回的response中的data数据进行校验):

__author__ = 'Administrator'
#coding=utf-8
#脚本作用:公共json数据校验方法,遍历data数据,校验字符串及整型数值 import logging data={"classify":
[{
"id":1,
"name":"XX"
}],
"test":{},
"hotSongs":[{
"songId" : 2,
"songName" :"ddd",
"singerId" : 3,
"singerName" :"aaa",
"hash" : "435B50137E16526DFF5BB10DA13A2A4D",
"climaxHash":"E0B5EA5454B5E651C609CE7B713E32F3",
"startTime" : 104000,
"endTime" : 125000,
"krc" : "but I just can't make a sound",
"singerImg" : "20111226113925990226.jpg"
},
{
"songId" : 3,
"songName" :"ddd",
"singerId" : 4,
"singerName" :"aaa",
"hash" : "435B50137E16526DFF5BB10DA13A2A4D",
"climaxHash":"E0B5EA5454B5E651C609CE7B713E32F3",
"startTime" : 104000,
"endTime" : 125000,
"krc" : "but I just can't make a sound",
"singerImg" : "20111226113925990226.jpg"
}]
} data1={ "songId" : 2,
"songName" :"ddd",
"singerId" : 3,
"singerName" :"aaa",
"hash" : "435B50137E16526DFF5BB10DA13A2A4D",
"climaxHash":"E0B5EA5454B5E651C609CE7B713E32F3",
"startTime" : 104000,
"endTime" : 125000,
"krc" : "but I just can't make a sound",
"singerImg" : "20111226113925990226.jpg"
} class Verfication(object): def verfication_data(self,data,msg=None):
'''
1、验证传入的参数,如果为字典,则遍历字典中的各个key,判断各个key值,如果为字符串型,则校验字符串为非空,如果为整型,则校验字符串大于0
2、如果传入的参数为列表,则将列表中各个参数取出,如果列表中各个参数为字典,处理方法参照第1步。
'''
if isinstance(data,dict):
logging.info("---基本信息获取---")
logging.info("传入的data为json对象!")
logging.info('传入过来的json对象主key的长度:%s'%len(data))
keys=data.keys()
logging.info(keys)
logging.info('---开始进行校验---')
#定义变量,计算遍历次数
times=0
for key,value in data.iteritems():
times=times+1
logging.info("")
logging.info("---传入的data数据,第%s对象元素,key值对应为:%s---"%(times,key))
logging.info('%s:%s' % (key, value))
self.analysis_subItem(value,msg) else:
print type(data)
logging.info("传入的data数据不是dict对象") #判断value值对应的类型,从而进行相应的处理,嵌入递归函数
def analysis_subItem(self,item,msg):
'''
1、不管value值取出如何,最终还是拆解成最小单元,字符串或者是整型来进行判断
:return:
'''
if isinstance(item,str):
if self.get_length(item) == 0:
raise AssertionError(msg or "'%s' should not be empty." % str)
elif isinstance(item,int):
if int(item)<=0:
raise AssertionError("当前int型获取到的数字小于等于0") elif isinstance(item,list):
value_list_len=len(item)
logging.info('%s对应值的类型为list且长度为%s'%(item,value_list_len))
for i in range(value_list_len):
logging.info("")
logging.info("内嵌的列表中,第%s个子元素"%(i+1))
self.analysis_subItem(item[i],msg) elif isinstance(item,dict):
value_dict_len=len(item)
logging.info('%s对应值的类型为dict且长度为%s'%(item,value_dict_len))
times=0
for subkey,subvalue in item.iteritems():
times=times+1
logging.info("")
logging.info("---内嵌的字典中,第%s对象元素,key值对应为:%s---"%(times,subkey))
logging.info('%s:%s' % (subkey, subvalue))
self.analysis_subItem(subvalue,msg) #计算字符串长度
def get_length(self,item):
length =self._get_length(item)
logging.info('Length is %d' % length)
logging.info("")
return length def _get_length(self,item):
try:
return len(item) except:
raise RuntimeError("Could not get length of '%s'." % item) if __name__ == '__main__':
run_object=Verfication()
run_object.verfication_data(data)

4、对于创建普通的模块来说这样已经ok了。但要想在robot framework启动后加载这个关键字,还需要在自定义库目录Verification_Library下创建__init__.py文件,用于定义自定义库的相关信息和需要用到的keywords调用继承和声明。

 __author__ = 'Administrator'
from verification import Verfication
from version import VERSION __version__=VERSION class Verification_Library(Verfication):
ROBOT_LIBRARY_SCOPE='GLOBAL' #此句作用是指该库运行的时候会作用在全局。

5、启动ride程序在setting部分添加library库信息,添加库名为Verification_Library
即可成功导入自定义库。

注意:
库文件夹名称一定要和__init__文件中的类名称相同(Verification_Library),否则导入自定义库时会出错。

Robot Framework开发系统关键字详细的更多相关文章

  1. Robot Framework分层、开发系统关键字

            开发系统关键字:http://www.cnblogs.com/fnng/p/4261293.html http://www.cnblogs.com/fnng/p/3969978.htm ...

  2. Robot Framework自动化_Selenium2Library 关键字

    Robot Framework自动化_Selenium2Library 关键字 培训老师:肖能尤 2016/06/12 课程目的 一.Robot framework Selenium2Library ...

  3. Robot Framework自动化测试(五)--- 开发系统关键字

    最近一直在用robot framework 做自动化测试项目,老实说对于习惯直接使用python的情况下,被框在这个工具里各种不爽,当然,使用工具的好处也很多,降低了使用成本与难度:当然,在享受工具带 ...

  4. Robot framework(RF) 用户关键字

    3.6  用户关键字 在Robot Framework 中关键字的创建分两种:系统关键字和用户关键字. 系统关键字是需要通过脚本开发相应的类和方法,从而实现某一逻辑功能. 用户关键字是根据业务的需求利 ...

  5. Robot Framework自动化测试Selenium2Library库详细用法

    一.浏览器驱动 通过不同的浏览器执行脚本. Open Browser Htpp://www.xxx.com chrome 浏览器对应的关键字: firefox FireFox ff internete ...

  6. Robot Framework(用户关键字)

    在 Robot Framework 中关键字的创建分两种:系统关键字和用户关键字.系统关键字需要通过脚本开发相应的类和方法,这个我们将在后面的章节介绍.用户关键字的创建就要简单得多,它主要利用现有的系 ...

  7. Robot Framework(12)- 详细解读 RF 的变量和常量

    如果你还想从头学起Robot Framework,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1770899.html 常量的栗子 常量 ...

  8. [Robot Framework] SikuliLibrary的关键字执行依赖java进程,但是上次的java进程如果没有杀掉,robot framework控制台的日志出不来,怎么办?

    如果在suite的setup里面杀掉java进程:AutoItLibrary.Run | taskkill /F /IM java.exe 执行sikuli的关键字会报这样的错误: Connectio ...

  9. Robot Framework selenium2library 常用关键字

    Selenium Library SeleniumLibrary is a Robot Framework test library that uses the popular Selenium we ...

随机推荐

  1. sql server 2008 R2 压缩备份数据库

    今天需要把一个省外项目的数据库从服务器上备份.拷贝到本机(跨地域传输数据库备份文件). 连上VPN,通过远程桌面连接,连接上服务器,发现数据库文件已经有20G以上大小了. 文件太大,公司网络也不稳定, ...

  2. TI公司与MSP430单片机

    美国德州仪器(Texas Instruments)公司,简称TI,是全球领先的半导体公司,成立于1930 年,成立之初是一家使用地震信号处理技术勘探原油的地质勘探公司,1951年更名为德州仪器公司,1 ...

  3. mysql5.7.14 配置

    1. 下载并解压 zip包 2.将解压后的目录 bin  配置到path中 3.修改my-default.ini 文件名为my.ini 4.配置my.ini [mysql] #设置mysql客户端默认 ...

  4. HDU 1956 POJ 1637 Sightseeing tour

    混合图的欧拉回路判定方法: 1.首先判断基图是否连通,不连通的话表示不可能,否则进入下一步. 2.对于无向边,随便确定一个方向 3.确定好了之后,整张图就变成了有向图,计算每个节点的入度与出度 4.如 ...

  5. html5--画布

    简介 canvas是HTML5中的新元素,你可以使用javascript用它来绘制图形.图标.以及其它任何视觉性图像.它也可用于创建图片特效和动画.canvas 元素本身是没有绘图能力的.所有的绘制工 ...

  6. 《JS权威指南学习总结--6.8对象的三个属性》

    内容要点: 每一个对象都有与之相关的原型(prototype).类(class)和可扩展性 一.原型属性 1.对象的原型属性是用来继承属性的,这个属性是如此重要,以至于我们经常把 "0的原型 ...

  7. Node.js:包

    概要:本篇博客主要介绍了node.js中的包 包是在模块基础上更深一步的抽象,Node.js的包类似于C/C++的库函数或者Java/.Net的类库.它将某个独立的功能封装起来,用于发布.更新.依赖管 ...

  8. apache动态添加模块

    Apache已经安装完毕并投入运行,但是后来却发现部分模块没有加载,当然有两个方法: 1. 一是完全重新编译Apache, 再安装 2. 编译模块为SO文件,使用LoadModule指令加载扩展模块. ...

  9. infix to postfix 完整版

    #include<iostream> #include<stack> #include<string> #include<deque> using na ...

  10. 文件传送,如此简单--ESFramework 4.0 快速上手(13)

    在所有的通信系统中,文件传送是最常见也是最重要的功能之一,ESFramework对文件传送的强大支持也是其亮点之一,使用ESFramework可以非常轻松地实现与文件传送相关的所有需求.ESPlus. ...