本文的目的,是记录如何在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. A标签-一个按钮样式

    该文件引用jquery-1.11.3.js库 <!doctype html> <html> <head> <meta charset="UTF-8& ...

  2. H264的coded_block_pattern编码块模式

    1 词汇约定 CodedBlockPatternLuma:一个宏块的亮度分量的coded_block_pattern CodedBlockPatternChroma:一个宏块的色度分量的coded_b ...

  3. nginx trouble shooting

    除去配置语法失误.逻辑失误 nginx中的大部分问题都是前端到后端联通性 curl 域名没反应 cyr@test:/etc/nginx/sites-enabled$ curl test.hehe.ex ...

  4. Gradle学习草稿

    参考博客:http://www.cnblogs.com/davenkin/p/gradle-learning-1.html Android Plugin DSL Reference http://go ...

  5. 第二次讨论——响应式设计、布局技巧、css性能优化、css预处理

    第二次讨论 [响应式设计] 集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境(系统平台.屏幕尺寸.屏幕定向等)进行相对应的布局. 响应式布局: meta标签的实用:设置布局宽度等于 ...

  6. util:properties与context:property-placeholder

    spring 使用注解装配的Bean如何使用property-placeholder属性配置中的值 这个问题不大不小,以前偷懒凡是碰到需要引用属性文件中的类时就改用xml来配置. 今天看了下sprin ...

  7. php MYSQL 一条语句中COUNT出不同的条件

    SELECT DISTINCT c.uid, count( 1 ) AS zongji, count( if( task_type = 'mobile', true, NULL ) ) AS mobi ...

  8. Application.DoEvents()的作用

    记得第一次使用Application.DoEvents()是为了在加载大量数据时能够有一个数据加载的提示,不至于系统出现假死的现象,当时也没有深入的去研究他的原理是怎样的,结果在很多地方都用上了App ...

  9. CSU 1333 Funny Car Racing

    最短路问题稍微复杂了一点,松弛的时候多判断一些条件就可以了.第一次用SPFA写最短路. #include<cstdio> #include<cmath> #include< ...

  10. 关于js优化和css优化

    css优化: 1.css代码的压缩. 2.css文件的合并. 3.不滥用float,因为float在渲染时计算量比较大,所以尽量减少使用float. 4.避免在html标签中写style属性. js优 ...