接口测试是测试系统组件间接口的一种测试。接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。
一、API种类
- 面向对象语言的API
- 库与框架的API
- API与协议
- API与设备接口
- Web API(HTTP API)
二、HTTP API
- GET:向特定的资源发出请求。
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。
- PUT:从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE:请求服务器删除Request-URI所标识的资源。
- OPTIONS:返回服务器针对特定资源所支持的HTTP请求方法。
- HEAD:向服务器索要与GET请求相一致的响应,只不过响应体将不会被返回,用于获取报头。
- TRACE:回显服务器收到的请求,主要用于测试或诊断。
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
三、接口测试必要性
- 可以发现很多在前端测试发现不了的bug。
- 检查系统的稳定性。
- 检查系统的异常处理能力。
- 检查系统的安全性。
- 前端经常变,接口测好了后端不用变。
四、接口测试流程
(1)需求讨论
(2)需求评审
(3)场景设计
(4)用例设计
(5)数据准备
(6)执行
五、接口文档内容
- 接口说明
- 调用url
- 请求方法(get/post)
- 请求参数、参数类型、请求参数说明
- 返回参数说明
ps:部分接口文档有请求头header,服务器会先接收header信息来判断该请求是否有权限请求。
六、接口用例设计
1、功能测试
(1)功能是否正常
(2)是否按照接口文档实现
(3)正常场景
(4)异常场景
2、业务测试
(1)业务规则
- 例如,bbs的需求是这样的:
- 登录失败5次,就需要等待15分钟之后再登录
- 新注册的用户需要过了实习期才能发帖
- 删除帖子扣除积分
(2)业务流程
(3)业务依赖
- 依赖第三方接口超时
3、参数测试
(1)参数组合
- 组合可选参数
- 参数的顺序
(2)默认值
(3)参数范围
- 数值大小
- 数值范围
- 字串长短
(4)必传非必传
- 覆盖所有必选参数
(5)参数类型
- 正确的参数类型
- 错误的参数类型
(6)非空校验
- 参数有
- 参数空
- 参数null
(7)参数个数
- 多参数
- 少参数
(8)特殊字符
4、兼容测试
(1)兼容老版本
5、异常场景
(1)重复提交
(2)并发测试
(3)事务测试
(4)分布式测试
(5)环境异常
(6)大数量测试
- 同时处理大批量数据的测试
- DB数据量很大时,测试DB操作
6、安全测试
(1)参数是否加密
- 前后端数据传输是否加密
- 日志信息是否加密
(2)绕过验证
- 例如:购买一个商品,价格100元,但是在提交订单时候,把商品的价格改成1元,后端有没有做验证?再把价格改为-1元,余额会不会反向增加?
(3)绕过身份授权
- 例如:修改商品信息接口,只有卖家才能修改,那么传一个普通用户,能不能修改?再传一个其他的卖家,能不能修改?
(4)密码安全规则
- 密码的复杂程度校验
(5)权限验证
(6)header
(7)cookie
(8)唯一识别码
(9)sql注入
7、性能测试
(1)响应时间
(2)吞吐量
(3)并发数
(4)服务器资源使用率
- cpu
- 内存
- IO
- network
七、做好接口测试的前提
1、系统化的接口文档
(1)传统的接口文档,一般采用word或wiki等系统来记录,从单次使用上似乎比较简单,因为大家会更习惯这样的操作,但这种形式存在比较大的问题:
- 接口文档非标准化,无法直接与接口测试工具接口使用。
- 接口维护困难,接口有变化时比较难标识清楚,沟通成本很高。
(2)系统化接口文档,例如rap,具备接口维护标准化、版本化管理、MOCK测试等功能;对标准化的接口内容做二次开发,可以直接导出Soapui等工具使用的格式,直接导入工具中使用,有以下好处:
- 接口测试时不再需要手工输入相关字段,节省时间成本。
- 版本化管理,能够清晰的知道哪些接口有变化。
2、标准化的接口规范
(1)按接口提供方为单位进行首次划分,按接口使用方进行二次划分,再按业务模块进行细分。分类原则根据内容多少进行优化,不需要固定,如本身接口较少就没有必要分得过细,较多时就需要多划分模块。
例如:系统A,提供有 1、2、3、4、5、6、7、8、9 这9个接口,接口分别给B系统、C系统使用,其中1、2为公用接口,3、4、5为B专用,6、7、8、9为C系统专用,划分如下:
- 项目A
- 公共接口
- 接口1
- 接口2
- 供B接口
- 接口3
- 接口4
- 接口5
- 供C接口
- 接口6
- 接口7
- 接口8
- 接口9
- 公共接口
(2)按接口链接URL做为唯一,不同的接口参数做为接口变量,接口有参数变更时在原来接口上进行维护,而不是新增加接口。
(3)为接口增加版本号,方便清楚哪些接口本次有变更,易于维护用例。
持续更新…
最后更新: 2018年05月11日 14:37