当前位置: 首页 > news >正文

全网最全的接口自动化测试教程

为什么要做接口自动化

相对于UI自动化而言,接口自动化具有更大的价值。

为了优化转化路径或者提升用户体验,APP/web界面的按钮控件和布局几乎每个版本都会发生一次变化,导致自动化的代码频繁变更,没有起到减少工作量的效果。

而接口一旦研发完成,后期重构/大幅度修改的频率则比较低.因而做接口自动化性价比还是很高的,对于迭代版本旧有功能的回归,beta测试,线上回归都能起到事半功倍的作用。

本文不详细谈单个接口的测试,我们来主要来分析一下基于业务场景的接口自动化怎么做。

问题在哪里

一个业务场景通常需要多个接口才能走完一个完整的业务流程,其中每个接口完成一个特定的功能步骤。例如微信的添加好友流程:

每个操作步骤里都至少有一条接口请求。那么我们把这个流程以接口请求的方式表现出来,如下:

仅作示意,并非实际

仅作示意,并非实际

我们想要完成这条接口用例,需要的操作有哪些?

1)输入微信id,发出查询请求
2)将获取到的用户信息传递给“添加好友接口”,发起添加好友请求
3)将申请好友的用户信息传给下发好友申请接口
4)将同意信息传给成为好友消息接口
5)将拒绝信息传给拒绝消息接口
概括起来有几个需要解决的问题:测试数据传入,接口依赖,接口间参数传递。这也是接口测试自动化中会遇到的普遍问题,解决方案可以迁移到各类业务中去。接下来笔者将针对上述问题提出一些具体的解决方案

工具介绍本文所用接口测试工具: Apifox Windows
Postman作为接口测试工具,在业界的地位毋庸置疑,但Apifox作为一款本土的接口调试、接口测试&测试管理软件,优势在于符合国内互联网的测试模式和工作流程,用起来更顺手些。
大部分功能均能由可视化界面+控件操作完成,对于不懂代码、不会写脚本的测试人员,基本也可以无痛顺利地完成接口自动化的任务。
因此本文讲解自动化的时候会直接使用Apifox,大家如果需要跟着文章讲解学习的,可以先去官网(www.apifox.cn )下载注册一个,软件免费。

全靠参数化

手工测试的优点在于灵活可控,自动化则依赖我们预先设置好的步骤完成功能

接口间参数传递

像上述微信好友请求的例子,涉及到多个接口间的参数传递,下一个接口对依赖于上一个接口响应中的某个字段,需要将它能准确提取并传递过来。

解决方案:提取上一个接口响应数据--参数化--下一个接口调用该参数。
这样无论接口运行多少次,传递的参数怎么变化,下个接口都能动态提取并调用。
Apifox上操作步骤如下:
1) 在要提取参数的接口的后置步骤里,使用json path表达式提取目标响应字段并命名,设置变量类型

2)该字段会保存到项目设置中,同一环境,同一项目里的其他接口具有调用权限。 运行一下上图中的接口,可以看到该字段已经被提取到变量设置中了。

3)在需要调用该变量作为参数的接口请求参数里,以参数形式填入到对应空格中

看一下结果:发送该post请求,在接口>运行>实际请求tab>请求URL中可以看到,该参数已被成功调用

测试数据参数化

  1. 使用变量某些测试数据(如登陆账号密码,用户信息等)会在不同的接口被反复调用,这个时候可以将该测试数据参数化,与接口响应参数不同的是,响应参数是获取自上一个接口的,而测试参数是我们直接写进变量设置里的。

    在Apifox里的操作步骤如下:

    1)在全局变量中设置好测试数据变量名和值

    2) 直接在接口请求参数中调用该测试数据

  2. 使用测试数据集当我们需要上传不同的测试数据以校验响应返回数据是否存在异常时,一个接口参数需要多个测试数据。这个我们放到后面测试管理的部分谈。

测试断言

既然是自动化测试,我们无法一一人工去校验返回的response是否符合我们的要求,因此需要用脚本/功能设置替人力完成这些工作。 我们主要校验:
1)接口请求是否成功,即返回的code是否符合预期
2)返回的接口数据里的关键字段、关键值是否符合预期

Apifox上,可以直接通过界面操作设置基本的断言操作:

  1. 在接口管理-后置操作 里选择断言

  2. 请求发出之后,如果返回值符合预期,则在返回处会提示断言成功,失败则给予错误提示。

