软件质量的守门人——接口测试

简介: 接口作为API,是后端预定义的函数,用于系统间通信和数据交换。接口测试验证不同组件间的交互,确保其准确、可靠。常见应用场景包括集成测试、版本迭代测试、性能测试、安全测试和错误场景测试。随着服务端复杂性的增加,传统测试方法面临挑战,因此引入分层测试(如马丁福勒的测试金字塔模型)和自动化测试,以降低成本并提高效率。接口测试成为确保后端服务质量的关键,学习接口测试可从理解其价值、协议、工具使用及Mock测试等方面逐步进阶。

简介

接口:接口可以叫做 API(Application Programming Interface),其实本质上就是后端的开发预先定义好的函数,这些函数可以提供一些确定的功能和服务。接口是在软件开发中连接不同系统、软件或组件的关键点。它定义了通信方式和规范,协助组件之间有效地交互和协作。

接口测试:接口测试是验证系统不同组件或模块之间的通信和数据交换的软件测试类型。它基于接口的输入和输出,测试每个接口在不同条件下的行为和功能。接口测试的目标是确保系统各组件之间的通信和数据交换准确、可靠。

接口是前后端交互的桥梁。也就是前端和后端要进行数据交互时,都是需要通过接口的。

image.png

这是接口测试在实际当中的一些应用场景,通过接口对服务进行验证。

image.png

应场场景

集成测试:确保软件模块能够正确集成并正常通信。

版本迭代测试:验证新版本接口兼容性,保证旧版本功能正常。

性能测试:评估接口在高负载情况下的性能表现。

安全测试:检查接口安全性,确保数据传输安全。

错误场景测试:测试异常情况下接口行为,如错误输入数据、网络中断等。

自动化测试:使用自动化脚本快速执行接口测试,提高效率。

接口测试的价值

  • 传统的测试方法成本急剧上升
  • 测试效率下降

image.png

服务端非常复杂。这是一个 2012 年的时候淘宝核心链路应用的拓扑图。让大家能对后端服务的复杂性有一个比较直观的了解。

图里面的每一个点都代表了一个模块,也就是后端的一个服务。

这张图上的模块的组合和情况。一列有 15 个模块,然后有 10 列。现在的复杂度肯定要比图上的还要复杂。所以这张图就能看出来,公司里面真实的后端服务是非常复杂的。

比如当一个用户购物的时候,浏览,把一个东西放入购物车,登录,接下来产生交易,每一步用户的行为,后面都连接了很多个模块。通过各种依赖和组合,对用户的数据进行了全面的处理。

比如一个用户登录进来,要调用登录接口,接下来就可以看到商品的详情页,用户的个人信息页,包括你要给他展现的广告等等。这就需要非常庞大的服务端组件的支持,通过各种配合,才能提取出来各种信息。

那这么多模块,不可能一个团队去保证质量。基本上是每个模块都有专门的团队去负责。少则二三个人,多则十几二十个人,大家会维护这些东西,所以说需要的团队成员也是非常多的。

当这些模块集成到一块的时候,比如其中有的模块是一个月变更一次,有的模块两周变更一次。

就单个模块来说可能变更的频率不是很大,两周或者一个月是属于正常水平。但是这么多模块集成到一起了,整个网状的结构,它的调用关系,其实可能是每天都会有更新。

这样庞大的变化,就会给测试人员带来压力。可能上一轮测试还没有测完,调用的网络结构就已经发生了变化。由于模块发生了升级,可能调用链路就发生了变化。

在这种情况下,传统的一些测试方法可能就不实用了。在产品功能越来越复杂,变化越来越快的情况下,普通的瀑布流的测试,就已经跟不上公司的发展变化。

基于这种情况,就需要研究出来的新的测试方法和测试策略,去想办法应对这种变化。

其实目前最好的方法就是分层测试。把测试分为前端和后端,后端变化的时候,后端测试工程师单独去测。那前端的测试工程师专注于前端的测试就好了。

分层完成之后,对于每一个组件其实还可以继续拆分,现在很多公司都采用微服务化。微服务化对应的每一个组件都需要有一个对应的测试。既有单元测试,又有单模块的一个接口测试,又有整个集群的整体的端到端的一个 API 的接口测试。最后再到 UI 端,完成 UI 端的测试。

除了分层,其实自动化也是必不可少的。没有自动化的话,这么大的一个集群其实也是没有办法测的过来的。

所以说当前情况下传统的 UI 测试成本越来越高,效率本身又比较低,已经不能完全满足保证质量的需求了。

那么分层之后,就可以通过接口测试来快速保证后端服务的质量。

分层测试体系

现在最常用的分层模式,测试的金字塔模型。这个分层测试的思想提出者是 pageobject 设计模式的奠基人,他就是马丁福勒。

马丁福勒关于分层测试,画出了这样一张非常经典的图。这张图展示的是一个公司的分层测试策略。

