什么是接口测试,如何做接口测试?

news2025/3/10 5:39:51

比起点点点的功能测试,“接口测试”显得专业又高大上,也因此让有些初级测试人员“望而生畏”。别担心,其实接口测试也是功能测试的一种,它是针对接口进行的功能测试。

写在前面:本文参考了茹炳晟老师的《测试工程师 全栈技术进阶与实践》,并结合自己的理解进行了删减和补充。

一. 什么是接口测试?

软件接口,是指软件不同模块之间交互的接口,我们通常所说的API(Application Programming Interface 应用程序接口),即是软件系统不同模块之间衔接的约定。

接口测试即是对软件各个模块的接口进行的测试。

二. 为什么要重视接口测试?

近年来软件的规模日益庞大,软件系统越来越复杂,仅仅从用户界面的测试无法保证系统的健壮性和容错性,且越早发现问题修复的成本越低。下图是迈克 · 科恩(Mike Cohn)提出的传统了软件测试的金字塔模型:

金字塔模型告诉我们:

测试层级越低,问题定位越容易;

测试层级越高,维护成本越高;

测试层级越高,修复成本越高。

但由于互联网产品追求的是快速实现功能并上线,基本不会给开发或测试人员有多余的时间去做足够的单元测试;及时预留了单元测试的时间,频繁的迭代也会让单元测试处于不断写的状态。因此,互联网产品的单元测试也有一定的针对策略,一般是对核心模块相对稳定的业务和服务覆盖单元测试。在此情况下,API测试变得尤为重要。主要原因如下:

  1. API测试用例的开发、调试和执行效率比较高
  2. API相对稳定
  3. API测试用例的执行的稳定性远远高于GUI测试
  4. 现在很多互联网产品都采用了微服务架构,在此架构下,如果做好了每个服务的API测试,整体产品的质量就有了保障。

因此,互联网产品一般采用的都是菱形的测试策略:

三. 接口测试有哪些好处?

上一小节介绍了为什么要重视接口测试,那做接口测试有哪些好处呢?

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

一些通过UI无法进行的输入,可以通过接口轻易地实现。例如在 什么是测试思维 – 测试工程师的核心技能 举例的微信余额支付从场景:

单单从用户界面上操作,这里的负数、非全数字,都是无法输入的;但是从接口的角度看,这些值都可以作为输入参数。

四. 如何设计和组织接口测试用例?

首先明确一下接口测试的范围。第二节已经说了,由于互联网的“快”,API测试变得尤为重要。但是不是所有的API都要测试呢?——不是。正如单元测试一样,API测试也要考虑性价比,因此一般我们选择核心的业务模块做API测试。由于不同业务的核心模块不同,这里不作讨论。

刚刚介绍了,接口测试是针对接口进行的功能测试。因此,接口测试和功能测试的用例设计原则是一样的:场景分析都要灵活运用测试思维(什么是测试思维 – 测试工程师的核心技能),常用的用例设计方法都是等价类划分、边界值等(软件测试入门必学--如何设计测试用例)。那二者有哪些不同呢?

1)测试对象不同

功能测试:主要测试应用程序的具体功能

接口测试:主要测试应用程序中各个模块间的接口的输入、输出等是否符合预期

2)测试目的不同

功能测试:确保应用程序的具体功能和需求文档一致

接口测试:测试应用程序中各个模块间的接口的输入、输出等是否符合预期,和其他模块的交互是否OK

3)测试重点不同

功能测试:重点在用户界面及功能

接口测试:重点在业务逻辑

4)测试工具不同

功能测试:主要是人工直接操作用户界面

接口测试:需要使用接口测试工具,例如postman,jmeter等,更多是实现基于代码的测试套件

5)测试扩展不同

功能测试:用户界面变化比较频繁,可做充分的探索性测试

接口测试:接口相对稳定,有利于实现自动化,来保证业务逻辑。例如用户界面的重构,如果接口不变,则用户界面可以随意更改,同时用实现的接口自动化来保证业务逻辑。但“自动化”本身不会扩展,其无法替代手工测试的探索性测试。

4.1 单个接口的测试

通过上面几小节内容,我们已经了解到,接口是软件系统不同模块之间衔接的约定。因此接口测试是比较规范的,通常就是三个标准的步骤:

  1. 准备测试数据
  2. 发起请求
  3. 验证响应结果