如果需要灵活设置断言,可以使用apifox里的后置操作中的自定义脚本功能,它也提供了代码模板功能,测试人员只需修改期待值即可。

对于单个接口,自动化的预备工作即将输入数据和接口间的参数传递都参数化、不要写死,方面后期数据修改和维护,以及使用测试断言来代替人工检查接口测试结果。

完成了这部分工作之后,我们接下来就可以把不同的接口组织到一条接口自动化用例里,完成一个业务场景的测试。

接下来的工作我们在Apifox测试管理tab完成。

测试管理

导入测试用例

接口用例需要在测试单个接口的时候生成,这是在导入测试用例之前需要完成的准备工作。在单个接口测试的时候选择保存为用例即可生成测试用例。

测试管理tab,新建测试用例>导入接口用例>选择该测试场景所需用例>默认选择绑定>确定导入

导入完毕后的用例如下,一个接口请求就是一个操作步骤,若干个步骤共同完成一个场景的测试。

接口执行顺序

在上述用例中,接口请求的步骤是从上而下的,如果想要调整接口的运行顺序,直接拖动接口到目标位置即可。 如果需要增加其他接口请求,则选择添加步骤

使用测试数据集

上文测试数据参数化那一节有提到过一个接口需要多条测试数据的事情,拿到这里讲主要是功能模块刚好在这边,方便些。 在测试管理>用例的右侧,可以看到测试数据这个功能

点击管理数据,可以进入测试数据tab管理添加外部测试数据。

接着在测试步骤>设置 页面,将测试数据修改为测试数据集的变量名称

点击下方的运行按钮时,会弹出界面让测试人员选择要用的测试数据集,每个测试数据集都会当成一条测试用例来运行。

对应的会生成多个测试结果:

除了能够直接填外,也可以导入外部的CSV文件,更加适合大数据量的测试场景。

测试参数配置

在用例的右侧,有运行环境和保存变量变化值等配置,可以根据项目的实际需要选用。 其中[间隔停顿]和[使用全局cookie]在接口测试中应用频率较高。

运行结果&测试报告

点击[运行]按钮,运行成功会跳转到运行结果页面。还可以导出测试报告。

测试套件

同一个模块的接口用例可以合并为一个测试套件来运行,在测试套件页面,把单个接口用例直接添加进来,其他操作步骤和上文一致。 点击运行可以依次运行添加的用例。

总结

整体讲解下来,感觉Apifox做接口自动化的优势在于流程高度整合低代码贴合国内测试团队的工作模式和思维模式

因此我们从单个接口测试,到业务流程的接口测试,到整个测试套件组装,以及将它们自动化,一路下来,下一步的工作都是可以复用上一步的工作成果的,几乎没有被浪费的工作量。

另一个点是,我们用Apifox实现了自动化,但过程中几乎没有需要用到代码的地方,很多地方都被它直接做成了可视化界面,我们选择控件填数据就行了,这对代码基础薄弱的测试人员确实是一大福音。

【整整200集】超超超详细的Python接口自动化测试进阶教程合集,真实模拟企业项目实战

相关文章:

全网最全的接口自动化测试教程

为什么要做接口自动化 相对于UI自动化而言,接口自动化具有更大的价值。 为了优化转化路径或者提升用户体验,APP/web界面的按钮控件和布局几乎每个版本都会发生一次变化,导致自动化的代码频繁变更,没有起到减少工作量的效果。 而…...

数据结构----结构--线性结构--链式存储--链表

数据结构----结构–线性结构–链式存储–链表 1.链表的特点 空间可以不连续,长度不固定,相对于数组灵活自由 搜索: 时间复杂度O(n) 增删: 头增头删时间复杂度O(1) 其他时间复杂度为O(n) 扩展:单向循环链表的特性 从任意节…...

【5G 核心网】5G 多PDU会话锚点技术介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...

K8s环境下监控告警平台搭建及配置

Promethues是可以单机搭建的,参考prometheus入门[1] 本文是就PromethuesGrafana在K8s环境下的搭建及配置 Prometheus度量指标监控平台简介 启动minikube minikube start 安装helm 使用Helm Chart 安装 Prometheus Operator: helm install prometheus-operator stabl…...

微信小程序在使用vant组件库时构建npm报错

在跟着vant官方进行使用步骤一步步操作时,由于要构建NPM,但NPM包在App配置文件的外部 所以在做下图这一步时: 接着再进行npm构建时会报错 message:发生错误 Error: F:\前端学习\前端框架\小程序\project\demo\miniprogram解决方法 &#xf…...

