【接口测试】Apifox实用技巧干货分享

前言

不知道有多少人和我有着这样相似的经历:从写程序只要不报错就不测试😊,到写了程序若是有bug就debug甚至写单元测试,然后到了真实开发场景,大哥和你说,你负责的功能模块的所有接口写完要测试一遍无误在commit和push

这时❔️就出现了,怎样进行接口测试,这么多接口要挨个儿写单元测试嘛(🥹真心抗拒),大哥就很贴心,给我展示了两种方案,看清楚了,额,作为后端开发,那选择Apifox开局吧,虽然之前也没闻其名用其品,但谁让我喜欢它的红,旭日东升,照耀大地

前置知识

1️⃣在实际生产项目中,后端在完成功能模块中的接口开发后,需要对接口进行自测,避免与前端联调时出现本不该有的错误,提供工作对接效率

2️⃣接口测试用于测试前端与后端之间进行数据交互的接口,测试重点:传参正确性、响应结果正确性、功能实现正确性和异常处理合理性与完整性

3️⃣对于http的请求与响应有一定认识,这Y的是必须的

Apifox干货运用

简介

🌟学习一个东西最好的方法就是阅读说明书,但绝不是一上来就猛冲说明书,而是在实际运用中遇阻,在针对性阅读解决,这样事半功倍,请对这句话有点印象,因为接下来我会用实际行动来印证这句话

这是一款开发协作工具,可用于接口测试,多平台可用,这是官网下载地址:https://apifox.com

官网还提供了使用文档:https://apifox.com/help

真心建议: 如果是刚接触接口测试,别看官方入门视频,真的从入门到入土

使用方针

1️⃣请大哥演示一遍,借用Apifox进行接口测试的具体使用流程

2️⃣自己上机操作一遍,对于其使用有了清晰而模糊的印象便可,然后在对所写接口进行独测与分析思考小结

3️⃣学习常见使用场景,使接口测试高效便捷

前两步请自行完成,而我能提供的,就是在常见场景下实用技巧的整理(形与神)

场景使用

官方文档第一篇:https://apifox.com/help/api-docs/api-design

前置URL使用场景

接口测试重点测试的是某路由下该接口的功能实现,大多数时候,其接口路由下的前置URL是重复的,所以每次用接口的全路径测试可以,但不够优雅

在这里插入图片描述
在程序中,对于重复的代码块可以用函数封装,而在测试这里,Apifox提供了前置URL功能

在这里插入图片描述

这只是一道开胃菜,重点是希望通过这道开胃菜,了解Apifox中🔥环境与变量,请阅读官方文档第二篇:https://apifox.com/help/environment-and-variables/environment-management

后置脚本使用场景一

有了环境与变量的认识,接下来看看这样一个使用场景(相信非常眼熟👀)

将上一个接口中获取到的响应体中某个字段用在下一个接口的请求路径中,并且该字段对应的值是不重复的(由时间戳+随机数构成)

在这里插入图片描述

请信奉一句话:优雅,永不过时

第一步,将上一个接口响应体中有用字段设为环境变量,这里需要使用后置脚本

在这里插入图片描述
第二步,将下一个接口请求路径中的动态值设为环境变量

在这里插入图片描述
在这里插入图片描述

思路简介:将上一个接口中有用字段设为环境变量,这样在请求完上一个接口后环境变量就有值,那么下一个接口的请求路径的动态值就会自动设置上了

后置脚本使用场景二

很多时候进行接口测试需要携带token才能通过校验,而token的获取要么自行模拟登录获取,要么让前端手动传过来,我想你也不是喜欢把事情搞复杂的人,所以还是自食其力

这时候可能会说,进行接口测试,我直接在拦截器放行不就不用携带token了嘛,是这样的,不过很多时候又需要从token中获取一些信息进行其他逻辑操作🤡

🔥要实现模拟登录,首先得明白登录实现的真实逻辑

登录实现通常分为两步,第一步就是请求跳转到登录界面,这时候前端就会加载静态资源和请求验证码接口

这里以若依在线演示平台为例来验证这一步:http://vue.ruoyi.vip/

