python做接口测试时常用的函数,python接口性能测试
本文主要介绍用python进行接口测试的细节。文章详细介绍了基于python的接口测试,有一定的参考价值,有需要的朋友可以参考一下。
00-1010前言接口测试Pit接口类型快速动手接口测试接口文档分析编写接口用例执行接口测试
目录
其实我觉得界面测试很简单,比一般的功能测试简单(我先说这个,以后可能会删O(_)O。哈!),现在很多找工作的公司都要求有界面测试的经验,也有很多人问我(就两三个人)什么是界面测试。抱着不懂就装懂的态度,我就说:所谓接口测试,就是通过测试不同情况下对应的输入输出信息,来判断接口是否符合或满足对应的功能和安全需求。
为什么我说界面测试比功能测试简单?因为功能测试从页面输入值,然后通过点击按钮或者链接发送到后端,而且功能测试还测试UI、前端交互等功能。但是接口测试没有页面,它通过接口规范文档中的调用地址和请求参数拼接消息,然后发送请求,检查返回的结果。所以只需要测量输入输出参数,比较简单。
最近刚好在做接口测试。在此之前,公司的计划是使用postman进行接口测试。但是因为长城的原因,我们只能用离线版的邮差。然后一长串接口,一个接一个。哦,我的上帝。于是,就产生了一个想法。用python写了一个windows sockets测试脚本,设置了接口列表,然后逐个访问日志。
前言
第一个坑:
而POST-GET - GET一般用于获取/查询资源信息,POST一般用于更新资源信息Get是向服务器请求数据,POST是向服务器提交数据的请求。
做过接口测试或者前端测试的人都知道,接口的访问方法是不一致的,所以用postman进行接口测试,因为它可以设置post和get方法。用python来模拟这两种访问方式才是最重要的。先说GET方法。获取的方式比较简单。将接口放入浏览器的地址栏,点击Enter完成GET。所以需要使用python访问URL来模拟GET测试。
导入urllib2
url_save=http://www.baidu.com/
尝试:
s _ save=URL lib 2 . urlopen(URL _ save)。阅读()
打印并保存
除了urllib2。HTTPError,e:
打印e代码
除了urllib2。URLError,e:
打印字符串(e)
如上所示,完成一个GET请求,调用urllib2库,然后将一个字符串形式的URL传递给urllib2.urlopen函数。最后,read()方法用于存储从GET返回的数据。
然后说说POST。实际上,在python的urllib2库中,我们刚刚使用的urlopen函数有几个其他可选参数,因为这些入参给定了初始化的值:.
def urlopen(url,data=None,timeout=socket。_GLOBAL_DEFAULT_TIMEOUT
cafile=None,capath=None,cadefault=False,context=None):
如上,urllib库有一个非常智能的问题。如果数据没有给出值,访问方法是GET如果数据给了一个值,方法就会变成POST;索以模拟POST 方式的代码如下:
导入urllib
导入urllib2
url=http://www.example.com
# values: name:value的形式
values={** : *** ,
** : ***,
** : *** }
#使用urllib.urlencode函数处理值字典,最终形式为:* *=* * *=* * *
data=urllib.urlencode(值)
#如果对数据顺序有要求,建议自己拼接数据。
req=urllib2。请求(url,数据)
response=urllib2.urlopen(req)
_page=response.read()
正如
上代码,把POST方式所需要的数据写到data参数中去,POST方式就模拟成功了。
第二个坑:cookie的使用
用python获取cookie所需要的库叫做cookielib。获取cookie的例子:
# 这里有四种CookieJar,CookieJar是最原始的cookie_use = cookielib.CookieJar()
handler = urllib2.HTTPCookieProcessor(cookie_use)
# 使用绑定好CookieJar的handler创建一个opener
opener = urllib2.build_opener(handler)
# 将opener安装到urllib2中
urllib2.install_opener(opener)
# 使用安装好的urllib2访问某一网站获取cookie
urllib2.urlopen(https://....../login)
#这个时候cookie已经被CookieJar获取到了
print cookie_use
在下一步,将获取到的cookie绑定到opener头中:
将获取到的cookie绑定到opener,上一步获取的cookie并不满足如下格式,
需要自己进行字符串的切片和拼接
opener.addheaders.append((Cookie, name=***&888=888))
现在的opener就可以用来访问任意需要登录的网站了!
功能:功能实现,实现与设计一致, 接口通过性测试
- 健壮性: 边界值,容错性
- 性能: 并发及压测
- 稳定性: 长期运行的稳定性
- 安全性: SQL注入, session依赖, 数字签名, http接口的安全性
接口类型
常见接口种类:
- Http/Https接口: 通过http/https协议传送接口数据(通常按字符串/二进制传输), 如常见的网页表单, https安全性更好
- RESTful Api: REST表述性状态传递. 一种设计风格,基于http/https协议, 把一切接口视为资源, 接口要分版本,在统一的域名下管理, 不同的方法(get/post..)做不同的事,通常请求及响应使用json格式
- Web Service: SOAP简单面向对象协议, 基于http实现的一种RPC方案.接口返回一些对象,可以直接通过操作对象,实现我们需要的业务处理.使用xml格式传输数据
- RPC接口: RPC为远程方法调用, 有不同的实现方案,基于TCP/Http协议的都有. RPC可以想我们本地导入和调用对象一样使用. Dubbo接口也是一种RPC接口.
常见接口数据类型:
- 请求数据类型(Content-Type):application/x-www-form-urlencoded: 常规只有文本的网页表单application/json: RESTful Api常用格式, 结构清晰, 含有多层嵌套multipart/form-data: 既有文本,又有上传文件或富文本框的混合数据表单text/xml: xml格式, RPC接口常用格式
- 响应数据类型string/html: 返回字符串或网页源码json: RESTful Api常用响应格式, 结构清晰xml: RPC接口常用格式
常见接口安全验证方式:
- Auth_1.0/Auth_2.0: 通用接口授权方式
- Session依赖: 需要登录之后才能进行接口操作
- Token验证: 先要使用自己的appid/appsecret通过获取token接口验证身份获取一个token(令牌,有一定有效期), 然后带着token访问接口
- 数字签名: 将原本的参数按一定规则进行组合,配合时间戳或appsecret, 通过加密算法生成一个签名sign, 携带签名进行接口请求
常见接口请求方法:
- GET: 获取资源
- POST: 修改资源
- PUT: 上传资源
- DELETE: 删除资源
- HEAD: 只请求页面首部
- PATCH: 补丁
- OPTIONS: 运行客户端查看服务器性能
- ......
常见状态码(RESTful规范):
- 200系: 成功200 OK - [GET]:获取资源成功201 CREATED - [POST/PUT/PATCH]:创建/修改成功202 Accepted - [*]:任务接受204 NO CONTENT - [DELETE]:删除成功
- 300系: 重定向301 Moved Permanently: 永久重定向302 Found: 临时重定向
- 400: 资源错误400 INVALID REQUEST - [POST/PUT/PATCH]:用户请求错误401 Unauthorized - [*]:没有权限(鉴权失败, 接口层)403 Forbidden - [*] 资源禁止访问(服务器层,没有访问权限)404 NOT FOUND - [*]:资源不存在405 Method Not Allowd: 访问的方法不允许, 如用POST访问只支持GET请求的接口406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)410 Gone -[GET]:资源被永久删除422 Unprocesable entity - [POST/PUT/PATCH] 当创建对象时,发生验证错误
- 500系: 服务器内部错误(接口崩溃或有Bug)500 INTERNAL SERVER ERROR - [*]:服务器发生错误
接口业务类型:
- 返回数据型接口: 只从数据库读取数据
- 业务操作型接口: 需要写数据库(接口测试需要要涉及参数化或环境清理)
快速上手接口测试
获取接口文档:
- Wiki
- Word文档
- Postman导出
- 抽象接口定义
- 接口管理平台
接口文档分析
- 功能分析: 是否能满足业务(是否缺少某个前端需要的参数), 是否能满足所有业务场景(是否有漏开发接口, 比如只开发了单品接口,没开发套餐接口)
- 设计分析: 是否有不规范字段(如,nickname, passwd);不规范格式(如sex,用男,女而不是1,2);是否有易混淆字段(如amount和total);是否有单词拼错;是否有和数据库字段对应但名称不一样的(易错)
- 接口分析: 协议类型(http要考虑安全);请求方法(是否规范);请求编码格式(表单/Json/xml, 很多接口文档不声明,导致测试调试不通);接口授权方式;接口业务类型(关系到是否需要做参数化或环境清理); 返回值类型及结构(关系到怎么断言)
- 接口依赖: 需要什么环境准备和业务场景, 依赖那些接口, 有那些动态数据, 预备环境怎么保障
- 参数分析: 各个参数的参数类型,组成规则,是否允许不传,是否可以为空, 是否允许多传参
- 业务分析: 如price字段必须和数据库中的商品的price字段一致,才能校验通过
- 非功能性: 接口的技术实现方案是否合理, 能否满足高并发的性能要求, 边界值/极限值的处理是否合适, 是否前后端都有数据格式校验等(如精确度为秒级的订单号生成器,在高并发下会导致生成同一订单号的问题)
- 其他: 如反爬,对headers的一些限制和校验, ip等限制
编写接口用例
Excel/TestLink/禅道
- 单接口用例: 正常数据/边界数据/异常数据(健壮性)/并发(一致性)/性能/安全性(抓包截取伪造/SQL注入/跨域请求)
- 场景用例: 列出常见的用户场景, 用接口进行覆盖, 业务场景压测(寻找某个环节的性能瓶颈)
执行接口测试
- Postman: 功能调试
- Jmeter: 性能
到此这篇关于利用python进行接口测试详情的文章就介绍到这了,更多相关python接口测试内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。