软件质量的守门人——接口测试
简介
接口:接口可以叫做 API(Application Programming Interface),其实本质上就是后端的开发预先定义好的函数,这些函数可以提供一些确定的功能和服务。接口是在软件开发中连接不同系统、软件或组件的关键点。它定义了通信方式和规范,协助组件之间有效地交互和协作。
接口测试:接口测试是验证系统不同组件或模块之间的通信和数据交换的软件测试类型。它基于接口的输入和输出,测试每个接口在不同条件下的行为和功能。接口测试的目标是确保系统各组件之间的通信和数据交换准确、可靠。
接口是前后端交互的桥梁。也就是前端和后端要进行数据交互时,都是需要通过接口的。
这是接口测试在实际当中的一些应用场景,通过接口对服务进行验证。
应场场景
集成测试:确保软件模块能够正确集成并正常通信。
版本迭代测试:验证新版本接口兼容性,保证旧版本功能正常。
性能测试:评估接口在高负载情况下的性能表现。
安全测试:检查接口安全性,确保数据传输安全。
错误场景测试:测试异常情况下接口行为,如错误输入数据、网络中断等。
自动化测试:使用自动化脚本快速执行接口测试,提高效率。
接口测试的价值
- 传统的测试方法成本急剧上升
- 测试效率下降
服务端非常复杂。这是一个 2012 年的时候淘宝核心链路应用的拓扑图。让大家能对后端服务的复杂性有一个比较直观的了解。
图里面的每一个点都代表了一个模块,也就是后端的一个服务。
这张图上的模块的组合和情况。一列有 15 个模块,然后有 10 列。现在的复杂度肯定要比图上的还要复杂。所以这张图就能看出来,公司里面真实的后端服务是非常复杂的。
比如当一个用户购物的时候,浏览,把一个东西放入购物车,登录,接下来产生交易,每一步用户的行为,后面都连接了很多个模块。通过各种依赖和组合,对用户的数据进行了全面的处理。
比如一个用户登录进来,要调用登录接口,接下来就可以看到商品的详情页,用户的个人信息页,包括你要给他展现的广告等等。这就需要非常庞大的服务端组件的支持,通过各种配合,才能提取出来各种信息。
那这么多模块,不可能一个团队去保证质量。基本上是每个模块都有专门的团队去负责。少则二三个人,多则十几二十个人,大家会维护这些东西,所以说需要的团队成员也是非常多的。
当这些模块集成到一块的时候,比如其中有的模块是一个月变更一次,有的模块两周变更一次。
就单个模块来说可能变更的频率不是很大,两周或者一个月是属于正常水平。但是这么多模块集成到一起了,整个网状的结构,它的调用关系,其实可能是每天都会有更新。
这样庞大的变化,就会给测试人员带来压力。可能上一轮测试还没有测完,调用的网络结构就已经发生了变化。由于模块发生了升级,可能调用链路就发生了变化。
在这种情况下,传统的一些测试方法可能就不实用了。在产品功能越来越复杂,变化越来越快的情况下,普通的瀑布流的测试,就已经跟不上公司的发展变化。
基于这种情况,就需要研究出来的新的测试方法和测试策略,去想办法应对这种变化。
其实目前最好的方法就是分层测试。把测试分为前端和后端,后端变化的时候,后端测试工程师单独去测。那前端的测试工程师专注于前端的测试就好了。
分层完成之后,对于每一个组件其实还可以继续拆分,现在很多公司都采用微服务化。微服务化对应的每一个组件都需要有一个对应的测试。既有单元测试,又有单模块的一个接口测试,又有整个集群的整体的端到端的一个 API 的接口测试。最后再到 UI 端,完成 UI 端的测试。
除了分层,其实自动化也是必不可少的。没有自动化的话,这么大的一个集群其实也是没有办法测的过来的。
所以说当前情况下传统的 UI 测试成本越来越高,效率本身又比较低,已经不能完全满足保证质量的需求了。
那么分层之后,就可以通过接口测试来快速保证后端服务的质量。
分层测试体系
现在最常用的分层模式,测试的金字塔模型。这个分层测试的思想提出者是 pageobject 设计模式的奠基人,他就是马丁福勒。
马丁福勒关于分层测试,画出了这样一张非常经典的图。这张图展示的是一个公司的分层测试策略。
- 越往上,发现 Bug 的时间越晚,成本越高
- 接口测试(Service)相比 UI 测试,可以更早发现问题,更快的质量反馈
接口测试学习路线
学习接口测试可以从简单到复杂分为 3 个阶段。
接口测试与 MOCK 学习路线
那一阶段的目标是
- 掌握接口测试的知识体系与学习路线
- 掌握面试常见知识点之 HTTP 协议
- 掌握常用接口测试工具 Postman
- 掌握常用抓包工具 Charles 与 Fiddler
- 结合知名产品实现 mock 测试与接口测试实战练习
要完成这些目标,安排了这些章节
知识点 | 接口测试价值与体系 | 了解接口测试的知识体系与学习路线 |
知识点 | 常见的接口协议 | 了解常见接口协议、重点掌握 HTTP 协议 |
知识点 | 接口测试用例设计 | 掌握接口测试用例设计思路 |
知识点 | Postman 基础使用 | 掌握 Postman 的安装和基础使用 |
实战 | Postman 实战练习 | 使用 Postman 完成接口测试 |
知识点 | 抓包工具 charles | 掌握 charles 的安装和基础配置 |
知识点 | 抓包工具证书配置 | 抓包工具证书配置 https 协议数据抓包 |
实战 | App 抓包实战练习 | 对雪球实现抓包 |
实战 | 接口测试实战练习 | 结合 Postman 完成对宠物商店的接口测试 |
知识点 | 弱网测试 | 使用 charles 完成弱网测试 |
知识点 | mock 的价值与意义 | 了解 mock 测试的价值与意义 |
实战 | mock 实战练习 | 雪球 mock 实战练习 |
总结
接口测试概念
接口测试的价值
分层测试体系
接口测试学习路线