【软件测试】接口测试实战详解
最近找到了几个问题,都还比较有代表性。
- 作为一个初级测试,想学接口测试,但是一点头绪都没有。求教大神指点,有没有好的书或者工具推荐?
- 如何做接口测试呢?接口测试有哪些工具
- 做接口测试的流程一般是怎么样的?
在我刚入门测试的时候,也是对接口测试一头雾水,而且当时市面上很少有讲得好的资料,自学的过程中也走了不少弯路。于是决定用一篇文章来给大家讲讲接口测试。
全文5700字,都是我的实战工作经验汇总,多图预警,如果对你有帮助的话请点个赞!
接口测试最常见的误区
前段时间,有个朋友跳槽去了一家公司做服务端的测试开发工程师,月薪涨了50%
我第一时间向他送去了诚挚的祝福,同时询问了他去到新公司的工作情况。
他和我说,他目前主要负责一个电商平台的接口测试工作以及开始着手去搭建一个接口自动化测试平台。
因为该同事以前是做移动端的测试的,从来没有听说过,他有做接口测试的经验。于是我出于好奇,就问了一下:他目前是如何去进行接口测试的。
他对这个问题可能没有做出充足的准备,也有可能他因为之前没有接口测试的相关经验,他给到我的回答,其实和网上随便搜出来的答案差不多:
- 通过 Postman / Jmeter / 代码调用 等测试工具,来模拟网络请求。
- 校验接口传参是否合理(少传 / 漏传 / 多传 / 边界值 / 参数类型校验等等)。
- 测试响应结果是否会返回约定的数据格式,有没有字段没有下发或下发不正确。
- 验证接口是否有安全性问题,是否鉴权。
对于这个回答,我并不感到意外,网上大多数的回复也都是这么说的。
但是对于一个纯服务端的测试而言,仅仅是调调参数,真的就能完成接口测试了么?
NO,这只是接口测试的冰山一角,接口测试远没有你想象中的那么简单!
那么,接口测试主要需要测试哪些方面呢?
按照惯例,先上老(nao)图:
接下来,我将用一次深度的接口测试实战,来分享一下,我是如何去做接口测试的。
在这我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看,或者直接关注VX公众号:互联网杂货铺,免费领取
软件测试视频教程观看处:
自动化测试篇—实战案例:自动化及接口自动化本质及适用场景
接口测试的10个实战步骤
接下来我们以电商平台的搜索接口来做案例,一步步给大家讲解接口测试的步骤。
「第一步:梳理上下游调用链」
1)为什么要梳理上下游调用链?
目前互联网产品的后端服务,基本上都是分布式部署的,一个接口可能会调用其他接口,也有可能被其他接口调用,接口与接口之间,具有千丝万缕的依赖关系。
如果我们的把自己负责的接口纯粹地当成黑盒去测试,不可谓知己;
如果我们只熟悉自己的接口,不清楚与其他接口的依赖关系,不可谓知彼;
所谓知己知彼,方能百战不殆。
所以,梳理上下游调用链是首先要做的工作。
我们在测试的时候,很可能只会片面的去关注搜索网关开放给前端调用的接口,
但只要把整个调用链路和流程图画出来,我们会发现其实搜索网关依赖好多的服务。
比如:
搜索网关需要调用价签系统,去获取商品促销价格;
搜索网关需要调用推荐系统,去获取搜索场景下的推荐的商品;
搜索网关需要去调用商品系统,去获取实时的商品信息;
搜索网关需要去调用搜索服务,去ES召回商品、获取搜索排序信息等等。
前端在搜索框搜索一个关键词,对搜索网关发起一个HTTP请求,背后其实经过了很多道工序去处理这个请求。
如果只是单独的调调参数,就希望把接口测试做好,显然是不可能的。(开发自己都能调(tiao)接口参数,还要测试做什么?)
接口背后的业务逻辑是否正确处理、后端依赖的服务是否健壮、接口性能是否达标。
2)怎么梳理上下游调用链?
1、看项目wiki、产品文档和开发文档。
2、看开发写的代码,阅读代码,当然是首选:JetBrains全家桶啦(Java用IDEA;Python用Pycharm)
3、梳理出上下游调用关系后,手绘一份系统流程图,如果还有不明确的地方,可以找PM、开发沟通确认。
「第二步:编写接口测试用例」
接口测试用例和平常的测试用例差不多,没有太多的要求限制。因为测试工作中很多时候不是专门测接口的,所以这个步骤不一定要做。
但是你心里要清楚你要测的点,如果你是第一次做接口测试,我还是建议自己去写一份接口测试用例,并且好好归档。
如果说要做接口自动化,接口测试用例也是很有帮助的。
这里给出一个接口测试用例的案例:
「第三步:测试接口文档&调试接口」
接口文档在软件项目开发过程中非常重要,接口文档是连接前端开发和后端开发的一座桥梁。
在项目开发之初,前端开发和后端开发会共同去约定一套接口规范,然后由后端开发去编写接口文档,然后前后端就可以按照约定去进行协同开发。
接口文档的管理和编辑有多种方式:
有的团队习惯用wiki或者在线文档去编写接口文档;
有的团队喜欢用专业的接口文档工具,比如:Swagger、Yapi等去生成接口文档。
我们公司习惯于用丝袜哥(swagger)去维护接口文档。
swagger 对多种编程语言/框架 都提供了良好的接入方案。就拿Java来说,只需要引入相应的jar包,在接口上添加相应的api文档注解,就可以自动生成网页版的接口文档。
并且还可以通过接口文档去对接口进行调试,大大提高了开发效率。
但不管是以何种方式去管理和维护接口文档,接口文档都是必须要有
测试接口文档可以参考以下测试点:
- 确保开发必须提供接口文档。如果开发没有写接口文档的习惯,应push开发去写接口文档。
- 检查接口文档的格式内容等是否完备,包括:URL、请求方法、Header、入参、返回值、示例Demo等。
- 检查接口设计是否符合公司规范。包括接口命名、接口格式、字段命名、字段类型、响应状态码、接口容错、字段是否冗余、接口是否鉴权、是否做版本区分等等。
「第四步:前端接口测试&Mock数据(接口层面的测试)」
前面的步骤只是利用测试工具去发起网络请求,来模拟接口调用。
但在真实的场景下,搜索网关的接口实际上是提供给 APP/WEB/小程序 进行调用的。
我们同样也需要关注前端调用过程是否是正常的。(需要等待前端开发完毕,才能介入测试)
可以利用Charles来对前端发送的请求进行抓包,
- 验证前端调用接口的传参是否正确;
- 验证后端的接口响应是否符合预期;
- 前端拿到数据之后,交互和UI展示是否正确。
当有些数据有多种状态,并且数据比较难以构造时,我们可以通过Mock数据去进行测试。
常见的Mock数据的方式有:
- 用 Fiddler 或者 Charles 去篡改请求和响应。
- 如果是PHP或者Python等动态语言,可以直接在后端代码里面去更改条件。
- 数据库中去修改数据。
- 用专业的Mock工具去构造数据,如:EasyMock、TestableMock、Mockjs等。
比较快速的方式,当然是直接用Charles去模拟。
如果说只是改少量的响应数据,比如说:改变一个标签下发的文案,看看前端的展示。这种情形就非常适合用 Charles 去模拟数据。
但是 Charles 模拟也有一个弊病,那就是假如遇到接口下发的数据结构比较复杂,涉及到多个字段的变更,用 Charles 去 Mock 数据就比较麻烦。
「第五步:后端接口测试&业务逻辑覆盖(看日志、看代码)」
看日志
业务测试过程中,我们需要时刻关注后端日志状态。
有时候接口响应数据是正常的,但是后端日志可能正在报错,
比如:
搜索结果页返回空数组是常见现象,一般代表搜索关键词没有召回任何商品。
但是我有一次测试过程中,发现同一个关键词,在同样的条件下,有时召回0个商品,有时召回多个商品。
一开始觉得很蹊跷,后来一查看后端日志,才发现召回商品的时候超时了。
看代码
推荐大家在做接口测试的时候,一定要去阅读开发的源码。
阅读源码可以对业务逻辑实现了解更加深入。
另外,有些条件,在手工测试中很难模拟出来,但是通过阅读源码,甚至单元测试,就能够轻松的模拟出来。
阅读源码还有个好处就是,对开发起到一个约束作用,因为代码是公开的,如果从代码层面发现很多Bug的话,开发的面子也过不去。
关于阅读源码,我们可以把代码拉到本地,用IDEA等工具去查看源码
如果代码量很大怎么办?
告诉大家一个小诀窍:当开发提交代码之后,我们可以在Gitlab上看他的Commit记录,或者将他的开发分支和生产环境的分支做个diff,这样就能知道他改了哪些地方。
这里再给大家看一个真实工作中的案例:
排查过程:
(1)先在APP上尝试复现
(2)抓包看接口返回响应时间,一次请求居然花费了3.69s
(3)通过Arthas的trace逐步去排查接口响应慢的原因:
进入Arthas命令行
java -jar arthas-boot.jar
trace 接口调用的方法
trace 类名 方法名
最后发现可能是调用价格标签的时候很慢。
后来终于找到了原因:
调用依赖的服务的某个方法在测试环境中已经不维护了,但是代码存在bug,还会继续调用,导致调用超时。
经过优化后,搜索网关响应速度从 3s 缩短到 300ms 左右。
「第七步:接口异常机制(Chaosblade)」
因为接口依赖的服务很多,经常需要调用其他接口。假如依赖的服务出现了异常,我们就需要考虑我们的接口是不是做了容错处理,或者是降级处理。
可以用Chaosblade去注入异常。(非必须,但有更好)
Chaosblade是阿里开源的混沌工程工具,感兴趣的可以去了解下:https://chaosblade.io/docs
「第八步:接口版本控制&diffy」
因为接口依赖的服务很多,经常需要调用其
一般接口都会区分版本,如果接口不是很规范,或者改了一些通用的逻辑,这个时候就需要对老版本进行一次回归测试。
最笨的方法就是拿新老版本的两个app对比测试。我们也可以用diffy这个工具来做回归测试。
「第九步:开始做接口自动化」
接口自动化一般常用于进行线上巡检回归、提测冒烟测试等场景。
实现接口自动化,常见有几种方式:
(1)coding:
python+pytest+requests,公司目前采用这种方式去做。
(小而美,方便定制化)
pytest生成的测试报告:
(2)postman+newman
(利用工具,效率最高,但是不太方便定制化)
(3)流量录制与回放
(低代码实现,但是实现成本颇高)
常用的流量录制与回放工具:gor
写在最后
PS:这里分享一套软件测试的自学教程合集。对于在测试行业发展的小伙伴们来说应该会很有帮助。除了基础入门的资源,博主也收集不少进阶自动化的资源,从理论到实战,知行合一才能真正的掌握。全套内容已经打包到网盘,内容总量接近500个G。如需要软件测试学习资料,关注公众号(互联网杂货铺),后台回复1,整理不易,给个关注点个赞吧,谢谢各位大佬!
这些资料,对于做【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!凡事要趁早,特别是技术行业,一定要提升技术功底。
相关文章:

