一、接口测试
1. 含义
- 接口也叫API(Application Programming Interface,应用程序编程接口)
- 一组定义、程序及协议的集合
- 提供访问一组例程的能力,无需访问源码或理解内部工作机制的细节
2. 接口的分类
- 代码内部的接口或称程序接口
- 代码A与代码B在组合的时候,必然需要定义一些名称以及参数、类型
- 需要使用与开发程序接口相同的编程语言,通过对类、方法和函数的调用,验证其返回结果是否正确来进行测试
- 这种测试一般划分在白盒测试中,也算是集成测试阶段,既可以由开发人员自己完成,也可以由有良好编程能力的测试人员来做
- 协议接口
- 系统与系统之间,通过网络数据的传递进行交互,这种类型的接口对底层代码做了封装,系统通过不同的协议提供接口对外提供调用
- 一般不涉及底层程序,看不到代码,属于黑盒层面,可以通过各种手段将网络数据发送到接口从而得到接口的响应信息,达到测试的目标
3. 为什么要做接口测试
- 传统的测试只是在前端做了校验,后端没做校验
- 如果用户名和密码未在后端做校验,而有人又绕过前端校验的话,那用户名和密码就可以随便输。如果是登录可能会通过SQL注入等手段来随意登录,甚至可以获取管理员权限。
- 传统的测试方法测试成本急剧增加,测试效率大幅下降
4. 接口测试的意义
- 更早地发现问题,越早发现bug,修复成本越低
- 功能测试必须要等到系统提供可测试的界面后才能进行
- 缩短产品研发周期
- 接口测试的介入可以更早地发现并解决bug,使得留到功能测试阶段被修复的bug减少,从而缩短整个项目的上线时间
- 发现更底层的问题
- 接口测试可以更简单更全面地覆盖到底层的代码逻辑,从而可以发现一些隐藏的bug
- 只针对UI层的功能进行测试,就很难发现后端系统对一些异常情况的处理能力
- 前端随便变,接口测好了,后端不用变
- 检查系统的安全性、稳定性
二、接口及其文档的阅读和分析
1. 接口文档的内容
- 1 接口说明
- 2 调用url
- 3 请求方法(get/post)
- 4 请求参数、参数类型、请求参数说明
- 5 返回参数说明
2. 公共API接口文档
- V2EX社区API: https://www.v2ex.com/p/7v9TEc53
- 百度翻译通用API: http://api.fanyi.baidu.com/api/trans/product/apidoc
- 支付宝支付API: https://docs.open.alipay.com/api
- 腾讯开放平台: http://wiki.open.qq.com/wiki/API%E5%88%97%E8%A1%A8
- 京东联盟开放平台: https://union.jd.com/openplatform/api
…
三、接口的请求和相应
这里需要知道的知识,见前面的分享:
四、如何做接口测试
1. 接口测试的流程
- 熟悉业务和需求
- 分析接口文档
- 编写接口测试用例
- 提测后开始测试
- 提交测试报告
2. 常用的接口测试工具
- 常用浏览器
- 接口测试、报文捕获及解析
- 如谷歌浏览器、火狐浏览器
- Postman
- 提供API开发完整的工具链
- 全球最常用的REST客户端
- 从底层设计来支持API的开发和测试
- 直观的用户界面发送请求,保存响应,添加测试,并创建工作流
- Jmeter
- 压力和性能测试
- 完全的可移植性和100% 纯java。
- 完全多线程框架允许通过多个线程并发取样和通过单独的线程组对不同的功能同时取样。
- 精心的GUI设计允许快速操作和更精确的计时。
- 缓存和离线分析/回放测试结果
- Fiddler
- Fiddler是一个http协议调试代理工具;
- 它能够记录并检查所有你的电脑和互联网之间的http通讯;
- 设置断点;
- 查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件);
- Fiddler 要比其他的网络调试器要更加简单;
- 还提供了一个用户友好的格式
3. 编写接口文档
3.1 接口说明
网站XXX的用户注册接口
3.2 接口地址
http://www.find-bug.com/wp-content/themes/dux/action/log.php
3.3 请求方式
POST
3.4 接口所需参数(Json)
3.5 返回值(数据以JSON形式展示),同时返回错误码和消息
3.6 一条接口测试的实例
返回结果示例:
传入的参数是:ab,aad@163.com,signup
返回的数据为:
{
“error”: 1,
“msg”: “昵称是以字母数字下划线组合的3-20位字符”
}
4. 通用接口用例设计
- 通过性验证
- 要保证这个接口功能是正确的,按照接口文档上的参数,正常传入,查看是否可以返回正确的结果
- 参数组合
- 如:现有一个操作商品的接口,有个字段type。type传1的时候代表修改商品,商品id、商品名称、价格有一个是必传的,这样就要测参数组合,type传1的时候,只传商品名称能不能修改成功;id、名称、价格都传的时候能不能修改成功
- 接口安全
- 绕过验证
- 如购买了一个商品,价格是300元,提交订单时候,把这个商品的价格改成3元,后端有没有做验证,更狠点,我把钱改成-3,是不是我的余额还要增加?
- 绕过身份授权
- 如修改商品信息接口,必须得是卖家才能修改,那我传一个普通用户,能不能修改成功,传一个其他的卖家能不能修改成功
- 参数是否加密
- 如登陆的接口,用户名和密码是不是加密,如果不加密的话,别人拦截到你的请求,就能获取到你的信息。
- 加密规则是否容易破解
- 密码安全规则
- 对密码的复杂程度校验
- 绕过验证
- 异常验证
- 不按照接口文档上的要求输入参数,来验证接口对异常情况的校验
- 如必填的参数不填,输入整数类型的,传入字符串类型,长度是10的,传11
- 必传非必传、参数类型、入参长度
- 不按照接口文档上的要求输入参数,来验证接口对异常情况的校验