在这里插入图片描述
在这里插入图片描述
后端对于前端请求的验证码接口会返回一个uuid来标识所返回的验证码图片

第二步,前端会基于登录信息、验证码答案和uuid来请求登录接口

在这里插入图片描述

在验证码接口响应体中uuid是动态生成的,验证码答案code也是在随机变化的,那么如何在模拟登录操作时高效取到token

第一步,通过后置脚本将uuid设为环境变量(📝这里涉及到验证码code获取,后面会重点提及,这里先忽略)

在这里插入图片描述
第二步,将登录接口中的请求体的uuid字段设为环境变量

在这里插入图片描述
说明: 之前让看环境与变量时涉及到变量使用:所有类型的变量都是通过双大括号的方式。而这里为什么要在双大括号外加引号了,是因为使用后置脚本设置的环境变量类型没有定义,只存储了某环境变量对应的某值,所以当使用的环境变量为字符串类型,就需要用引号标识

在这里插入图片描述

后置脚本使用场景三

当获取到了token后,每个接口都需要携带token,难道每次手动在请求头中手动添加嘛,可以但没必要

这里你可以根据上面两个使用场景自己推演出来,也可以对照着我的实现

第一步,使用后置脚本将响应体中的token字段设为环境变量

在这里插入图片描述
第二步,将请求头中的Authorization字段的取值设为环境变量token

在这里插入图片描述
在这里插入图片描述

数据可视化使用场景

对于验证码图片,是后端通过公共库随机生成的,返回的验证码图片通常是base64编码的字符串

而在模拟登录中,通常需要通过工具将base64编码的字符串转为图片,然后计算得出验证码答案code,这样就会使模拟登录变得更加繁琐

实现可能不止一条方案,但我只有这一条方案,可借鉴参考

思路: 通过后置脚本将获取到的响应体中的base64编码的字符串自动转为图片,然后就可以快速得出验证码答案

核心: 如何将base64编码的字符串转为图片,我刚开始尝试在Apifox中使用js来实现,但结果不尽人意,当时也不知道该怎么破局。后来结合官方文档,自己有了一条实现思路,便是通过在线工具的接口间接获取图片

简单介绍下我实现的流程,在得知官方有提供该功能,网查无此资料,便只好对照官方文档边啃边实现

官方文档第三篇:https://apifox.com/help/pre-post-processors-and-scripts/scripts/examples/visualize
官方文档第四篇:https://apifox.com/help/pre-post-processors-and-scripts/scripts/api-references/pm-reference

通过爱资料工具可将base64转为图片

在这里插入图片描述

第一步,观察其请求与响应

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第二步,观察所请求的验证码接口的响应体

在这里插入图片描述

第三步,在脚本内异步发送 HTTPS 请求

const echoPostRequest = {url: "https://api3.toolnb.com/tools/base64ToImages.json",method: "POST",header: ["Content-Type: application/x-www-form-urlencoded; charset=UTF-8","User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36","Connection: keep-alive"],// body 为 form-data 格式body: {mode: "formdata",formdata: [{ key: "data", value: pm.response.json().img }]}
};pm.sendRequest(echoPostRequest, function (err, res) {console.log(err ? err : res.json().data.file);let resp = {response: res.json().data.file}let template = `<html><img src="{{response}}" /></html>`pm.visualizer.set(template, resp)
});

注意: 官网的异步请求头用{}包裹,但不知道为何最开始使用时报错,后来测试时又可以正常使用了,所以提供两个版本供选择

const echoPostRequest = {url: "https://api3.toolnb.com/tools/base64ToImages.json",method: "POST",header: {"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36","Connection": "keep-alive"},// body 为 form-data 格式body: {mode: "formdata",formdata: [{ key: "data", value: pm.response.json().img }]}
};pm.sendRequest(echoPostRequest, function (err, res) {console.log(err ? err : res.json().data.file);let resp = {response: res.json().data.file}let template = `<html><img src="{{response}}" /></html>`pm.visualizer.set(template, resp)
});

最后效果图
在这里插入图片描述

小结

从大哥推荐通过Apifox进行接口测试,到本篇文章诞生已有三周之久