【软件测试】接口测试实战详解
最近找到了几个问题,都还比较有代表性。 作为一个初级测试,想学接口测试,但是一点头绪都没有。求教大神指点,有没有好的书或者工具推荐?如何做接口测试呢?接口测试有哪些工具做接口测试的流程一般是怎么样…...

轻量封装WebGPU渲染系统示例<20>- 美化一下元胞自动机之生命游戏(源码)
当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/rendering/src/voxgpu/sample/GameOfLifePretty.ts 系统特性: 1. 用户态与系统态隔离。 2. 高频调用与低频调用隔离。 3. 面向用户的易用性封装。 4. 渲染数据(内外部相关资源)和渲染机制分离…...

Nodejs的安装以及配置(node-v12.16.1-x64.msi)
Nodejs的安装以及配置 1、安装 node-v12.16.1-x64.msi点击安装,注意以下步骤 本文设置nodejs的安装的路径:D:\soft\nodejs 继续点击next,选中Add to PATH ,旁边的英文告诉我们会把 环境变量 给我们配置好 当然也可以只选择 Nod…...

03【保姆级】-GO语言变量和数据类型和相互转换
03【保姆级】-GO语言变量和数据类型 一、变量1.1 变量的定义:1.2 变量的声明、初始化、赋值1.3 变量使用的注意事项 插播-关于fmt.Printf格式打印%的作用二、 变量的数据类型2.1整数的基本类型2.1.1 有符号类型 int8/16/32/642.1.2 无符号类型 int8/16/32/642.1.3 整…...

