什么是接口测试,如何做接口测试?
比起点点点的功能测试,“接口测试”显得专业又高大上,也因此让有些初级测试人员“望而生畏”。别担心,其实接口测试也是功能测试的一种,它是针对接口进行的功能测试。
写在前面:本文参考了茹炳晟老师的《测试工程师 全栈技术进阶与实践》,并结合自己的理解进行了删减和补充。
一. 什么是接口测试?
软件接口,是指软件不同模块之间交互的接口,我们通常所说的API(Application Programming Interface 应用程序接口),即是软件系统不同模块之间衔接的约定。
接口测试即是对软件各个模块的接口进行的测试。
二. 为什么要重视接口测试?
近年来软件的规模日益庞大,软件系统越来越复杂,仅仅从用户界面的测试无法保证系统的健壮性和容错性,且越早发现问题修复的成本越低。下图是迈克 · 科恩(Mike Cohn)提出的传统了软件测试的金字塔模型:

金字塔模型告诉我们:
测试层级越低,问题定位越容易;
测试层级越高,维护成本越高;
测试层级越高,修复成本越高。
但由于互联网产品追求的是快速实现功能并上线,基本不会给开发或测试人员有多余的时间去做足够的单元测试;及时预留了单元测试的时间,频繁的迭代也会让单元测试处于不断写的状态。因此,互联网产品的单元测试也有一定的针对策略,一般是对核心模块相对稳定的业务和服务覆盖单元测试。在此情况下,API测试变得尤为重要。主要原因如下:
- API测试用例的开发、调试和执行效率比较高
- API相对稳定
- API测试用例的执行的稳定性远远高于GUI测试
- 现在很多互联网产品都采用了微服务架构,在此架构下,如果做好了每个服务的API测试,整体产品的质量就有了保障。
因此,互联网产品一般采用的都是菱形的测试策略:

三. 接口测试有哪些好处?
上一小节介绍了为什么要重视接口测试,那做接口测试有哪些好处呢?
实现测试左移
用户界面的GUI测试是模拟真实用户使用软件的行为,它位于测试的最顶层,发现问题后,定位和修复的代价都比较大。API测试可以实现测试的左移,即前后端分离的项目,当后端开发完毕,即可进行接口测试,而无需等待前端。可以保证尽早发现问题,降低问题修复成本。
降低维护成本
相比较用户界面,接口比较稳定,维护成本低
提高测试效率
一方面,由于接口在执行中不依赖于任何界面上的操作,其执行稳定性远远过于GUI,因此可以实现自动化,提高测试效率;
另一方面,可以将一些常用的接口用例做成小工具(或直接执行脚本),测试过程中的一些数据准备及构造的场景,就可以直接拿来用了;
还有,需要反复执行的回归场景,可以直接执行用例。
有利于bug定位
很明显,通过接口发现的问题,就是后端问题,可以直接找负责接口的开发人员;如果仅仅是用户界面发现的问题,可以直接找前端开发。这种测试策略可以明确bug的范围,降低bug定位成本
保证系统的安全性、健壮性和容错性
一些通过UI无法进行的输入,可以通过接口轻易地实现。例如在 什么是测试思维 – 测试工程师的核心技能 举例的微信余额支付从场景:

