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

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

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

一. 什么是接口测试?

软件接口,是指软件不同模块之间交互的接口,我们通常所说的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! 与各位共勉!

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

在这里插入图片描述

软件测试面试小程序

被百万人刷爆的软件测试题库!!!谁用谁知道!!!全网最全面试刷题小程序,手机就可以刷题,地铁上公交上,卷起来!

涵盖以下这些面试题板块:

1、软件测试基础理论 ,2、web,app,接口功能测试 ,3、网络 ,4、数据库 ,5、linux

6、web,app,接口自动化 ,7、性能测试 ,8、编程基础,9、hr面试题 ,10、开放性测试题,11、安全测试,12、计算机基础

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你! 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

软件架构设计(三) B/S架构风格-层次架构(一)

层次架构风格从之前的两层C/S到三层C/S,然后演化为三层B/S架构,三层B/S架构之后仍然在往后面演化,我们来看一下层次架构演化过程中都有了哪些演化的架构风格呢? 而我们先简单了解一下之前的层次架构风格中分层的各个层次的作用。 表现层:由于用户进行交互,比如MVC,MVP,…

医院小程序如何在线搭建?实战解析

在当今数字化时代,移动应用程序成为我们生活中必不可少的一部分。特别是在医疗领域,移动应用程序的需求更为迫切。为了满足这一需求,开发一个医疗小程序成为了许多医疗机构的优先选择。 在本文中,我们将分享一个实战攻略&#xff…

大数据可视化大屏实战项目(3)图书销售展示全国地图可视化---HTML+CSS+JS【源码在文末】(可用于比赛项目或者作业参考中)

大数据可视化大屏实战项目(3)图书销售展示全国地图可视化---HTMLCSSJS【源码在文末】(可用于比赛项目或者作业参考中🐕🐕🐕) 一,项目概览 ☞☞☞☞☞☞项目演示链接:http…

实力认证!OceanBase获“鼎信杯”优秀技术支撑奖

6 月 30 日,2023 “鼎信杯”信息技术发展论坛在京隆重举办第二届“鼎信杯”大赛颁奖典礼。OceanBase 凭借完全自主研发的原生分布式数据库,以及丰富的核心系统国产数据库升级案例,斩获“优秀技术支撑奖”。 论坛上,国内首个基于在…

打车系统网约车系统开发支持APP公众号H5小程序版本源码

一、操作流程 二、业务模式 三、用户端 用户注册登录:未注册的手机号将自动创建账号 通过好友的邀请链接进行注册,将会绑定上下级关系 也可以注册的时候输入好友的邀请码,也可以绑定关系 用户充值: 用户下单支付时,可以…

【大数据】数据湖:下一代大数据的发展趋势

数据湖:下一代大数据的发展趋势 1.数据湖技术产生的背景1.1 离线大数据平台(第一代)1.2 Lambda 架构1.3 Lambda 架构的痛点1.4 Kappa 架构1.5 Kappa 架构的痛点1.6 大数据架构痛点总结1.7 实时数仓建设需求 2.数据湖助力于解决数据仓库痛点问…

《Flink学习笔记》——第十一章 Flink Table API和 Flink SQL