mermaid学习第一天/更改主题颜色和边框颜色/《需求解释流程图》
mermaid 在线官网: https://mermaid-js.github.io/ 在线学习文件: https://mermaid.js.org/syntax/quadrantChart.html 1、今天主要是想做需求解释的流程图,又不想自己画,就用了,框框不能直接进行全局配置࿰…...

SAP MASS增加PR字段-删除标识
MASS->BUS2105->发现没有找到PR删除标识字段 SAP MASS增加PR字段-删除标识 1.tcode:MASSOBJ 选中BUS2105 点“应用程序表” 点“字段列表” 2.选中一行进行参考 3.修改字段为删除标识 LOEKZ,保存即可。 4.然后MASS操作,批量设置删除标识&…...

【手把手教你】训练YOLOv8分割模型
1.下载文件 在github上下载YOLOV8模型的文件,搜索yolov8,star最多这个就是 2. 准备环境 环境要求python>3.8,PyTorch>1.8,自行安装ptyorch环境即可 2. 制作数据集 制作数据集,需要使用labelme这个包&#…...

物料主数据增强屏幕绘制器DUMP
问题描述 在做完物料主数据增强后,配置和代码传Q,在Q进入增强屏幕绘制器报错。 错误 CALLBACK_REJECTED_BY_WHITELIST RFC callback call rejected by positive list An RFC callback has been prevented due to no corresponding positive list en…...