从不会用到用的惯往往只需要向前迈出这么一步,可这一步耗费了我三周,希望本篇文章能对你有所帮助

题外话

在CSDN上,如果有文章对你产生过帮助,还请点赞支持,这既可以激励创作者,也会让良币被更多需要的人发现。更为重要的是,做人还是得学会:投之以桃,报之以李

本来国内博文只能说发展前景很是宽广,毕竟批判家动动嘴远比动动手要简单多(说的永远比做的多,要是不行你不能自己动手改变嘛),这也无可厚非,可最近发现,有的搞博文搞着搞着就变成为了打榜而刷起了人情世故,懂得都懂。只能说:德不配位,必有灾殃

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

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

相关文章

canvas基础:fillStyle 和strokeStyle示例

canvas实例应用100 专栏提供canvas的基础知识&#xff0c;高级动画&#xff0c;相关应用扩展等信息。 canvas作为html的一部分&#xff0c;是图像图标地图可视化的一个重要的基础&#xff0c;学好了canvas&#xff0c;在其他的一些应用上将会起到非常重要的帮助。 文章目录 上色…

百度收录批量查询工具,免费SEO优化排名工具

拥有一个在搜索引擎中得到良好收录的网站对于个人和企业都至关重要。而百度&#xff0c;作为中国最大的搜索引擎&#xff0c;其收录情况直接影响着网站的曝光度和流量。 百度搜索引擎是中文用户获取信息的重要途径之一。而在这个竞争激烈的网络环境中&#xff0c;了解自己网站…

分治-归并排序

文章目录 &#x1f31e;315. 计算右侧小于当前元素的个数&#x1f308;1. 题目⛅2. 算法原理&#x1fa90;3. 代码实现 &#x1f315;493. 翻转对&#x1f320;1. 题目⭐2. 算法原理&#x1f31f;3. 代码实现 &#x1f31e;315. 计算右侧小于当前元素的个数 &#x1f308;1. 题…

Fiddler抓包工具之fiddler设置抓HTTPS的请求证书安装

设置抓HTTPS的请求包 基础配置&#xff1a; 路径&#xff1a;启动Fiddler 》Tools》Options》HTTPS 注意&#xff1a;Option更改完配置需重启Fiddler才能生效 选中"Decrpt HTTPS traffic", Fiddler就可以截获HTTPS请求&#xff0c;如果是第一次会弹出证书安装提…

二叉树链式结构的实现和二叉树的遍历以及判断完全二叉树

二叉树的实现 定义结构体 我们首先定义一个结构来存放二叉树的节点 结构体里分别存放左子节点和右子节点以及节点存放的数据 typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTreeNode* left;struct BinaryTreeNode* right; }BTNode;…

Kubernetes入门学习(下)

Kubernetes入门学习&#xff08;下&#xff09; 文章目录 Kubernetes入门学习&#xff08;下&#xff09;运行有状态的应用ConfigMap与SecretConfigMapSecret 卷(Volume)StatefulSet(有状态应用集)Headless Service(无头服务)Mysql主从复制Port-forward端口转发Helm参考 运行有…

Python办公自动化【Word设置文字样式、Word设置段落样式、Word生成通知书、Word读取内容】(五)-全面详解(学习总结---从入门到深化)

目录 Word设置文字样式 Word设置段落样式 Word生成通知书 Word读取内容 Word设置文字样式 常用方法与属性 函数名&属性含义docx.shared.Inches() 创建大小(英寸)docx.shared.Pt() 创建大小(像素)docx.shared.RGBColor() 创建颜色docx.text.run.Run.font.bold文字加粗…

压缩docker在主机的虚拟磁盘容量

我们在windows里使用docker时会发现&#xff0c;即使我们已经删除了无用的镜像和容器&#xff0c;主机里挂在docker虚拟磁盘的那个盘&#xff0c;可用空间也没有增加&#xff0c;这是因为虚拟磁盘不会自动缩小&#xff0c;这里我分享一个可用的解决方案。 1.先通过docker回收空…

[多线程]线程安全问题再讨论 - volatile

