接口测试这点东西测起来非常容易。但很多刚入行的同学可能不明白什么是接口测试?面试时关于接口测试的问题都有哪些?为什么需要接口测试?引入接口测试的好处?接口测试是怎么做的?测试时涉及到的注意点有哪些?关于单接口用例设计、接口联调设计怎么做?开发必须提供的规范是什么?
掌握了基础信息后,如果利用自动化的方式提升效率,快速执行接口自动化?
本文将深度全面总结以上的这些问题,并陆续完善补充。
1. 什么是接口,为什么引入接口测试
- 精髓总结:1.为了提前介入测试,在后端以接口的方式逐一提测时,介入测试,提前为前端保障接口响应数据,加快测试进度。2.为了测试后端逻辑的单独校验,防止恶意绕过前端对后端的攻击。3.为了后续维护接口自动化,脱离前端对接口的快速回归。4.为了测试人员在测试接口的过程中,熟悉了解接口之间的互相调用,为项目后期压测做分析准备。
- 偷个懒,引入两篇之前记录的文章,详细回答了什么是接口。
接口自动化测试整体认知
常见的接口以及测试详细介绍
2. 需要掌握的基础知识
- 先贴度娘链接:HTTP协议-百度百科
- HTTP协议有哪些?
http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,是基于TCP的方式链接的机制。
引用面试题:
http与https的区别?
一个web端展示内容的过程,怎样的三次握手?
抓包拦截器在哪一步拦截的?
- HTTP URL的组成?
主机+端口|域名+路径 - HTTP请求的组成
请求行、消息报文头、请求正文 - HTTP协议常用方法有哪些?
get、post、head、put、delete、options - get与post方法的区别是什么
1.get是url提交数据,可提交的数据量整个url长度存在浏览器与服务器对他的限制。浏览器ie挟制2083字节
2.post数据是没有挟制的,单是需要看服务器的处理程序能力
3.get请求参数会被完整保留在浏览器历史记录里。post不会
4.get只接受ASCII字符的数据类型,post不限制
5.get因为参数直接暴露在url上,所以不能用来传递敏感信息 - HTTP 状态码
状态码头 | 描述 |
---|
1xx | 指示信息——表示请求已接收,继续处理 |
2xx | 成功——表示请求已被成功接收、理解、接受 |
3xx | 重定向——要完成请求必须进行更进一步的操作 |
4xx | 客户端错误——请求有语法错误或请求无法实现 |
5xx | 服务端错误——服务器未能实现合法的请求 |
3. 接口测试用例设计
- 测试重点:检查数据的交换、传递和控制管理
- 接口用例设计前准备:
接口文档规范且技术评审通过
规范:请求方式、入参、出参、类型、字段描述,结构清晰、请求示例,返回码
接口说明:什么时候调用,业务逻辑,作用
相关调用接口如中间层、前端等参与评审(核对前端中间层设计稿,数据结果是否符合,字段是否满足,是否有遗漏),保证接口可实施性 - 接口测试的标准流程
接口本身就是定义的规范,如果连规范本身都没有规范的设计文档,测试就失去了衡量标准。
如果接口文档不规范请打回让开发重新修改。 - 单个接口测试用例设计
输入参数测试 |
---|
请求参数的必填项和可选项,每个接口入参的默认值、非空校验、NULL校验 |
请求参数的类型验证,异常类型 |
接口有翻页时,页码与页数的异常值测试 |
请求参数的合法输入和非法输入,参数超长 |
请求参数的边界值 |
请求参数的唯一性校验,字段顺序 |
请求参数的安全测试,特殊字符校验,可执行代码、sql注入 |
入参支持传多个值时,要考虑传的值的个数多的情况下,接口会不会报错(异步、同步) |
输出参数测试 |
---|
输出参数的所有返回码验证 |
输出参数的字段类型 |
输出参数的数据正确性验证:对比接口实际返回的数据结构和接口文档提供的数据结构。 |
输出参数返回错误提示信息合理性验证 |
输出的完整性:对比最终设计稿,确认接口返回的数据是否够前端呈现使用 |
所有列表页接口必须考虑排序值 |
数据库测试 |
---|
数据存取字段校验,是否和入参出参数据一致,枚举值对应 |
数据来源去向是否正确 |
数据的增删改查,如数据删除后再入库查询 |
数据库字段状态是否更新正确 |
入参和出参是否在页面呈现正确 |
业务场景测试 |
---|
根据接口调用场景模拟功能测试进行业务逻辑设计 |
基于业务场景的考虑,例如:登录态、权限等 |
其他测试 |
---|
多线程同时请求测试,高并发测试 |
接口响应时间测试,如果响应时间过长需要排查原因,可能代码或是设计有问题 |
所有功能都要考虑兼容旧版本 |
4. 接口测试工具
- 切换host工具:HostAdmin
- 抓包工具:Fiddler、Charles、WireShark等
- 调试工具: chrome developer tools、 firebug等
- 辅助测试工具:Postman、DHC、HttpRequester
- 性能测试工具:Apache JMeter、LoadRunner、apache ab
5.接口测试的执行
总结下接口测试的工作流程,并举例手动post测试方式
- 熟悉业务需求,确保理解了当前业务的逻辑
- 熟悉接口文档,准备测试数据。(需要确保当前的接口文档的各个要素能满足接口测试的需要)
- 设计接口测试的case
- 执行case,可以用postman或者直接写脚本测试。
- 发送对应的测试报告。
- 测试稳定后需要用jmeter固化下来和jenkins集成。
先附上postman官网链接postman学习中心
- 创建接口请求行url基础介绍
- postman工具接口最基础介绍
- 常规用法post接口body录入报文实体
- 常规用法post接口文件上传 file类型key
- post脚本语言,设置接口响应报文主体,设置到全局变量中供其他接口使用,设置断言校验接口等,具体见postman学习官网
手工维护测试接口到这里就ok啦,下面把接口维护到自动化框架中,方便统一管理,便于一键执行。
6. 接口自动化测试框架
- 专注于业务场景,通过调用接口来完成场景处理,相对于UI自动化,服务层的接口测试更加稳定,测试用例也更加容易维护,服务层接口测试可以更关注系统整体的逻辑验证。
- 搭建系统间的Mock维护集成case的稳定性,可以解决系统第三方外部依赖
- 使用框架 Jenkins+java+testng+springboot
- 使用Jenkins无人值守持续集成,生成测试报告,配置发送邮件 传送门
7. 自动化代码demo
传送门