什么是接口测试,如何做接口测试?
比起点点点的功能测试,“接口测试”显得专业又高大上,也因此让有些初级测试人员“望而生畏”。别担心,其实接口测试也是功能测试的一种,它是针对接口进行的功能测试。
写在前面:本文参考了茹炳晟老师的《测试工程师 全栈技术进阶与实践》,并结合自己的理解进行了删减和补充。
一. 什么是接口测试?
软件接口,是指软件不同模块之间交互的接口,我们通常所说的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、解决方法 在网上查找了方法…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
TDengine 快速体验(Docker 镜像方式)
简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能,本节首先介绍如何通过 Docker 快速体验 TDengine,然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker,请使用 安装包的方式快…...
Java 语言特性(面试系列1)
一、面向对象编程 1. 封装(Encapsulation) 定义:将数据(属性)和操作数据的方法绑定在一起,通过访问控制符(private、protected、public)隐藏内部实现细节。示例: public …...
[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
pikachu靶场通关笔记19 SQL注入02-字符型注入(GET)
目录 一、SQL注入 二、字符型SQL注入 三、字符型注入与数字型注入 四、源码分析 五、渗透实战 1、渗透准备 2、SQL注入探测 (1)输入单引号 (2)万能注入语句 3、获取回显列orderby 4、获取数据库名database 5、获取表名…...