目录 1.引言 2.volatil关键字 2.1内存可见性 2.2指令重排序 1.引言 大家好,我是老cu,今天我们来继续聊聊线程安全问题 线程安全是我们在编程开发中遇到的非常常见,棘手 的问题.同时也是多线程部分很复杂的问题.为了线程安全我们要做很多努力.也要对线程安全部分的代码进行慎…

使用python streamlit库快速创建一个购物网站

streamlit Streamlit 是一个基于 Python 的 Web 应用程序框架&#xff0c;致力于以更高效、更灵活的方式可视化数据&#xff0c;并分析结果。 Streamlit是一个开源库&#xff0c;可以帮助数据科学家和学者在短时间内开发机器学习 (ML) 可视化仪表板。只需几行代码&#xff0c…

[GPT-1]论文实现:Improving Language Understanding by Generative Pre-Training

Efficient Graph-Based Image Segmentation 一、完整代码二、论文解读2.1 GPT架构2.2 GPT的训练方式Unsupervised pre_trainingSupervised fine_training 三、过程实现3.1 导包3.2 数据处理3.3 模型构建3.4 模型配置 四、整体总结 论文&#xff1a;Improving Language Understa…

Gossip 协议

Gossip 协议 背景 在分布式系统中&#xff0c;不同的节点进行数据/信息共享是一个基本的需求。 一种比较简单粗暴的方法就是 集中式发散消息&#xff0c;简单来说就是一个主节点同时共享最新信息给其他所有节点&#xff0c;比较适合中心化系统。这种方法的缺陷也很明显&…

Hdoop学习笔记(HDP)-Part.20 安装Flume

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

ubuntu下快速搭建docker环境训练yolov5数据集

参考文档 yolov5-github yolov5-github-训练文档 csdn训练博客 一、配置环境 1.1 安装依赖包 前往清华源官方地址 选择适合自己的版本替换自己的源 # 备份源文件 sudo cp /etc/apt/sources.list /etc/apt/sources.list_bak # 修改源文件 # 更新 sudo apt update &&a…

LinuxBasicsForHackers笔记 --常用Linux命令

在终端中修改用户密码命令&#xff1a;passwd Linux的文件系统是逻辑文件系统。 Linux基本命令 pwd – print working directory. 返回你当前所在目录结构中的位置。 whoami – 查看您当前登录的用户身份。 cd – change directory. 从终端更改目录。 cd / – 移动到根目录…

数据结构与算法(Java) -单调队列单调栈题单

单调队列&#xff08;灵神笔记&#xff09; 239 滑动窗口最大值 239. 滑动窗口最大值 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗…

Skywalking接入实际应用做日志跟踪

Skywalking客户端挂载 从官网下载skywalking-agent客户端&#xff0c;并挂在到应用服务器指定目录 挂载到应用主机中,好处是解决打包应用镜像的时候&#xff0c;镜像过大&#xff0c;部署成本过高。 docker-compose部署应用,并接入skywalking服务,这里以gateway为例 versio…

Webgis学习总结

前言&#xff1a; 作者跟随视频学习了webgis内容进行如下学习复习总结 参考&#xff1a;新中地学习笔记 WebGIS第一课&#xff1a;测试高德API并通过&#xff1a; 注册申请高德API成为开发者&#xff0c;创建自己的项目和key进行项目初始化&#xff0c;可以使用JS API官方文…

26. 深度学习进阶 - 深度学习的优化方法

Hi, 你好。我是茶桁。 上一节课中我们预告了&#xff0c;本节课是一个难点&#xff0c;同时也是一个重点&#xff0c;大家要理解清楚。 我们在做机器学习的时候&#xff0c;会用不同的优化方法。 SGD 上图中左边就是Batch Gradient Descent&#xff0c;中间是Mini-Batch Gra…

【Linux】第二十五站:深入理解文件系统

文章目录 一、前言二、认识硬件----磁盘1.基本介绍2.磁盘的存储构成3.磁盘的逻辑结构4.回归到硬件 三、文件系统1.划分2.Block group(1)Data blocks(2)inode Table(3)Block Bitmap(4)inode Bitmap(5)Group Descriptor Table(GDT)(6)Super Block 3.总结4.一些其他问题5.如何理解…