image.png

  • 越往上,发现 Bug 的时间越晚,成本越高
  • 接口测试(Service)相比 UI 测试,可以更早发现问题,更快的质量反馈

接口测试学习路线

学习接口测试可以从简单到复杂分为 3 个阶段。

image.png

接口测试与 MOCK 学习路线

那一阶段的目标是

  • 掌握接口测试的知识体系与学习路线
  • 掌握面试常见知识点之 HTTP 协议
  • 掌握常用接口测试工具 Postman
  • 掌握常用抓包工具 Charles 与 Fiddler
  • 结合知名产品实现 mock 测试与接口测试实战练习

要完成这些目标,安排了这些章节

形式 章节 描述
知识点 接口测试价值与体系 了解接口测试的知识体系与学习路线
知识点 常见的接口协议 了解常见接口协议、重点掌握 HTTP 协议
知识点 接口测试用例设计 掌握接口测试用例设计思路
知识点 Postman 基础使用 掌握 Postman 的安装和基础使用
实战 Postman 实战练习 使用 Postman 完成接口测试
知识点 抓包工具 charles 掌握 charles 的安装和基础配置
知识点 抓包工具证书配置 抓包工具证书配置 https 协议数据抓包
实战 App 抓包实战练习 对雪球实现抓包
实战 接口测试实战练习 结合 Postman 完成对宠物商店的接口测试
知识点 弱网测试 使用 charles 完成弱网测试
知识点 mock 的价值与意义 了解 mock 测试的价值与意义
实战 mock 实战练习 雪球 mock 实战练习

总结

接口测试概念

接口测试的价值

分层测试体系

接口测试学习路线

相关文章
|
9天前
|
JSON Java Maven
使用`MockMvc`来测试带有单个和多个请求参数的`GET`和`POST`接口
使用`MockMvc`来测试带有单个和多个请求参数的`GET`和`POST`接口
22 3
|
2天前
|
存储 JSON 测试技术
软件测试之 接口测试 Postman使用(下)
软件测试之 接口测试 Postman使用(下)
12 2
|
2天前
|
测试技术 数据格式
软件测试之 接口测试 Postman使用(上)
软件测试之 接口测试 Postman使用(上)
11 1
|
9天前
|
监控 数据管理 测试技术
自动化测试:提升软件质量的关键
【6月更文挑战第19天】自动化测试在软件质量保障中至关重要,通过使用工具执行测试用例,提高效率、减少错误。关键技术包括测试框架(如Selenium)、测试脚本编写、测试数据管理和测试执行监控。虽面临脚本维护、数据管理等挑战,但自动化测试能提升软件质量,降低成本,加快交付速度,并将在未来持续影响软件行业。
|
10天前
|
监控 前端开发 测试技术
postman接口测试工具详解
postman接口测试工具详解
41 7
|
7天前
|
机器学习/深度学习 敏捷开发 人工智能
自动化测试的崛起:如何利用AI提升软件质量
【6月更文挑战第20天】在软件开发的浪潮中,自动化测试已成为确保产品质量的关键工具。随着人工智能(AI)技术的飞速发展,其在自动化测试中的应用日益广泛,为测试流程带来了革命性的变化。本文将探讨AI如何优化测试用例生成、提高缺陷检测效率和预测潜在问题,从而显著提升软件测试的效率和准确性。
28 3
|
10天前
|
监控 JavaScript 前端开发
postman接口测试工具详解
postman接口测试工具详解
21 6
|
9天前
|
敏捷开发 测试技术 持续交付
探索式测试在软件质量保证中的角色与实践
【6月更文挑战第18天】探索式测试,一种灵活且高效的软件测试方法,正逐渐改变传统测试流程的面貌。本文将深入探讨探索式测试的核心概念、实施策略及其在现代软件开发生命周期中的应用价值。通过案例分析与实证研究,揭示探索式测试如何提升测试覆盖率,增强团队协作,并促进持续集成与交付。最终,文章旨在为读者提供一套实用的探索式测试框架,以支持其在软件质量保证活动中的有效运用。
11 3
|
1天前
|
安全 API 数据安全/隐私保护
​6个值得测试的发送邮件接口API
在数字营销和企业通信中,发送邮件接口API如SendGrid、Mailgun、Amazon SES、AOKSend、Postmark和Sendinblue是关键工具。这些API自动化邮件发送,提高效率,确保及时送达。各具特色,如SendGrid和Mailgun适合大规模发送,AOKSend易于集成,Postmark专于事务邮件,而Sendinblue提供综合营销解决方案。根据企业需求,如邮件量、成本、功能和集成简易度,可选择最适合的API服务。
|
4天前
|
监控 druid Java
Springboot用JUnit测试接口时报错Failed to determine a suitable driver class configure a DataSource: ‘url‘
Springboot用JUnit测试接口时报错Failed to determine a suitable driver class configure a DataSource: ‘url‘
11 0