vue 实现在线预览Excel-LuckyExcel/LuckySheet实现方案
一、准备工作 1. npm安装 luckyexcel npm i -D luckyexcel 2.引入luckysheet 注意:引入luckysheet,只能通过CDN或者直接引入静态资源的形式,不能npm install。 个人建议直接下载资源引入。我给你们提供一个下载资源的地址: …...

AIGPT重大升级,界面重新设计,功能更加饱满,用户体验升级
AIGPT AIGPT是一款功能强大的人工智能技术处理软件,不但拥有其他模型处理文本认知的能力还有AI绘画模型、拥有自身的插件库。 我们都知道使用ChatGPT是需要账号以及使用魔法的,实现其中的某一项对我们一般的初学者来说都是一次巨大的挑战,但…...

Web逆向-mtgsig1.2简单分析
{"a1": "1.2", # 加密版本"a2": new Date().valueOf() - serverTimeDiff, # 加密过程中用到的时间戳. 这次服主变坏了, 时间戳需要减去一个 serverTimeDiff(见a3) ! "a3": "这是把xxx信息加密后提交给服务器, 服主…...

【蓝桥杯省赛真题41】Scratch电脑开关机 蓝桥杯少儿编程scratch图形化编程 蓝桥杯省赛真题讲解
目录 scratch电脑开关机 一、题目要求 编程实现 二、案例分析 1、角色分析...

第10章 Java常用类
目录 内容说明 章节内容 一、Object类 二、String类和StringBuffer类 三、Math类和Random类...

Android 11 getPackageManager().getPackageInfo 返回null
Android11 之后, 在查找用户手机是否有安装app,进行查询包名是否存在时,getPackageManager().getPackageInfo()这个函数一直返回null ,Android 11增加了权限要求。 1、只是查询指定的App 包 只需要在Andro…...

4、数据结构
数据结构01 数值处理 取整 日常用的四种 / 整数除法,截取整数部分math.Ceil 向上取整 “理解为天花板,向上取值”math.Floor 向下取整 “理解为地板,向下取值”math.Round 四舍五入 / 整数除法,截取整数部分 func main() { f…...

qt5.15.2+vs2019源码调试开发环境搭建
说明 一些qt文件不进行源码调试无法知道其中的原理。提高软件质量,从概念原理及应用角度看待必须知道qt类运行原理。 1.安装 在网上找到qt安装包qt-unified-windows-x64-4.5.1-online.exe,安装qt5.15.2,有选择Qt Debug Information Files …...

【数据结构】单链表之--无头单向非循环链表
前言:前面我们学习了动态顺序表并且模拟了它的实现,今天我们来进一步学习,来学习单链表!一起加油各位,后面的路只会越来越难走需要我们一步一个脚印! 💖 博主CSDN主页:卫卫卫的个人主页 &#x…...

网络中使用最多的图片格式有哪些
互联网中的图片格式五花八门吧,我常常分不清各种格式的使用场景和区别,有些常见的格式和很少见的,在此总结。 常见格式 常见的图片格式,有 JPEG、PNG、GIF、BMP、WebP、SVG、TIFF、ICO等, 少见的比如:HD…...

个人常用Linux命令
来自 linux命令学习-2023-8-1 153913.md等 1、切换目录 cd //切换目录 cd change directory cd 目录名 cd .. 返回上一级目录 pwd显示当前所处目录cd 绝对路径 cd ~ 表示一个用户的home目录 cd - 表示上一次访问的目录 cd / 表示进入根目录下//新建目录/data,并且进入/data…...

数据结构——常见简答题汇总
目录 1、绪论 2、线性表 3、栈、队列和数组 4、串 5、树与二叉树 6、图 7、查找 8、排序 1、绪论 什么是数据结构? 数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括三个方面:逻辑结构、存储结构、数据的运算。 逻辑结…...

josef约瑟低电压继电器 DY-110 10-109V 辅助电源·DC110V 嵌入式面板安装
DY-110/110V电压继电器 系列型号 DY-110电压继电器;GY-110电压继电器; GDY-110电压继电器;DY-110/AC电压继电器; GY-110/AC电压继电器;GDY-110/AC电压继电器; DL-110电压继电器;GL-110电压…...

Visual Studio Code将中文写入变量时,中文老是乱码问题
对于这个问题,我也是弄了很久才知道,编码格式的问题 在此之前我们要先下载个插件 照这以上步骤,最后按F6运行即可,按F6是利用我们刚刚下载的插件进行编译,唯一有一点不好就是,用这种插件运行的话ÿ…...

各省市30米分辨率DEM数据,推荐下载!
今天给大家推荐一个新数据 —— 各省市30米分辨率DEM数据! 各省市30米分辨率DEM数据广泛应用于国土资源调查、水利水电工程、地质灾害预警、城市规划等领域,对于了解区域内的地形地貌、地形分析、土地利用等具有非常重要的意义。 网站搜索“citybox城市…...

操作系统引论(一)
操作系统的地位和目标 计算机系统的组成 系统软件是和硬件相关的,这是它本质的特征。 操作系统在计算机系统中的地位 操作系统的设计目标 可扩充性是面向未来的。 操作系统的作用 1)用户与计算机硬件系统之间的接口 2)计算机系统资源的管…...

