在介绍这个之前,可以先看下python的目录Python\Lib\site-packages下面的文件夹,你会发现这个目录下面有DatabaseLibrary、RequestsLibrary、Selenium2Library等等这些我们熟悉的名称,没错,就是在RIDE编辑框里面import的包名,所以有时候为什么会import失败(导入后显示红色),就是因为这个目录没有你要导入的包。因此,我们如果要开发自定义关键字库,就可以在这个目录新建一个类似的文件夹即可,具体结构是怎么样的,可以先看看RequestsLibrary是怎么写的,依葫芦画瓢即可。

  点开RequestsLibrary目录之后,我们发现有这么几个py文件

首先看__init__.py,学了python的同学都知道这个很眼熟,类的初始化时经常用到,这里的作用基本类似,打开看下

from .RequestsKeywords import RequestsKeywords
from .version import VERSION _version_ = VERSION class RequestsLibrary(RequestsKeywords):
""" RequestsLibrary is a HTTP client keyword library that uses
the requests module from Kenneth Reitz
https://github.com/kennethreitz/requests Examples:
| Create Session | google | http://www.google.com |
| Create Session | github | http://github.com/api/v2/json |
| ${resp} | Get google | / |
| Should Be Equal As Strings | ${resp.status_code} | 200 |
| ${resp} | Get github | /user/search/bulkan |
| Should Be Equal As Strings | ${resp.status_code} | 200 |
| ${jsondata} | To Json | ${resp.content} |
| Dictionary Should Contain Value | ${jsondata['users'][0]} | Bulkan Savun Evcimen | """
ROBOT_LIBRARY_SCOPE = 'GLOBAL'

这里就知道另外一个文件version.py是干啥用的了,这个笔者认为可有可无,只是一个版本号,直接在__init__.py定义也一样。类名RequestsLibrary就是我们在RIDE导入的名称,继承的这个RequestsKeywords,就是文件RequestsKeywords.py里面的一个关键字实现类,最后一行ROBOT_LIBRARY_SCOPE = 'GLOBAL',必须要加,自定义时照着写即可,RF框架会自动识别;最后一个文件compat.py点开阅读源码后发现,其实是在判断是否为python3,主要为了兼容python2和python3而import依赖包,也不是必要文件。因此我们可以知道,实际生效有作用的文件主要就是__init__.py和RequestsKeywords.py了。

接下来笔者不详细举案例了,简单分析一下RequestsKeywords.py里面的一个关键字实现

  def create_session(self, alias, url, headers={}, cookies=None,
auth=None, timeout=None, proxies=None,
verify=False, debug=0, max_retries=3, backoff_factor=0.10, disable_warnings=0):
""" Create Session: create a HTTP session to a server ``url`` Base url of the server ``alias`` Robot Framework alias to identify the session ``headers`` Dictionary of default headers ``auth`` List of username & password for HTTP Basic Auth ``timeout`` Connection timeout ``proxies`` Dictionary that contains proxy urls for HTTP and HTTPS communication ``verify`` Whether the SSL cert will be verified. A CA_BUNDLE path can also be provided.
Defaults to False. ``debug`` Enable http verbosity option more information
https://docs.python.org/2/library/httplib.html#httplib.HTTPConnection.set_debuglevel ``max_retries`` The maximum number of retries each connection should attempt. ``backoff_factor`` The pause between for each retry ``disable_warnings`` Disable requests warning useful when you have large number of testcases
"""
auth = requests.auth.HTTPBasicAuth(*auth) if auth else None logger.info('Creating Session using : alias=%s, url=%s, headers=%s, \
cookies=%s, auth=%s, timeout=%s, proxies=%s, verify=%s, \
debug=%s ' % (alias, url, headers, cookies, auth, timeout,
proxies, verify, debug)) return self._create_session(
alias,
url,
headers,
cookies,
auth,
timeout,
max_retries,
backoff_factor,
proxies,
verify,
debug,
disable_warnings)

create_session这个关键字是不是很熟悉,在RF中使用的时候,直接输入Create Session即可使用,按F5查看帮助信息,跟上面源码注释部分一样。

好了,弄明白这个原理,接下来就可以依葫芦画瓢愉快的手撕python代码实现自己想要的关键字了,哈哈~~

扩展:如果按照上述的方法,确实可以完成用户自定义库的开发,但是有时候这样会给项目维护带来一定的困难,因为你写的关键字不是跟项目的测试用例放在一起维护的,还需要单独去维护用户自定义库的工程。所以推荐另外一种方式完成自定义关键字库的开发和维护,这里举一个例子,在关键字的文件夹下面直接创建一个py文件,采用函数式编程的方式,使用的关键字之前,直接导入Library,选择你写好的py文件。注意:路径不对或者py文件语法写的有问题导入都会报错,显示红色。

示例代码,mykey.py:

import json
import types
import sys from robot.api import logger
from robot.libraries.BuiltIn import BuiltIn builtin = BuiltIn()
PY3 = sys.version_info > (3,) def mykey_to_json(content, pretty_print=False):
""" Convert a string to a JSON object ``content`` String content to convert into JSON ``pretty_print`` If defined, will output JSON is pretty print format
"""
if PY3:
if isinstance(content, bytes):
content = content.decode(encoding='utf-8')
if pretty_print:
json_ = _json_pretty_print(content)
else:
json_ = json.loads(content)
logger.info('To JSON using : content=%s ' % (content))
logger.info('To JSON using : pretty_print=%s ' % (pretty_print)) return json_ def _json_pretty_print(content):
"""
Pretty print a JSON object ``content`` JSON object to pretty print
"""
temp = json.loads(content)
return json.dumps(temp, sort_keys=True, indent=4, separators=(',', ': '))

