robotframework接口自动化
robot framework框架在测试接口上比soapUI好用的多,在此介绍下get方法的HTTP接口,其实这个接口也是把POST数据作为参数进行get请求,使用post 方法也是一样,一共6步就可完成接口用例自动化
使用Requests 和 RequestLibrary库
Python的requests库提供了非常方便且人性化的接口调用方法,上手快,功能强大且完美,甩同类库urllib2(python3中为urllib), httplib(python3中为http.client)好几条街。缺点是封装了太多层,不利于http底层原理的理解。
RequestsLibrary是基于requests模块做的RF库,其根基本身就强大,再加上git上有一些大神一直在对其进行持续地更新及维护,提供了很不错的官方Demo,从使用人数来说,也是完爆那些HTTPLibrary之流,意味着遇到问题得到解答的机会更大
Python3 中的 http 包中含有几个用来开发 HTTP 协议的模块。
http.client 是一个底层的 HTTP 协议客户端,被更高层的 urllib.request 模块所使用。
http.server 包含基于 socketserver 的基本 HTTP 服务器的类。
http.cookies 实现 cookie 状态管理
http.cookiejar 与 cookie 相关
1、requestlibrary库介绍
Keyword |
Arguments |
Documentation |
Create Ntlm Session |
alias, url, auth, headers={}, cookies=None, timeout=None, proxies=None, verify=False |
创建一个HTTP会话: url:即服务器的url alias:使用Robot Framework的别名表示当前会话。 header:使用默认的headers字段 auth:NTLM鉴权需用[‘domain’,’username’,’password’]格式 timeout:会话超时时长 proxies:代理服务器的url verify:如果需要证书请求则置为true |
Create Session |
alias, url, headers={}, cookies=None, auth=None, timeout=None, proxies=None, verify=False |
创建一个HTTP会话: url:即服务器的url alias:使用Robot Framework的别名表示当前会话。 header:使用默认的headers字段 auth:NTLM鉴权需用username&password格式 timeout:会话超时时长 proxies:代理服务器的url verify:如果需要证书请求则置为true |
Delete |
alias, uri, data=(), headers=None, allow_redirects=None |
弃用,查看delete request |
Delete All Sessions |
删除全部的会话 |
|
Delete Request |
alias, uri, data=(), headers=None, allow_redirects=None |
使用别名删除会话 Alias:需要删除的会话的别名 |
Get |
alias, uri, headers=None, params={}, allow_redirects=None |
弃用:使用Get Request |
Get Request |
alias, uri, headers=None, params={}, allow_redirects=None |
根据提供的别名查找会话并在会话中发送GET请求 |
Head |
alias, uri, headers=None, allow_redirects=None |
弃用:使用Head Request |
Head Request |
alias, uri, headers=None, allow_redirects=None |
根据提供的别名查找会话并在会话中发送HEAD请求 |
Options |
alias, uri, headers=None, allow_redirects=None |
弃用:使用Options Request |
Options Request |
alias, uri, headers=None, allow_redirects=None |
根据提供的别名查找会话并在会话中发送Options请求 |
Post |
alias, uri, data={}, headers=None, files={}, allow_redirects=None |
弃用:使用Post Request |
Post Request |
alias, uri, data={}, headers=None, files={}, allow_redirects=None |
根据提供的别名查找会话并在会话中发送POST请求 |
To Json |
content, pretty_print=False |
将返回的数据转换为JSON格式 |
使用pip命令执行库安装
pip install -U robotframework-requests
安装成功后即可打开RIDE添加测试用例。
测试案例
这里的demo我们是用到了flask的网站,做了几种例子,大家了解一下,如果需要更完整的了解,建议看一下RequestsLibrary在github上的测试案例。
3.4.0 使用demo前的准备
我用了flask来实现了一个demo网站,它可以快速建立起一个网站,只用一些简单的语句。
如果使用pip安装会比较方便,特别是在mac电脑上,为了保证例子能正常运行,大家需要安装四个东东,flask、flask-httpauth、flask_restful、python-simplexml。
只需要运行如下命令:
pip install flask
pip install flask-httpauth
pip install flask_restful
pip install python-simplexml
安装完成之后就可以运行我们的demo-website了
demo的地址是:https://github.com/qitaos/rf-demos
demo-website的地址是:https://github.com/qitaos/rf-demos/tree/master/demo-website
下载整个工程之后,进入demo-website目录,
运行命令
python flaskdemo.py
运行成功后会有提示信息
python flaskdemo.py
- Running onhttp://127.0.0.1:8000/ (Press CTRL+C to quit)
- Restarting with stat
这里提示我们服务器已经启动,访问http://127.0.0.1:8000/ 或者 http://localhost:8000/ 就可以打开页面了。
如果有任何出错信息,有可能是前面的测试库没有安装完整。
1、get request json
访问http://localhost:8000/users/1 的时候,它会返回一个json:
{“1”: “john”}
如果把1换成5,它会返回一个404的json:
{
“message”: “NotFound: http://localhost:8000/users/5“,
“status”: 404
}
所以这里第一个案例就是来测试这2个接口请求。
首先要先Create Session创建一个连接到服务器的host,然后通过Get Request发起请求,请求的返回是个Request对象${addr},所以在这里的变量是个对象,而对象的属性值的有${addr.status_code}和${addr.content},使用了To Json后,就把返回的content格式化成Json串,然后就可以用Dictionary的方法获取其中的值了。脚本见表格
2、getrequest xml
前面一个例子是接口返回json进行处理的,这个例子是接口返回xml格式内容。访问http://localhost:8000/hello/qitao,会返回一个xml格式的内容:
qitao
案例比较长,分两个部分说,第一个部分其实还是用json来处理,虽然返回的是xml,但是requestslibrary自动把它处理成json了。所以它的这部分处理其实和前面的案例一样。脚本见表格
那么想要返回xml怎么处理呢?这里就要在Request的essay-header里加上一个accept=application/xml,此时返回的就是一个xml格式的内容qitao
所以这里用到了XML库的关键字Get Element Text来获取xml节点的文本,使用Get Element获取到一个Element对象${hello},既然是对象,那么它也有属性值${hello.text}。再后面的几行就是用XML库的关键字新增Element,然后取值,这也算是提前准备好来XML的demo了。
这里为什么要做xml的例子呢,其实是因为有一种接口测试就是测试Web Service的,通常Web Service都是返回一个xml格式的内容。这里demo网站没有做Web Service的例子,所以就用这个xml的例子来代替Web Service了。脚本见表格
运行案例结果如图:
3、增加登录态
有些接口是需要用户密码登录后才能访问的,如果直接访问http://localhost:8000/401
会提示要输入用户名密码
输入正确的用户名密码ok/python,会得到一个返回的信息
{
“pass”:”Authorized access”
}
但是我们做自动化脚本的时候不能去手动输入的,所以我们可以在Create Session的时候加上用户名密码,就可以直接访问了。
用户名ok,密码python,我们用${auth}创建个List存起来,然后在Create Session时加上${auth}参数,后面的过程就是前面一样了,不需要自己再手动输入用户密码了。脚本见表格
运行结果如图
4、postrequest
前面几个都是get方式的,这个例子是post方式的。
这里主要是在essay-header加了一项Content-Type=application/x-www-form-urlencoded,这是最常见的post提交数据的方式,另外还有几种我不太常用的,大家可以根据自己的实际情况来使用。
然后我们向 http://localhost:8000/post, 发起请求,并将${data}作为post的data传过去。demo网站对post请求做了个处理,将username的值获取到然后以json格式返回。脚本见表格
robotframework接口自动化的更多相关文章
- RIDE 接口自动化请求体参数中文时报错:“UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 in position 9......”
在进行robotframework 接口自动化,在请求体参数中输入中文会报以下错误: UnicodeDecodeError: 'ascii' codec can't decode byte 0xd7 ...
- RobotFrameWork环境搭建(基于HTTP协议的接口自动化)
1. 前言 接着上一篇<RobotFramework框架系统课程介绍>,本篇主要介绍一下在基于RobotFramework框架开展接口自动化前,前期的环境如何搭建,正所谓”工欲善其事,必先 ...
- robotframework - 框架做接口自动化post请求
1.做get请求之前先安装 Request库,参考github上链接 :https://github.com/bulkan/robotframework-requests/#readme 2.请求&a ...
- 1、大型项目的接口自动化实践记录--robotframework环境搭建
因为人力.团队技术问题,选用robotframework来做自动化,首先说下环境搭建 齐涛道长的入门教程非常棒:http://blog.csdn.net/tulituqi/article/detail ...
- RobotFrameWork接口项目分层及通用控制方式
1. 前言 上一篇文章介绍了在设计接口用例之前应遵守的设计规范,详见<RobotFramework接口设计规范>,当然读者公司的内部规范也不一定非得完全遵循笔者所提到的,适合自己公司内部的 ...
- RobotFrameWork接口设计规范
1. 前言 继前面一章<RobotFramework环境搭建>介绍了在本地如何将接口自动化实施过程所需要的基础环境搭建好,在这里假设大家都已经知道环境如何搭建了,如果不清楚的可直接查看上一 ...
- 3、大型项目的接口自动化实践记录----开放API练习
开始做实际项目前,先拿个网上的简单API练下手 一.API说明: 接口信息 接口名:京东获取单个商品价格 地址:http://p.3.cn/prices/mgets 入参:skuids=J_商品ID& ...
- 2、大型项目的接口自动化实践记录--接口测试简介及RequestsLibrary关键字简介
1.接口测试简介 1)先简单介绍下接口测试,那么什么是接口测试呢? 百科的回答:接口测试是测试系统组件间接口的一种测试.接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点. 看起来有 ...
- 接口自动化平台搭建(二),搭建django项目与接口自动化平台的由来与功能特征
1.创建django项目 a.使用命令创建,安装完django之后就有django-admin命令了,执行命令创建即可,命令如下: django-admin startproject my_djang ...
随机推荐
- python 一些函数和类用法记录
这一篇主要用来记录在学习过程中遇到的一些觉得有意思的函数或者类的用法,有一些用法感觉很炫酷. 1.collections.defaultdict from collections import def ...
- windows10下Anaconda的安装与tensorflow、opencv的安装与环境配置
刚开始学习tensorflow和opencv这一块的知识,所以用博客这个平台来把自己这段学习的经历与感想写下来. tensorflow和opencv则用Anaconda来下载和配置环境. 下载Anac ...
- 第二章:C++简单程序设计
主要内容: 1.C++语言概述 2.基本数据类型和表达式 3.数据的输入与输出 4.算法的基本控制结构 5.自定义数据类型 1.数据类型default is double 2.自定义数据类型就是bui ...
- Django框架基础知识12-中间件及上下文处理器
Django中间件(Middleware) 是一个轻量级.底层的“插件”系统,可以介入Django的请求和响应处理过程,修改Django的输入或输出. django 中的中间件(middleware) ...
- python-----定制群发微信消息
如何使用表格中的信息群发微信消息? 如何读取csv? → 使用内置模块csv 如何按对应信息发送到微信?→ 使用第三方库wxpy 以下代码素材自取:链接:https://pan.baidu.co ...
- 「LibreOJ β Round #3」绯色 IOI(抵达)
[题解] 我们可以发现叶子节点的关联点一定是它的父亲节点,那么我们dfs一遍就可以求出所有节点的关联点,或者判断出无解. 对于每个点i,它的关联点u的危险度肯定比它连接的其他点vi的危险度小,我们从u ...
- 南宁2017ICPC总结
南宁2017ICPC总结 第二次到南宁,高铁三个半小时好像没什么感觉了,广西的天气真的是又湿又冷,而且交通也及其不方面,所以对广西的印象也不是很好.这次承 ...
- metadata的使用以及简单的orm模式
使用sqllite3和metadata简单的封装了个简单的orm #!/usr/bim/python #-*-coding: utf-8 -*- import threading import sql ...
- selenium 3+python3.6+firefox的windows详细环境搭建以及小demo
最近也是学习了下selenium和python,就记录了下在自己工作机上环境的搭建过程以及小demo 1,安装python3.6.1 我是去官网直接下载当前最新版的python3.6.1 官网网址为h ...
- POJ 1276 Cash Machine 【DP】
多重背包的模型,但一开始直接将N个物品一个一个拆,拆成01背包竟然T了!!好吧OI过后多久没看过背包问题了,翻出背包九讲看下才发现还有二进制优化一说........就是将n个物品拆成系数:1,2,4, ...