2023-11-7 OpenAI 45 分钟发布会:整理发布了哪些内容更新
本心、输入输出、结果 文章目录 2023-11-7 OpenAI 45 分钟发布会:整理发布了哪些内容更新前言发布 GPT-4 Turbo价格问题 推出 OpenAI 推出了「GPTs」六大升级上下文长度升级API 和函数调用控制手段增强模型内部和外部知识库的升级多模态模型微调与定制更高的使用频率…...

索引和事务
文章目录 一、索引1.1 概念1.2 作用1.3 使用场景1.4 使用 二、事务2.1 为什么要使用事务2.2 事务的概念2.3 事务的使用 三、内容重点总结 一、索引 1.1 概念 索引是一种特殊的文件,包含对数据表所有记录的引用指针。在MySQL中,索引是基于一个或多个列的…...

全场景数实融合聚焦北京——2023(第六届)行业信息技术应用创新大会隆重召开
2023年11月3日,2023(第六届)行业信息技术应用创新大会在北京裕龙国际酒店隆重举行。中国当前正处于经济转型的关键时期,数字经济的发展对中国新经济和新格局的形成至关重要,而信息技术是数字经济发展过程中必不可少的技术铺垫,企业对信息技术的应用非常依赖业务场景。因此,本届…...

深入理解强化学习——多臂赌博机:乐观初始值
分类目录:《深入理解强化学习》总目录 目前为止我们讨论的所有方法都在一定程度上依赖于初始动作值 Q 1 ( a ) Q_1(a) Q1(a)的选择。从统计学角度来说,这些方法(由于初始估计值)是有偏的。对于采样平均法来说,当所有…...

[黑马程序员Pandas教程]——DataFrame数据的增删改操作
目录: 学习目标DataFrame添加列 直接赋值添加列数据删除与去重 删除 df.drop删除行数据df.drop删除列数据数据去重 Dataframe去重Seriers去重修改DataFrame中的数据 直接修改数据replace函数替换数据按条件使用布尔值修改数据执行自定义函数修改数据 Series.apply(…...

【服务器】Java连接redis及使用Java操作redis、使用场景
一、Java连接redis-No-SQL 1、导入依赖 在你的项目里面导入redis的pom依赖 <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>2.9.0</version> </dependency> 2、连接redis 连接redis …...