单单从用户界面上操作,这里的负数、非全数字,都是无法输入的;但是从接口的角度看,这些值都可以作为输入参数。
四. 如何设计和组织接口测试用例?
首先明确一下接口测试的范围。第二节已经说了,由于互联网的“快”,API测试变得尤为重要。但是不是所有的API都要测试呢?——不是。正如单元测试一样,API测试也要考虑性价比,因此一般我们选择核心的业务模块做API测试。由于不同业务的核心模块不同,这里不作讨论。
刚刚介绍了,接口测试是针对接口进行的功能测试。因此,接口测试和功能测试的用例设计原则是一样的:场景分析都要灵活运用测试思维(什么是测试思维 – 测试工程师的核心技能),常用的用例设计方法都是等价类划分、边界值等(软件测试入门必学--如何设计测试用例)。那二者有哪些不同呢?
1)测试对象不同
功能测试:主要测试应用程序的具体功能
接口测试:主要测试应用程序中各个模块间的接口的输入、输出等是否符合预期
2)测试目的不同
功能测试:确保应用程序的具体功能和需求文档一致
接口测试:测试应用程序中各个模块间的接口的输入、输出等是否符合预期,和其他模块的交互是否OK
3)测试重点不同
功能测试:重点在用户界面及功能
接口测试:重点在业务逻辑
4)测试工具不同
功能测试:主要是人工直接操作用户界面
接口测试:需要使用接口测试工具,例如postman,jmeter等,更多是实现基于代码的测试套件
5)测试扩展不同
功能测试:用户界面变化比较频繁,可做充分的探索性测试
接口测试:接口相对稳定,有利于实现自动化,来保证业务逻辑。例如用户界面的重构,如果接口不变,则用户界面可以随意更改,同时用实现的接口自动化来保证业务逻辑。但“自动化”本身不会扩展,其无法替代手工测试的探索性测试。
4.1 单个接口的测试
通过上面几小节内容,我们已经了解到,接口是软件系统不同模块之间衔接的约定。因此接口测试是比较规范的,通常就是三个标准的步骤:
- 准备测试数据
- 发起请求
- 验证响应结果
接口测试时需要关注的点有:
- URL地址:具体的接口url
- 请求方法:GET、POST、PUT、DELETE等
- 请求头域(Header):发送申请时携带的头部信息。通常一些鉴权的信息:authentication/cookie、响应的数据格式:content-type等等的设置。当然响应的数据也会返回一些头部信息。
- 请求参数(Parameter):GET是以键值对的形式,POST的参数在body体里
- 响应内容(Response):接口的返回码及返回内容,即输出。通常要对这部分进行验证。
4.2 多个接口的测试
实际业务场景中,通常一个单一的前端操作可能会触发后端一系列的API调用,因此API测试用例一般都不是单个的API调用,而是一系列,并且经常在后一个API调用中需要使用前一个API调用返回的结果,同时需要根据前一个API调用的返回结果决定在后面应该调用哪个API. 因此这两个问题的解决直接影响到多个接口测试用例的实现。
如何高效地获取单个前端操作所触发的API调用序列?
询问开发人员
这是最直接的方法。但经常询问一则会对开发人员造成打扰,二则显得咱也不够专业。
阅读开发代码
需要有一定的编程基础
3. 参阅开发人员的详细设计文档
一般比较规范的详细设计文档或接口文档都会有业务逻辑图,注明各个接口间的调用顺序。
4. 抓包
可以通过Fiddler等抓包工具,在不依赖开发人员的情况下自己获取。
5. 查看日志
通过基于用户行为的日志,可以获取API调用序列。
如何在后一个API调用中使用前一个API调用返回的结果?
手动检查
自然是可以的,只是效率比较低。
自动化实现
接口的规范性,使得将结果的验证和引用实现自动化,不但可以验证业务流程,还能提高验证的效率。
如果使用postman,可以自动生成验证代码。但当需要频繁执行大量的测试用例时,Postman等基于界面的API测试就无法满足需要了。于是出现了基于代码的API测试框架。比较典型的是基于Java的OkHttp和Unirest、基于python的http.client和Requests、基于Node.js的Native和Request等。一些大型的企业还会结合自身的业务开发自己的API测试框架。各个框架各有优劣,思想都是相通的。大致的思路如下:
提炼出业务主流程,每个主流程对应一个测试套件,即test suite
对于一些异常场景,可以在主流程的test suite中添加,它不会影响最终的结果;也可以单独建立test suite以减少对主业务流程的干扰;
支持多个取值的参数,可以在不同的test suite中交叉覆盖(正交实验法)
五. 常见面试题
- 项目中使用的是什么协议的接口?
- 提示:一般有HTTP、HTTPS、RPC等。然后会结合回答继续问~
- HTTP接口有哪些请求方法?
- 提示:常用的GET、POST、PUT、DELETE等
- HTTP接口的返回码
- 提示:2xx、3xx、4xx、5xx
- 接口测试有哪些好处?
- 接口测试是如何做的?
- 提示:从流程和设计上回到
- 有哪些常用请求头,请求头是做什么的?
- cookie和session的区别,UA等
- 如何区分前后端bug?
六. 思考和总结
接口测试在测试工程师的工作中比重越来越大,因此也是专业TE的必备技能。
本文简单介绍了接口测试的背景以及优点,对于设计和组织部分也是简略一提,更是没有设计工具、框架的使用。其实这部分如果要详细说,每个工具,每个框架都是个很大的话题。本文只是提供一个简单的思路,还需要每个测试人多思考多总结。
如果有机会,我会慢慢总结并分享~Fighting! 与各位共勉!
最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:
软件测试面试小程序
被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!
涵盖以下这些面试题板块:
1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux
6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!
相关文章:
什么是接口测试,如何做接口测试?
比起点点点的功能测试,“接口测试”显得专业又高大上,也因此让有些初级测试人员“望而生畏”。别担心,其实接口测试也是功能测试的一种,它是针对接口进行的功能测试。 写在前面:本文参考了茹炳晟老师的《测试工程师 全…...
Keil 编译 Debug
# 头文件无法导入进来 # 导入头文件,只有函数声明,但缺少函数实现 已经导入了air32f10x_gpio.h但是没有导入 .c,就导致 编译出错出现undefined symbol (某个函数),这时候按照下面的操作,导入外设模块就好。...
【通用消息通知服务】0x3 - 发送我们第一条消息(Websocket)
【通用消息通知服务】0x3 - 发送我们第一条消息 项目地址: A generic message notification system[Github] 实现接收/发送Websocket消息 Websocket Connection Pool import asyncio from asyncio.queues import Queue from asyncio.queues import QueueEmpty from contextli…...
Eclipse打jar包与JavaDOC文档的生成
补充知识点——Eclipse打jar包与JavaDOC文档的生成 1、Eclipse如何打jar包,如何运行jar包 Java当中编写的Java代码,Java类、方法、接口这些东西就是项目中相关内容,到时候我们需要把代码提供给甲方、或者是我们需要运行我们编写的代码&…...
力扣:80. 删除有序数组中的重复项 II(Python3)
题目: 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下…...
linux:需要注意docker和aws的rds的mysql默认是UTC而不是中国时区
问题: 如题 解决办法: docker参考: mysql时间不对,修改时区_set global time_zone 无效_《小书生》的博客-CSDN博客 aws参考: https://www.youtube.com/watch?vB-NaqV-A1BY mysql - AWS修改RDS时区 - 个人文章 - Segm…...
访问 GitHub 方法
访问 GitHub 方法 方法一:最常见的就是 fq,但这个是违法的行为,自己私下搞可以,不能教你们。 方法二:利用加速器,这是正规合法操作。这里推荐一个免费的加速器,下载安装 Watt Toolkit加速器,原名…...
旅游APP外包开发注意事项
旅游类APP通常具有多种功能,以提供给用户更好的旅行体验。以下分享常见的旅游类APP功能以及在开发和使用这些APP时需要注意的问题,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 常见功能…...
ROS机器人编程---------(二)ROS中的核心概念
ROS机器人编程 ROS中的核心概念 ROS的通信机制 在ROS中结点是最小单元,比如说机器人的遥控器可以作为一个控制结点,机器人上的摄像头也可以看作一个结点,ROS通过协调各个结点来实现 在启动任何ROS结点之前,都必须先启动ROS Mas…...
Python学习教程:进程的调度
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 要想多个进程交替运行,操作系统必须对这些进程进行调度, 这个调度也不是随即进行的,而是需要遵循一定的法则,由此就有了进程的调度算法。 python更多源码/资料/解答/教程等 …...
ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案
ElasticSearch第三讲:ES详解 - Elastic Stack生态和场景方案 本文是ElasticSearch第三讲,在了解ElaticSearch之后,我们还要了解Elastic背后的生态 即我们常说的ELK;与此同时,还会给你展示ElasticSearch的案例场景&…...
基于Java+SpringBoot+Vue前后端分离农商对接系统设计和实现
博主介绍:✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专…...
【模方ModelFun】实景三维建模和修模4.0.7最新版安装包以及图文安装教程
模方ModelFun 具有多种功能,旨在帮助用户进行实景三维建模和修模。以下是一些主要功能的简要介绍: 实景三维建模:【模方ModelFun】提供了自动化的实景三维重建功能,可以从实景图像中提取几何形状和纹理信息,生成高质量…...
介绍几个搜索引擎
Google:全球最大的搜索引擎,提供全面的搜索服务,包括网页、图片、视频、新闻、地图等。 Baidu:中国最大的搜索引擎,提供类似于Google的全面搜索服务,同时也有网盘、知道等功能。 Bing:微软公司…...
iPhone 隔空投送使用指南:详细教程
本文介绍了如何在iPhone上使用隔空投送,包括如何在iOS 11到iOS 14的iPhone上启用它、发送文件以及接受或拒绝AirDrop发送给你的文件。对于iOS 7以上的旧款iPhone,提供了另一种方法。 如何打开隔空投送 你可以通过以下两种方式之一启动隔空投送功能:在“设置”应用程序或控…...
百度文心一言GPT免费入口也来了!!!
文心一言入口地址:文心一言能力全面开放 文心一言是百度全新一代知识增强大语言模型,文心大模型家族的新成员,能够与人对话互动,回答问题,协助创作,高效便捷地帮助人们获取信息、知识和灵感。 文心一言的技…...
线程调度和线程控制
在Java中,线程调度和线程控制是多线程编程中重要的概念,它们用于管理和控制线程的执行。以下是关于线程调度和线程控制的一些重要概念和技术: **1. 线程调度(Thread Scheduling): ** 线程调度是操作系统或Java虚拟机决定哪个线程在何时执行的过程。Java提供了多种线程调度…...
laravel excel导入导出
一、安装第三方 composer require maatwebsite/excel版本2.1和现在版本 有所不一样 二、导入 <?php namespace App\Import; use Maatwebsite\Excel\Concerns\ToCollection;class TestImport implements ToCollection {public function __construct(){}public function c…...
Windows无法删除分区怎么办?
我们知道Windows系统内置的磁盘管理工具是一个很实用的程序,可以帮助我们完成很多磁盘分区相关的基础操作,比如当我们想要删除硬盘上的某一个分区时,先想到的可能会是磁盘管理工具。但是当我们准备在磁盘管理工具中删除某个分区时,…...
【请求报错:javax.net.ssl.SSLHandshakeException: No appropriate protocol】
1、问题描述 在请求服务时报错说SSL握手异常协议禁用啥的,而且我的连接数据库的url也加了useSSLfalse javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)2、解决方法 在网上查找了方法…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果 {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
微服务通信安全:深入解析mTLS的原理与实践
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、引言:微服务时代的通信安全挑战 随着云原生和微服务架构的普及,服务间的通信安全成为系统设计的核心议题。传统的单体架构中&…...
Python训练营-Day26-函数专题1:函数定义与参数
题目1:计算圆的面积 任务: 编写一个名为 calculate_circle_area 的函数,该函数接收圆的半径 radius 作为参数,并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求:函数接收一个位置参数 radi…...
企业大模型服务合规指南:深度解析备案与登记制度
伴随AI技术的爆炸式发展,尤其是大模型(LLM)在各行各业的深度应用和整合,企业利用AI技术提升效率、创新服务的步伐不断加快。无论是像DeepSeek这样的前沿技术提供者,还是积极拥抱AI转型的传统企业,在面向公众…...
倒装芯片凸点成型工艺
UBM(Under Bump Metallization)与Bump(焊球)形成工艺流程。我们可以将整张流程图分为三大阶段来理解: 🔧 一、UBM(Under Bump Metallization)工艺流程(黄色区域ÿ…...

