一、接口测试简介
什么是接口测试?
接口测试是测试系统组件间接口的一种测试,主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。
测试的重点:
- 检查数据的交换,传递和控制管理过程;
- 检查系统间的相互逻辑依赖关系等。
为什么做接口测试?
什么是微服务
微服务的特点
复杂度可控
- 服务边界清晰
- 体积小、复杂度低
- 开发、维护简单
容错性更高
- 可以使故障隔离在单个服务中
技术选型更灵活
- 可以结合业务特性自由选择技术栈
可扩展性更强
- 根据每个微服务的性能要求和业务特点来对服务进行灵活扩展
- 独立部署,使得发布更高效
接口测试的目的
- 控制住接口质量,终端问题会少很多
- 提高回归测试效率,保证质量
- 发现更底层的问题
- 更早的发现问题
- 缩短测试周期
- 基于接口层面实现脱离手工的方式高效执行测试
- 接口自动化目的是提升效率
二、HTTP请求与RESTful API
HTTP请求常见请求方法
请求方法 | GET | POST | PUT | DELETE | PATCH |
---|---|---|---|---|---|
CURD | Read | Create/Update | Update/Create | Delete | Update |
意义 | 请求指定的页面信息,并返回实体主体 | 向指定资源提交数据进行处理请求,POST 请求可能会导致新的资源的建立和/或已有资源的修改 | 从客户端向服务器传送的数据取代指定的文档的内容 | 请求服务器删除指定的资源 | 用来更新局部资源 |
HTTP请求—请求报文
一个HTTP请求报文由请求行、请求头、空行和请求体4个部分组成:
请求行 | 由三部分组成:请求方法,请求URL,HTTP协议版本 |
---|---|
请求头 | 用来说明服务器要使用的附加信息 |
空行 | 通知服务器请求头结束 |
请求体 | 可以添加任意的其他数据 |
HTTP响应—响应报文
响应报文由 状态行、响应头、空行和响应体组成
响应行 | 1)响应的协议和版本号(2)响应状态码(3)响应状态描述符 |
---|---|
响应头 | 类似请求头,告知客户端的附加信息,是一系列 key-value 值 |
空行 | 类似请求,用来分隔响应头和数据。 |
响应体 | 响应的数据 |
HTTP响应–常见状态码
状态码 | 说明 |
---|---|
200 | OK:客户端请求已被成功接收,理解,接受。 |
400 | Bad Request:客户端请求有语法错误,不能被服务器所理解。 |
401 | Unauthorized :请求未经授权,这个状态代码必须和WWW-Authenticate 报头域一起使用。 |
403 | Forbidden:服务器收到请求,但是拒绝提供服务。 |
404 | Not Found:请求资源不存在,举个例子:输入了错误的URL。 |
500 | Internal Server Error:服务器发生不可预期的错误。 |
503 | Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
三、接口测试策略
接口功能测试
接口功能测试用例设计的重点,在于功能性的业务逻辑检查和参数检查。
(1) 针对输入,可参考参数类型进行设计;
(2) 针对接口处理,可按照逻辑进行用例设计;
(3) 针对输出,可根据结果进行分析设计;
接口测试用例设计应该满足需求文档,且对异常场景进行友好处理;且测试
这个接口是否按照接口文档进行开发。
接口文档测试
接口文档测试也就是接口文档规范。
通过文档获取接口的说明、请求参数、响应参数以及一些依赖关系。
一般包括接口名、接口描述、接口地址、请求方式、请求参数和格式、响应参数和格式等。
接口异常测试
- 非法参数测试
- 幂等测试
- 并发测试
- 事务测试
- 环境异常测试
- 大数据量时测试
接口安全测试
- API十大安全风险:
- 失效的对象级别授权
- 失效的用户身份验证
- 过度的数据暴露
- 资源缺乏和速率限制
- 失效的功能级授权
- 批量分配
- 安全配置错误
- 注入
- 资产管理不当
- 日志和监视不足
接口性能测试
用户视角
感受到的网站响应速度的快和慢。
开发视角
主要关注包括系统吞吐量,并发处理能力,系统稳定性,响应延迟等。
运维视角
主要关注基础设施性能和资源利用率。
如何设计接口压力测试方案
确定并发数:
可以通过尝试的方式。第一次设置自己预期接口需要达到的并发数,进行压力测试。然后通过二分法进行调整。
确定总请求次数:
可以尝试用现有线上业务每天产生的数量乘以一定的天数,作为接口压力测试的总请求次数
选取压力测试数据:
通常随机选择数据。但是要注意重复进行压力测试对性能的影响。
四、接口测试流程
阶段 | 功能测试 | 接口测试 |
---|---|---|
需求 | 熟悉业务,业务问题沟通,测试范围讨论 | 自动化可行性研究,潜在自动化技术问题讨论 |
设计 | 功能测试范围,参与人员 计划排期 | 技术选型、排期、范围 |
开发 | 测试用例编写、评审和优化 | 编写和调试接口自动化脚本以及自动化场景 |
测试 | 测试执行、问题追踪、复测 | 接口测试执行、CICD集成 |
运维 | 生产环境验证、问题跟踪 | 线上接口自动化巡检、服务可用性检查 |