本文的目的,是记录如何在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. 关于reportng生成的测试报告不按测试执行顺序的解决办法

    需要修改TestResultComparator类的源码,源码自己去reportng官网http://reportng.uncommons.org/下载,因为reportng默认是按字母先后顺序进行排 ...

  2. ZZNU 1988: Sn

    题目描述 给你两个数 n, p(0 < n,p <= 10^15); a1 = 1;  a2 = 1+2;  a3 = 1+2+3;  ... an = 1+2+3+...+n    Sn ...

  3. 计算机网络课程优秀备考PPT之第三章数据链路层(三)

    为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 前期博客是, 计算机网络课程优秀备考PPT之第一章概述(一) 计算机网络课程优秀备考PPT之第 ...

  4. 第一百一十四节,JavaScript文档对象,DOM进阶

    JavaScript文档对象,DOM进阶 学习要点: 1.DOM类型 2.DOM扩展 3.DOM操作内容 DOM自身存在很多类型,在DOM基础课程中大部分都有所接触,比如Element类型:表示的是元 ...

  5. 4-jQuery - AJAX post()

    说明 POST 一般用于向后台发送数据,但也可用于从服务器获取数据.不过,POST 方法不会缓存数据,并且常用于连同请求一起发送数据. 格式 $.post(URL,data,callback); // ...

  6. iOS开发tableview二级联动的细节实现中注意的细节总结

    首先说网络慢带来的数据显示问题 可以通过判断请求参数是否一致来刷新tableview. SJBCategaryModel * categaryModel = self.categarys[Catega ...

  7. HDU 2544 最短路(初涉SPFA算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544 Problem Description 在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的t ...

  8. php日期转时间戳,指定日期转换成时间戳

    写过PHP+MySQL的程序员都知道有时间差,UNIX时间戳和格式化日期是我们常打交道的两个时间表示形式,Unix时间戳存储.处理方便,但 是不直观,格式化日期直观,但是处理起来不如Unix时间戳那么 ...

  9. linux mysql-server和mysql-client

    我认为server和client是DBMS的两个面向不同操作对象的工具.server是DBMS面向物理层次,包含存储数据的一系列机制.处理方法的集成:client是DBMS面向用户,提供一系列工具为用 ...

  10. Delphi用ADOquery主从表例子(转)

    http://blog.csdn.net/kandy_zheng/article/details/1639184 在sql server 的northwide 中建立主表 create table s ...