Django实现音乐网站 ⑽

使用Python Django框架制作一个音乐网站, 本篇主要是后台对歌曲类型、歌单功能原有功能进行部分功能实现和显示优化。 目录 歌曲类型功能优化 新增编辑 优化输入项标题显示 父类型显示改为下拉菜单 列表显示 父类型显示名称 过滤器增加父类型 歌单表功能优化…...

SpringMVC的架构有什么优势?——异常处理与文件上传(五)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★ React从入门到精通★ ★前端炫酷代码分享 ★ ★ 从0到英雄,vue成神之路★ ★ uniapp-从构建到提升★ ★ 从0到英雄&#xff…...

【java面向对象中static关键字】

提纲 static修饰成员变量static修饰成员变量的应用场景static修饰成员方法static修饰成员方法的应用场景static的注意事项static的应用知识:代码块static的应用知识:单例设计模式 static静态的意思,可以修饰成员变量,成员方法&a…...

系统学习Linux-Redis集群

目录 一、Redis主从复制 概念 作用 缺点 流程 二、Reids哨兵模式(sentinel) 概念 作用 缺点 结构 搭建 三、redis集群 概述 原理 架构细节 选举过程 实验环境模拟 一、Redis主从复制 概念 是指将一台Redis服务器的数据,复制…...

【每日随笔】帝王心术 ② ( 如何培养下一代 | 重点培养孩子某一项特长 | 价值观培养 | 独立思考 | 人性和谋略教育 | 资源传承 | 人生指引 )

文章目录 一、重点培养孩子某一项特长二、价值观培养三、独立思考四、人性和谋略教育五、资源传承六、人生指引 一、重点培养孩子某一项特长 很多人 作为 父母 , 教育孩子 , 没有出息的占大多数 ; 父母 教育 孩子 , 给孩子培训 , 一般都给报个兴趣班 , 如果兴趣班的种类超过两…...

Git简介

Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或大或小的项目。 Git是Linus Torvalds为了帮助管理Linux内核开发而开发的一个开放源代码的版本控制软件。 Git与常用的版本控制工具CVS、Subversion等不同,它采用了分布式版本库的方式&#x…...

STM32入门学习之定时器输入捕获

1.定时器的输入捕获可以用来测量脉冲宽度或者测量频率。输入捕获的原理图如下: 假设定时器是向上计数。在图中,t1~t2之间的便是我们要测量的高电平的时间(脉冲宽度)。首先,设置定时器为上升沿捕获,如此一来,在t1时刻可…...

贪心算法:基础入门篇

贪心算法:基础入门篇 文章目录: 贪心算法:基础入门篇一、认识贪心算法二、常见贪心问题2.1 纸牌问题2.2 背包问题(基础版)2.3 简单数学证明问题 三、总结 一、认识贪心算法 在求最优解的问题中,以某种贪心…...

【Windows10下启动RocketMQ报错:找不到或无法加载主类 Files\Java\jdk1.8.0_301\lib\dt.jar】解决方法

Windows10下启动RocketMQ报错:找不到或无法加载主类 一、问题产生二、产生原因三、解决办法 一、问题产生 参考RocketMQ Github官网上的说明,下载rocketmq-all-5.1.3-bin-release.zip,解压配置环境变量后,执行如下命令&#xff1a…...

深入篇【Linux】学习必备:进程理解(从底层探究进程概念/进程创建/进程状态/进程优先级)

深入篇【Linux】学习必备:进程理解(从底层探究进程概念/进程创建/进程状态/进程优先级) 一.进程概念(PCB/task_struct)二.查看进程(top/ps)三.创建进程(fork)四.进程状态(僵尸进程/孤儿进程)五.进程优先级(PRI/NI) 一.进程概念(PCB/task_struct) 1.什么…...

Python 潮流周刊#15:如何分析 FastAPI 异步请求的性能?

你好,我是猫哥。这里每周分享优质的 Python、AI 及通用技术内容,大部分为英文。标题取自其中一则分享,不代表全部内容都是该主题,特此声明。 本周刊精心筛选国内外的 250 信息源,为你挑选最值得分享的文章、教程、开源…...

基于Java+SpringBoot+Vue的网吧管理系统设计与实现(源码+LW+部署文档等)

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…...

redis设置database 不生效剖析

设置database 不生效剖析 前言配置加载类问题commons-pool 对象池 主页传送门:📀 传送 前言 事情是这样的 今天在拉取了同事的代码做redis缓存设置的时候,发现即使已经设置了database, 但是存数据的时候还是用的默认0数据库。这引起了我的好…...