Table API和SQL是最上层的API,在Flink中这两种API被集成在一起,SQL执行的对象也是Flink中的表(Table),所以我们一般会认为它们是一体的。Flink是批流统一的处理框架,无论是批处理(DataSet API&a…

基于RabbitMQ的模拟消息队列之三——硬盘数据管理

文章目录 一、数据库管理1.设计数据库2.添加sqlite依赖3.配置application.properties文件4.创建接口MetaMapper5.创建MetaMapper.xml文件6.数据库操作7.封装数据库操作 二、文件管理1.消息持久化2.消息文件格式3.序列化/反序列化4.创建文件管理类MessageFileManager5.垃圾回收 …

钡铼R40边缘计算网关与华为云合作,促进物联网传感器数据共享与应用

场景说明 微型气象是不可预测的,基本上不能通过人工手段来分析其变化,因此必须运用新技术,对气象进行实时监测,以便采取相应的措施来避免或解决事故的发生。而常规气象环境数据采集容易造成数据损失、人力成本高、数据安全性差、…

基础算法-递推算法-学习

现象: 基础算法-递推算法-学习 方法: 这就是一种递推的算法思想。递推思想的核心就是从已知条件出发,逐步推算出问题的解 最常见案例: 一:正向递推案例: 弹力球回弹问题: * 弹力球从100米高…

Axes3D绘制3d图不出图解决办法【Python】

运行下面一段代码​: import numpy as npimport matplotlib.pyplot as pltfrom mpl_toolkits.mplot3d import Axes3D#这里设函数为y3x2x_data [1.0,2.0,3.0]y_data [5.0,8.0,11.0]​def forward(x): return x * w b​def loss(x,y): y_pred forward(x) …

螺旋矩阵、旋转矩阵、矩阵Z字打印

螺旋矩阵 #include <iostream> #include <vector> void display(std::vector<std::vector<int>>&nums){for(int i 0; i < nums.size(); i){for(int j 0; j < nums[0].size(); j){std::cout<<nums[i][j]<< ;}std::cout<<…

VueRouter的基本使用

路由的基本使用 文章目录 路由的基本使用01-VueRouterVueRouter的使用 &#xff08; 5 2&#xff09;综合代码 拓展&#xff1a;组件存放问题 什么是路由呢&#xff1f; 在生活中的路由&#xff1a;设备和IP的映射关系 在Vue中&#xff1a;路径 和 组件 的 映射 关系。 01-Vu…

淘宝API接口解析,实现获得淘宝商品快递费用

要获取淘宝商品快递费用&#xff0c;需要使用淘宝的开放平台API接口。以下是一个基本的示例&#xff0c;解析并实现获取淘宝商品快递费用的API接口。 首先&#xff0c;你需要访问淘宝开放平台并注册一个开发者账号。注册完成后&#xff0c;你需要创建一个应用并获取到API的权限…

OpenCV实战(31)——基于级联Haar特征的目标检测

OpenCV实战&#xff08;31&#xff09;——基于级联Haar特征的目标检测 0. 前言1. Haar 特征图像表示2. 基于级联 Haar 特征的二分类分类器3. 级联分类器算法流程4. 使用 Haar 级联检测器进行人脸检测5. 完整代码小结系列链接 0. 前言 在机器学习基础一节中&#xff0c;我们介…

Unity UI与粒子 层级问题Camera depth Sorting Layer Order in Layer RenderQueue

Unity游戏开发中&#xff0c;模型、界面、特效等&#xff0c;需要规划好layer的概念&#xff0c;涉及到摄像机&#xff08;Camera&#xff09;、画布&#xff08;Canvas&#xff09;、Shader等相关内容。 在 Unity 中&#xff0c;渲染顺序是由多个因素共同决定的&#xff0c;大…

【广州华锐互动】数字孪生智慧楼宇3D可视化系统:掌握实时运行状态,优化运营管理

在过去的几年中&#xff0c;科技的发展极大地改变了我们的生活和工作方式。其中&#xff0c;三维数据可视化技术的出现&#xff0c;为我们提供了全新的理解和观察世界的方式。特别是在建筑行业&#xff0c;数字孪生智慧楼宇3D可视化系统的出现&#xff0c;让我们有机会重新定义…

Spring的重试机制-SpringRetry

在我们的日常开发中&#xff0c;经查会遇到调用接口失败的情况&#xff0c;这时候就需要通过一些方法来进行重试&#xff0c;比如通过while循环手动重复调用或&#xff0c;或者通过记录错误接口url和参数到数据库&#xff0c;然后手动调用接口&#xff0c;或者通过JDK/CGLib动态…

分享一些用的上的商务英语

前些天美元汇率有时候去到7.3左右&#xff0c;当时跟一个朋友聊天&#xff0c;是时候去问候一下那些报价的时候汇率在六点多没下单的客户了&#xff0c;也许可以通过汇率变动这个理由给他稍微降点价格把订单拿下。 我们做报价的时候&#xff0c;可以标注固定的汇率&#xff0c…

[dasctf]misc1

不确定何种加密方式 P7NhnTtPUm/L3rmkP/eAhx5Vnbc2YyatkXCePJ0Wh2NYfqXGZCpZdCesMmEAihhUYI1PjoLq6FedZ7MSclA9h0/Dy4CavBwVg5RHr8XJmfbtuWkxK2Gn3sNTEzQi0p 1t_15_s3cR3t_k3y 也许是密钥