Python3+RobotFramewok 用户自定义库的开发(四)的更多相关文章

  1. STC8H开发(四): FwLib_STC8 封装库的介绍和注意事项

    目录 STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解) STC8H开发(二): 在Linux VSCode中配置和使用FwLib_STC8封装库(图文详解) ST ...

  2. C#的百度地图开发(四)前端显示与定位

    原文:C#的百度地图开发(四)前端显示与定位 有了这些定位信息,那要如何在前端的页面上显示出来呢?这需要用到百度地图的JavaScript的API.下面是示例代码. 前端代码 <%@ Page  ...

  3. Python3 urllib.request库的基本使用

    Python3 urllib.request库的基本使用 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地. 在Python中有很多库可以用来抓取网页,我们先学习urlli ...

  4. 程序员之路:python3+PyQt5+pycharm桌面GUI开发(转)

    程序员之路:python3+PyQt5+pycharm桌面GUI开发 http://blog.sina.com.cn/s/blog_989218ad0102wz1k.html 先看效果: 图 1 没错 ...

  5. Python3+PyQt5+PyCharm 桌面GUI开发环境搭建

    Python3+PyQt5+PyCharm 桌面GUI开发环境搭建 一.安装python PyQt5所支持的python版本是不低于3.5版本 python3.5以上的版本安装:https://www ...

  6. Python3 常用爬虫库的安装

    Python3 常用爬虫库的安装 1 简介 Windows下安装Python3常用的爬虫库:requests.selenium.beautifulsoup4.pyquery.pymysql.pymon ...

  7. 在OpenFOAM中做用户自定义库——编译library【转载】

    转载自:http://openfoam.blog.sohu.com/22041538.html OpenFOAM自己提供的标准类都是以库的形式提供的,并且利用头文件给出了库的应用接口.这样一来,用户的 ...

  8. JAVA EE企业级开发四步走完全攻略 [转]

    http://bbs.51cto.com/thread-550558-1.html 本文是J2EE企业级开发四步走完全攻略索引,因内容比较广泛,涉及整个JAVA EE开发相关知识,这是一个长期的计划, ...

  9. 动态共享库(so)开发精悍教程

    动态共享库(so)开发精悍教程 翻译并根据实际情况进行了小小修改,仅关注Linux下动态共享库(Dynamic shared library .so)的开发. 1 简单的so实例 源文件 //test ...

随机推荐

  1. mysql详解常用命令操作,利用SQL语句创建数据表—增删改查

    关系型数据库的核心内容是 关系 即 二维表 MYSQL的启动和连接show variables; [所有的变量] 1服务端启动 查看服务状态 sudo /etc/init.d/mysql status ...

  2. 智能指针原理及实现(2)unique_ptr

    只允许基础指针的一个所有者. 可以移到新所有者(具有移动语义),但不会复制或共享(即我们无法得到指向同一个对象的两个unique_ptr). 替换已弃用的 auto_ptr. 相较于 boost::s ...

  3. linux中公钥和私钥的区别以及关系

    导读 在学习ssh章节时,一定有不少人对公钥和私钥产生过不解.在搜索公钥跟私钥的理解时,发现了这篇有趣的图解小文章,与大家共享. 1. 鲍勃有两把钥匙,一把是公钥,另一把是私钥. 2. 鲍勃把公钥送给 ...

  4. (二十四)Ubuntu16.04配置ADB调试环境

    一.安装adb 1.可以通过 apt-get install android-tools-adb 来安装adb sudo add-apt-repository ppa:nilarimogard/web ...

  5. Ubuntu系统---安装搜狗输入法

    Ubuntu_搜狗输入法 第一步: 1,下载搜狗输入法的安装包. 下载地址为:http://pinyin.sogou.com/linux/ ,如下图,要选择与自己系统位数一致的安装包,我的系统是64位 ...

  6. Python求均值,方差,标准差

    import numpy as nparr = [1,2,3,4,5,6]#求均值arr_mean = np.mean(arr)#求方差arr_var = np.var(arr)#求标准差arr_st ...

  7. Educational Codeforces Round 37-F.SUM and REPLACE (线段树,线性筛,收敛函数)

    F. SUM and REPLACE time limit per test2 seconds memory limit per test256 megabytes inputstandard inp ...

  8. 学习elasticsearch(一)linux环境搭建(1)

    首先安装了Oracle Virtual Box 然后安装了最小版的CentOS.由于vbox自带的操作面板不太好用,于是用了xshell,XShell连接最小版的centOS时遇到的问题记录下. 1. ...

  9. VMware虚拟机CentOS与宿主机共享目录

    正常情况下,在虚拟机CentOS中安装了vmware-tools后,配置完成共享目录,会自动在/mnt/hgfs下面出现共享目录. 如果该目录为空,并且通过命令:vmware-hgfsclient 的 ...

  10. Oracle 11 安装教程(桌面类)

    准备文件: http://download.oracle.com/otn/nt/oracle11g/112010/win64_11gR2_database_1of2.zip http://downlo ...