接口测试
接口测试
关于接口测试
概念定义
-
接口测试就是通过测试不同输入条件下,接口返回的结果是否与预期结果一致,即测试后端的代码是否符合逻辑
-
接口测试是没有页面操作的,只能通过调用接口来进行测试,只需要给接口传递相应的输入条件,再检查接口输出的结果是否符合预期即可。
接口测试比功能测试还要更简单一些(因为功能测试还包含了程序的UI层,包含了按钮,UI交互等功能)。
接口形式
- 前端和后端的接口,主要表现在后端数据库需要通过接口展示在前端页面
- 后端系统之间的对接,微服务每个子系统都是独立的(例如:用户注册子系统跟登录子系统的对接)
常见接口类型
-
HTTP 接口:通过HTTP协议来进行数据传输的接口,通常有分http和https接口。请求报文一般以key-value形式展示的,响应报文一般都是json/text格式。注意关于https协议的接口,抓包以后返回的数据有可能是乱码
-
RPC接口:Remote Procedure Calls 远程调用的一种协议
-
RMI接口:Remote Method Invocation 主要针对与Java语言
-
WebService 接口:通过soap协议进行数据传输的接口
-
RESTful风格接口
目前接触最多的还是HTTP接口,本文都主要是针对HTTP接口。
接口组成
协议://主机地址(host):端口号(port)/路径 ?get请求参数xx=xx&yy=yy
https://www.baidu.com :443 /s ? ie=utf-8 & f=3 & rsv_bp=1
为什么要做接口测试?
- 节省时间,提前进入测试(例如:后端已经完成,前端还没完成。可以通过接口测试提前对后端系统做测试)
- 可以检查出一些在前端界面无法做测试的场景(例如:页面有一个金额框:0-100元 前端的开发都会做好检验,只能输入0-100的数字。但是我们要验证程序的异常情况:中文,字母,特殊字符,但是后端开发未必会做这些检验。此时我们测试就要通过接口测试进行去检验,确保后端对这些异常值也做了处理。) 【后端的功能校验在前端很难进行测试,因为前端已经有初步校验控制,所以采用接口测试可以发现很多前端无法发现的问题】
什么时候做接口测试?
在公司中前端开发跟后端开发是独立进行的,一个项目是前后端组成的,最终我们要进行前后台联调,这时候我们就要使用接口,那么在前后台联调之前,我们需要对不同的接口进行测试。
接口联调:前端把页面写好了,后端也把逻辑代码写好,然后就要进行代码的合并,部署在环境中(开发环境)。接口联调一般是在冒烟测试前完成的,一般是开发去干,但是我们还是要验证在接口行不行。
如何做接口测试?
接口测试流程
- 接口测试需求分析---接口文档(在概设文档中), 后端开发提供的,如果没有接口文档,自己抓包(fidder,或者浏览器的开发者工具)
- 接口测试需求评审
- 编写接口测试计划
- 编写接口测试用例
- 接口测试用例评审
- 用例导入接口测试工具(执行用例)----接口测试工具(postman,jmeter)【如果可以的话可以做接口自动化持续集成】
- 发现Bug提交到禅道
- 编写小结测试报告
- 编写总结测试报告
接口测试要点:
- 验证接口的功能是否正常,是否符合接口文档。接口传递的数据需要在入库的数据库里是否更新
- 参数很多都是key:value键值对形式存在的,要分别对key和value进行检查,key是否正确拼写,value的字符类型,字符长度,说明的格式是否必填,都要进行检查。
- 如果value是枚举值,要对每个枚举值进行检查
- 业务的依赖关系
- 接口的依赖关系(例如登录接口成功,用户要获取到信息接口才可以算成功,否则提示未登录)
- 接口的安全性
- 是否有敏感的信息
- 敏感信息是否加密
- 接口的性能(简单)
- 响应的数据量(跟业务做预估)
- 响应的时间
- 单用户的连续点击
- 接口并发的情况
- 接口的返回信息,接口是给用户使用的,
- 如果这个接口是调用其它第三方系统,还要考虑第三方系统的稳定性
接口测试用例考虑
- 对接口的功能进行验证(对它正常的业务流程和异常的流程)
- 对接口参数进行验证:
- url拼接
- 参数(字符类型,字符长度,必传类型,null以及这个接口特殊的情况)
- 接口参数存在枚举值,对每一个枚举值进行检查校验
- 对于参数组合的情况 【例如:在订单查询时,需要订单号跟用户id进行组合查询】
- 多加参数的情况(是正常还是异常)
- 输入参数检查(看看返回结果和预期结果是否一致)
- 简单的性能测试【一般持续15分钟】
- 该接口连续点击
- 并发检查
- 吞吐量
- 响应时间
- 服务器资源进行监控 (cpu,内存,磁盘io读写,网络资源)
- 安全测试
- 关于私密信息的加密
- 是否做防恶意的检查
- sql注入
mock挡板测试
前端已经做好,但是后端接口还没做好时做。
mock挡板测试:前端进行请求设置一个挡板程序,模拟后端返回的数据,看看前端页面是否正常处理。后端完成后,撤出这些挡板数据,还要继续测一次。
有没有做过挡板测试?有,用fidder的autoresponder功能,不过我不建议使用挡板,因为使用挡板时往往不能确保下游系统是否正常按照接口文档进行开发,如果使用了挡板,在下游开发完成后必须要撤销挡板重新进行验证。 除非下游系统没做好,偶尔懒一下,系统开发流程很长,没办法,只能先用挡板。p2p风控系统,做一个测试,底层人员,接触不了风控系统,只能使用挡板进行测试。
fiddler做挡板测试
- 先mock一个数据
- 使用fiddler的
AutoReasponder
->Add Rule
->输入url
+导入特定的mock数据
-save
HTTP
-
tcp/ip协议分为5层:应用层,传输层,网络层,数据链路层,物理层
-
TCP协议:面向连接(保持连接) UDP协议:加密数据传输
http和https区别:
http协议
https协议:http+ttp/ssl
- 端口号不一样:http是80,https是443
- http是不加密传输,https是加密传输
- http页面响应速度,回比https更快
- https比http更加消耗服务器性能
三次挥手
- 客户端发起一次连接请求,带有SYN同步码的数据包给服务端
- 服务端接收后,回传一个带有新的SYN同步码和ACK确认码(对方的同步码+1)的数据包给客户端
- 客户端收到客户端回传数据包之后,再次进行确认ACK确认码(对方同步码+1),就可以建立连接
四次挥手
- 任一方发起断开连接请求
- 另一方确认收到断开连接请求
- 另一方同时也要发起断开连接请求,把未完成的数据进行传输
- 发起方确认完全离开
其它的协议和端口
- telnet 远程登入协议 23
- ftp 文件传输协议 21
- smtp 邮件传输协议
- DNS 域名解析协议 53
- pop3 邮件 服务器 110
- UDP 用户数据报协议
- OSI 网络协议(7层) IOS 苹果操作系统 iso 镜像文件格式
接口内容:
发送端:请求头,请求体(请求体的信息)
服务端:响应头,响应体
接口的状态码
2xx:表示请求成功,服务器有响应
3xx:表示重定向,访问的接口不存在,但是可以重定向到其它接口(302重点)
4xx:表示客户端错误,客户端请求的url地址错误,请求的资源不存在,常见的报错状态码:403、404、400
5xx:表示服务端错误(502:网关错误,500:服务器的接口报错)
同步接口:发送一个请求必须要等到响应结果才能发起下一个接口请求
异步接口:发送一个请求后,不需要等待响应结果就可以发起下一个接口请求
接口请求方式
get,post,head,put,delete,connect,option,trace
GET(get/delete/head/options...) / POST(post/put/patch...)
-
GET传递的信息不如POST多,因为URL有长度限制「IE->2KB」,超过这个长度的信息会被自动截掉,这样导致传递内容过多,最后服务器收到的信息是不完整的!!POST理论上是没有限制的,但是传递的东西越多,速度越慢,可能导致浏览器报传输超时的错误,所以实际上我们会自己手动做限制!!
-
GET会产生缓存「浏览器默认产生的,不可控的缓存」:两次及以上,请求相同的API接口,并且传递的参数也一样,浏览器可能会把第一次请求的信息直接返回,而不是从服务器获取最新的信息!!
在请求URL的末尾设置随机数,以此来清除GET缓存的副作用 xhr.open('GET', './1.json?lx=1&name=xxx&_'+Math.random())
[只是不走缓存,并没有清除缓存]
- POST相对于GET来讲更安全一些:GET传递的信息是基于URL末尾拼接,这个随便做一些劫持或者修改,都可以直接改了,而POST请求主体信息的劫持,没那么好做; 不管什么方式,只要涉及安全的信息,都需要手动加密「因为默认所有的信息传输都是明文的」!!
4)GET在url地址中有所体现,POST请求会封装在request body中
常见的接口测试工具
开发那边要个证书
生产环境里做,不在测试环境做,毕竟这个证书要钱
- fidder:抓包软件,也可以用来测试接口 【做弱网测试】
- postman
- jmeter:apache旗下的,免费开源
- Charles
postman
前置处理器
后面断言
接口参数化
关联接口
postman导出所有接口
fidder
设置断点
##### 设置全局断点
###### 请求
设置全局请求断点 : `rules->automatic breakpoint->before requests`
###### 响应
设置全局响应断点 : `rules->automatic breakpoint->after requests`
取消全局断点 : `rules->automatic breakpoint->disable`
##### 单个断点
###### 请求
设置单个请求断点 : `bpu 需要断点的url地址`
取消请求断点 : 直接输入bpu
###### 响应
设置单个响应断点 : `bpafter 需要断点的url地址`
修改响应 : 在响应体的 `TestView`修改 , 然后`Run to Comp执行` **可以对响应结果进行篡改,篡改后可以执行**
取消响应断点 `bpafter`
手机抓包
设置弱网场景
session,cookie,token区别
持续更新。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义