接口测试时需要关注的点有:

  1. URL地址:具体的接口url
  2. 请求方法:GET、POST、PUT、DELETE等
  3. 请求头域(Header):发送申请时携带的头部信息。通常一些鉴权的信息:authentication/cookie、响应的数据格式:content-type等等的设置。当然响应的数据也会返回一些头部信息。
  4. 请求参数(Parameter):GET是以键值对的形式,POST的参数在body体里
  5. 响应内容(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中交叉覆盖(正交实验法)

五. 常见面试题

  1. 项目中使用的是什么协议的接口?
  2. 提示:一般有HTTP、HTTPS、RPC等。然后会结合回答继续问~
  3. HTTP接口有哪些请求方法?
  4. 提示:常用的GET、POST、PUT、DELETE等
  5. HTTP接口的返回码
  6. 提示:2xx、3xx、4xx、5xx
  7. 接口测试有哪些好处?
  8. 接口测试是如何做的?
  9. 提示:从流程和设计上回到
  10. 有哪些常用请求头,请求头是做什么的?
  11. cookie和session的区别,UA等
  12. 如何区分前后端bug?

六. 思考和总结

接口测试在测试工程师的工作中比重越来越大,因此也是专业TE的必备技能。

本文简单介绍了接口测试的背景以及优点,对于设计和组织部分也是简略一提,更是没有设计工具、框架的使用。其实这部分如果要详细说,每个工具,每个框架都是个很大的话题。本文只是提供一个简单的思路,还需要每个测试人多思考多总结。

如果有机会,我会慢慢总结并分享~Fighting! 与各位共勉!

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:【文末领取】


     【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图+全套资料】


一、Python编程入门到精通

二、接口自动化项目实战

三、Web自动化项目实战


四、App自动化项目实战

五、一线大厂简历


六、测试开发DevOps体系

七、常用自动化测试工具


八、JMeter性能测试

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到! 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/884661.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四张图片道清AI大模型的发展史(1943-2023)

四张图片道清AI大模型的发展史(1943-2023) 现在最火的莫过于GPT了,也就是大规模语言模型(LLM)。“LLM” 是 “Large Language Model”(大语言模型)的简称,通常用来指代具有巨大规模参数和复杂架构的自然语言处理模型,…

NuGet控制台命令初步使用

查看所有安装的包, 查找包,提示Nuget版本低;安装一个更高版本; 查看所有安装的包, 查找名字包含某字符串的包, 查找名字包含某字符串的包, 安装,使用-version指定版本,可…

AUTOSAR规范与ECU软件开发(实践篇)3.3 AUTOSAR系统解决方案介绍(下)

示例将遵循AUTOSAR方法论来进行开发, 所用的AUTOSAR解决方案如图3.6所示。 图3.6 AUTOSAR系统解决方案 首先, 使用Matlab/Simulink来实现部分软件组件级的开发, 主要包括LightRequestSWC和LightControlSWC, 并自动生成应用层软件组…

Python是什么?它有什么用途?

Python是什么? Python是一门具有优雅和简洁语法的高级编程语言。它由荷兰程序员Guido van Rossum创造并于上世纪90年代初发布。Python的设计理念强调可读性和清晰性,使得代码编写变得轻松且容易理解。这门语言以其独特的缩进方式来标记代码块&#xff0…

手撕LFU缓存

手撕LRU缓存_右大臣的博客-CSDN博客 是LRU的升级,多了一个访问次数的维度 实现 LFUCache 类: LFUCache(int capacity) - 用数据结构的容量 capacity 初始化对象int get(int key) - 如果键 key 存在于缓存中,则获取键的值,否则返…

16.3.4 【Linux】系统资源的观察

free :观察内存使用情况 系统当中有 2848MB 左右的实体内存,我的 swap 有 1GB 左右, 那我使用free -m 以 MBytes 来显示时,就会出现上面的信息。Mem 那一行显示的是实体内存的量,Swap 则是内存交换空间的量。 total 是…

Espresso测试用例运行前置配置条件

(一)【开发者选择】将USB调试/USB安装/USB调试(安全设置)开启; (否则运行测试用例时,无法安装) (二)开启【自启动】 (需要授权,否则无…

51单片机的管脚介绍

图文介绍 纯文字说明 单片机管脚相关结构及其作用如下 电源正极引脚 一般接5V电源,为单片机提供正常工作时的电压。 电源负极引脚 接地。然后才开始工作。 时钟引脚 18、19脚为时钟引脚(XTAL2、XTAL1)。单片机内部有大量的数字电路&a…

Docker部署ES服务,canal全量同步的时候内存爆炸,ES/Canal Adapter自动关闭,CPU100%

文章目录 问题解决方案1. 对ES的限制2. 对Canal-Adapter的限制 问题 使用canal-adapter全量同步(参考Canal Adapter1.1.5版本API操作服务,手动同步数据(4))的时候 小批量数据可以正常运行(几千条&#xf…

Python获取、修改主机名称和IP地址实践

Python获取、修改主机名称和IP地址的方法有多种,内置socket模块、执行系统命令、第三方模块等等,本文只是完成功能的一次成功的实践。 1. 获取、修改主机名称 本案例使用python的socket模块获取、修改主机名称,socket模块是一个用于实现网络…

对抗通胀的信心回升,美国消费者预期短期通胀降至两年多低点

KlipC报道:据纽约联储最新消费者预期调查显示美国消费者预计一年后短期通胀从3.8%下降至3.5%,创2021年4月以来新低,为连续第四个月下降。三年期和五年期的通胀预期也下降,未来几年通胀将会走弱。 与此同时他们对个人的财务状况也趋…

JDK8 Optional优雅的判空操作

一、前言 在我们编程过程中因为疏忽经常会遇到NullPointerException空指针异常,所以与此同时就避免不了对变量一层一层的进行判空。JDK8新特性所提供的Optional类,可以让我们更优雅的进行判空操作。学习其的意义就是提醒开发者注意空值情况,…

怎么自己制作动图表情包?在线gif生成的操作步骤

gif表情包在我们平时的生活里斗图的时候经常会用到,那么如何用图片制作gif(https://www.gif.cn)表情包呢?今天就分享一个在线gif生成的简单方法,利用gif制作工具将图片转gif动图,下面是详细的操作步骤。 打…

爬楼梯(一次爬1或2层)

一,题目描述 二,解题思路 动态规划 动规五部曲: 1. 确认dp数组以及下标含义 2. 推导递推公式 3. 确认dp数组如何初始化 4. 确认遍历顺序 5. 打印dp数组 dp数组含义:到第i层的方法数目 下标含义:层数 递推公式&…

2023年服贸会在哪里举行?北京有哪些媒体可以做宣传?

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 8月14日,”2023年服贸会新闻发布会在北京首钢园举行,宣布2023年服贸会将于9月2日至6日在国家会议中心和首钢园区举办,采用‘线下线上’‘综合专题’办…

跳跳!(贪心)

题目描述 你是一只小跳蛙,你特别擅长在各种地方跳来跳去。 这一天,你和朋友小 F 一起出去玩耍的时候,遇到了一堆高矮不同的石头,其中第 i 块的石头高度为 h_i,地面的高度是 h_0 0。你估计着,从第 i 块石…

eNSP:mplsvpn综合实验

要求完成下图实验&#xff1a; 拓扑信息标注&#xff1a; 命令操作&#xff1a; r1: <Huawei>sys [Huawei]sys r1 [r1]int lo0 [r1-LoopBack0]ip add 192.168.1.1 24 [r1-LoopBack0]int g 0/0/0 [r1-GigabitEthernet0/0/0]ip add 192.168.2.1 30[r1]ip route-static 19…

【BASH】回顾与知识点梳理(二十九)

【BASH】回顾与知识点梳理 二十九 二十九. 进程和工作管理29.1 什么是进程 (process)进程与程序 (process & program)子进程与父进程&#xff1a;fork and exec&#xff1a;进程呼叫的流程系统或网络服务&#xff1a;常驻在内存的进程 29.2 Linux 的多人多任务环境多人环境…

C#__委托的基本用法

// 委托A class DelegateA{// 委托&#xff0c;一个类型&#xff0c;可以赋值一个方法的引用// 定义delegate void Tool(int x);delegate long ToolLong(long x, long y);delegate string GetString();public void Delegate(){// 赋值Tool tool null;ToolLong toollong null…

clickhouse 集群搭建

目录 一、 首先要安装单节点集群 二、安装zookeeper并搭建集群 1. 配置host 2. 安装zookeeper 3. 配置zookeeper 三、clickhouse 集群配置 1.配置metrika.xml文件 2. 修改clickhouse的配置文件 一、 首先要安装单节点集群 在这里就不太赘述。官网下载安装包&#xff0…