汽车及汽车零部件行业云MES解决方案

汽配行业现状: 随着经济全球化进程加快,一直走在智能化改造,数字化转型前沿的汽车行业企业,面临的信息化需求也日益增加,不管德系,美系还是日系供应链的各大厂商,均将企业信息化,数字…...

算法工程师-机器学习面试题总结(4)

深度学习 DNN 描述一下神经网络?推导反向传播公式? 神经网络(Neural Network)是一种模拟人脑神经系统的计算模型。它由许多节点(神经元)和连接它们的权重组成,这些节点和权重可以学习和调整&a…...

【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项

一、条形码识别改名使用教程 打开软件并选择处理模式:打开软件后,根据要处理的文件类型,选择 “图片识别模式” 或 “PDF 识别模式”。如果是处理包含条形码的 PDF 文件,就选择 “PDF 识别模式”;若是处理图片文件&…...

新版NANO下载烧录过程

一、序言 搭建 Jetson 系列产品烧录系统的环境需要在电脑主机上安装 Ubuntu 系统。此处使用 18.04 LTS。 二、环境搭建 1、安装库 $ sudo apt-get install qemu-user-static$ sudo apt-get install python 搭建环境的过程需要这个应用库来将某些 NVIDIA 软件组件安装到 Je…...

作为点的对象CenterNet论文阅读

摘要 检测器将图像中的物体表示为轴对齐的边界框。大多数成功的目标检测方法都会枚举几乎完整的潜在目标位置列表,并对每一个位置进行分类。这种做法既浪费又低效,并且需要额外的后处理。在本文中,我们采取了不同的方法。我们将物体建模为单…...

C++ Saucer 编写Windows桌面应用

文章目录 一、背景二、Saucer 简介核心特性典型应用场景 三、生成自己的项目四、以Win32项目方式构建Win32项目禁用最大化按钮 五、总结 一、背景 使用Saucer框架,开发Windows桌面应用,把一个html页面作为GUI设计放到Saucer里,隐藏掉运行时弹…...

SFTrack:面向警务无人机的自适应多目标跟踪算法——突破小尺度高速运动目标的追踪瓶颈

【导读】 本文针对无人机(UAV)视频中目标尺寸小、运动快导致的多目标跟踪难题,提出一种更简单高效的方法。核心创新在于从低置信度检测启动跟踪(贴合无人机场景特性),并改进传统外观匹配算法以关联此类检测…...

vue3 手动封装城市三级联动

要做的功能 示意图是这样的&#xff0c;因为后端给的数据结构 不足以使用ant-design组件 的联动查询组件 所以只能自己分装 组件 当然 这个数据后端给的不一样的情况下 可能组件内对应的 逻辑方式就不一样 毕竟是 三个 数组 省份 城市 区域 我直接粘贴组件代码了 <temp…...

Android多媒体——音/视频数据播放(十八)

在媒体数据完成解码并准备好之后,播放流程便进入了最终的呈现阶段。为了确保音视频内容能够顺利输出,系统需要首先对相应的播放设备进行初始化。只有在设备初始化成功后,才能真正开始音视频的同步渲染与播放。这一过程不仅影响播放的启动速度,也直接关系到播放的稳定性和用…...

2025-06-08-深度学习网络介绍(语义分割,实例分割,目标检测)

深度学习网络介绍(语义分割,实例分割,目标检测) 前言 在开始这篇文章之前&#xff0c;我们得首先弄明白&#xff0c;什么是图像分割&#xff1f; 我们知道一个图像只不过是许多像素的集合。图像分割分类是对图像中属于特定类别的像素进行分类的过程&#xff0c;即像素级别的…...

Android Settings 数据库生成、监听与默认值配置

一、Settings 数据库生成机制​ ​传统数据库生成&#xff08;Android 6.0 前&#xff09;​​ ​路径​&#xff1a;/data/data/com.android.providers.settings/databases/settings.db​创建流程​&#xff1a; ​SQL 脚本初始化​&#xff1a;通过 sqlite 工具创建数据库文件…...

【优选算法】模拟 问题算法

​一&#xff1a;替换所有的问号 class Solution { public:string modifyString(string s) {int n s.size();for(int i 0; i < n; i){if(s[i] ?){for(char ch a; ch < z; ch){if((i0 && ch !s[i1]) || (in-1 && ch ! s[i-1]) || ( i>0 &&…...