测试必知必会的Mock数据方法

news2025/1/20 1:48:08

Mock数据的含义

那么Mock数据是什么意思呢

首先Mock这个英文单词有模拟的意思,模拟数据通俗的理解就是构造假数据,即Mock数据就是通过构造假数据来达到测试的目的,它广泛运用于功能测试、接口测试、单元测试

在功能测试中,可以先Mock某页面调用接口的返回字段的值,使得页面获取到假数据,方便测试页面展示效果

在这里插入图片描述
在接口测试中,若接口A为服务A当中的接口,并依赖下游服务B,C,其中B服务及其不稳定,则可以Mock服务B中接口的返回数据,使得服务A能正常获取到假数据,进而能够正常测试接口A

图片

有小伙伴可能有疑惑,接口和服务这两者有什么区别,一个服务里面一般是含有一个或多个接口,一般情况下,服务A只依赖服务B里面的某一个或几个接口,但如果服务B不稳定,就会导致整体服务B不可用,因此服务A无法正常返回数据,进而无法正常测试接口A

这种情况下可以单独Mock 服务A 依赖 服务B的接口,也可以创建一个完整的 Mock 服务B,如果是搭建完整的Mock服务,难度还比较大,主要体现在下面两个方面
(1)需要对该服务B非常了解,因为我们测试当中一般是对被测服务A了解,但下游服务B因为不是我们的被测对象,往往不清楚它的调用逻辑

(2)需要根据服务A的传参,调用Mock 服务B,返回动态的结果。比如没有传参或参数不对,Mock 服务B就不能再返回正确的结果

为了解决上面两大难题,我们往往是需要进行契约测试,引入契约文件,记录服务B的请求和返回信息,由于契约测试内容非常多,本文暂不进行展开

在这里插入图片描述
在单元测试中,可以Mock 整个类或者是某个类当中的某个方法

图片

 

在单元测试中Mock数据一般有两种运用场景

第一个场景是被测试对象依赖的对象构造复杂。比如:Class A 依赖 class B、class B 依赖 class C,此处我们想测试classA,在没有mock的情况下就要去根据要求去构造classB、classC对象,耗时耗力。在Mock的情况下,我们可以直接Mock classB、C并通过设计其行为来实现测试classA的目的,因为我们只是想测试class A的行为是否符合预期,我们并不需要测试依赖的对象

第二个场景是被测方法依赖的方法还未开发完成。即被测试方法所依赖的模块还没有开发完成,而被测试对象需要需要依赖模块的返回值进行测试。也就是测试方法依赖了无法获取的下游数据。比如:service中方法的测试需要dao中的访问数据库操作并获取其返回值,但是我们还没有开发完成对应的dao方法,我们就可以mock一个dao层的对象,将其行为设置为:当调用其中的某个方法时返回一个设好的固定值。这样我们对service的测试就可以不必受dao层的开发速度影响。也符合只对service方法逻辑进行测试

除了我们测试工程师需要Mock数据外,在整个需求开发初期,后端开发一般会给前端开发提供API接口文档,前端开发时常也会根据接口文档进行Mock接口的返回数据用于辅助开发前端页面

为什么前端开发也要Mock数据呢?这是因为在开发阶段,往往前后端的开发是并行的,这个时候由于后端还在正常开发当中,无法提供真实的API服务给前端调用,前端则根据接口文档当中的接口定义(请求方式、请求参数、接口预期返回数据),先进行Mock后端接口,帮助完成自己的前端部分的开发工作

直到后端开发完毕后,前端再使用开发环境里真实API服务进行联调测试,联调通过后提测给测试

Mock数据的层级关系

根据上面在单元测试、功能测试、接口测试的Mock数据的场景,我们可以看出Mock数据的层级关系

  • 方法级mock:mock的对象是一个函数(方法)调用
  • 类级mock:mock的对象是一个类
  • 接口级mock:mock的对象是一个API接口
  • 服务级mock:mock的对象是整个服务

在功能测试阶段,一般是接口级Mock。在单元测试阶段,则为方法级和类级Mock。在接口测试阶段,一般则为接口级Mock或者服务级Mock

Mock数据的工具与方法

下面结合功能测试、接口测试、单元测试这三种测试场景,讲解一下对应Mock数据的工具和方法

功能测试

在做功能测试时,可使用Charles的Map Local功能进行Mock数据,具体使用方法如下,先抓包获取到接口信息,可以看到其中有个ttl字段,值为1

在这里插入图片描述

右键菜单保存该接口响应结果,到指定的路径下

图片

然后找到刚刚保存的响应结果文件,一般为Json格式,修改其中的ttl为2,以达到Mock数据的目的,修改后保存文件

在这里插入图片描述

找到Charles顶部菜单栏Tools-Map Local功能

在这里插入图片描述

进入后勾选Enable Map Local 打开Map Local的开关,然后点击Add,填入Map From的URL信息(可以通过右键菜单Copy URL)

图片

 

最后选择本地Map To 的文件,这个文件就是我们刚刚修改的响应结果文件

图片

设置完毕后,点击OK即可。最后,我们验证一下效果,再次访问刚才的URL,通过抓包可以发现ttl字段的值已经变成2了

在这里插入图片描述

大家可以根据需要,利用这种方法去Mock 其他HTTP协议接口的返回数据。

如果使用的是Fiddler抓包工具,可以利用AutoResponder功能实现mock测试

接口测试

在接口测试中,能用来Mock数据的工具就太多了,下面列举一些常用工具

(1)Postman 提供的Mock Servers功能,Yapi平台的数据Mock功能

(2)json-server,用于模拟服务端接口数据的工具,可以根据json数据建立一个完整的web服务

(3)Mock.js,在前端开发当中,若前端使用的Vue框架,则可以用Mock.js去Mock接口数据

(4)moco框架,在开发 Mock 服务的时候,它提供了一种不需要任何编程语言的方式,你可以通过撰写它约束的 Json 建立服务,并通过命令启动对应的服务,这就可以快速开发和启动运行你需要的 Mock 服务

单元测试

在单元测试当中,各种编程语言一般都提供了用来帮助单元测试的Mock框架

  • Java 的Mockito 、JMockit、PowerMock等
  • Python的mock 模块是 Python 的测试框架 unittest 下的一个子包,是单元测试的一个重要模块
  • Go语言,则可以使用Monkey Patch这个特性去Mock数据,Monkey库是 Monkey Patch 的一个 Go 版本实现

结束语

本文给大家介绍了Mock数据的含义、工具和方法,内容有点多,大家慢慢消化

 

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

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取  

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

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

相关文章

离散数学 | 图论 | 欧拉图 | 哈密顿图 | 割点 | 桥(欧拉图和哈密顿图有没有割点和桥?)

本文主要解决以下几个问题: 1.欧拉图能不能有割点,能不能有桥? 2.哈密顿图能不能有割点,能不能有桥? 首先我们要明白几个定义 割点的定义就是在一个图G中,它本来是连通的,去掉一个点v以后这个…

【firewalld防火墙】

目录 一、firewalld概述二、firewalld 与 iptables 的区别1、firewalld 区域的概念 三、firewalld防火墙默认的9个区域四、Firewalld 网络区域1、区域介绍2、firewalld数据处理流程 五、firewalld防火墙的配置方法1、使用firewall-cmd 命令行工具。2、使用firewall-config 图形…

【计算机网络基础】章节测试4 网络层

R1与R2是一个自治系统中采用RIP路由协议的两个相邻路由器,R1的路由表如图(a)所示。如果R1收到R2发送的如图(b)所示的(V,D)报文,更新之后的R1的4个路由表项的距离从上到下依次为0、4、4、2,那么图 (b)中a、b、c、d 可能的数据一个是( C )。 A. 1、2、2、1 B. 2、2、3、1…

Java 核心技术 卷I 第2章 Java程序设计环境

第2章 Java程序设计环境 2.1 安装Java开发工具包 2.1.1 下载JDK www.oracle.com/technetwork/java/javase/downloads Java术语 2.1.2 设置JDK 下载JDK之后,需要安装这个开发包并明确要在哪里安装,后面还会需要这个信息. 指/opt/jdk1.8.0_31/bin或c…

从零开始Vue3+Element Plus后台管理系统(十四)——PDF预览和打印

其实我常常会纠结今天要写什么内容。 因为希望能够保持每日更新,所以要写的内容不能太难——最好是半天可以搞出demo并且输出文章,所以很多东西浅尝辄止,并没有深入研究,还写出了一些bug 🐛 今天又浅浅的研究了下在V…

这还只是阿里20K+测试岗面试题,看的我冷汗直流.....

朋友入职已经两周了,整体工作环境还是非常满意的!所以这次特意抽空给我写出了这份面试题,而我把它分享给伙伴们,面试&入职的经验! 大概是在3月中的时候他告诉我投递了阿里巴巴并且简历已通过,3月23经过…

python类型注释

目录 为什么需要类型注解 什么是类型注解 联合注解 使用注解时的注意点 为什么需要类型注解 看下图,很精炼; 什么是类型注解 Python类型注释是指在变量、函数参数、返回值等位置添加类型信息的一种语法,其目的是提高代码的可读性和可维护…

monkey测试方法及命令

1、查询测试包信息 # 查看已连接设备 adb devices # 带uuid查询包含test的第三方apk包 adb -s W21112003057 shell pm list package -3 | grep test # 清空logcat adb -s W21112003057 logcat -c # 启动app,通过日志查看安装包信息 adb -s W21112003057 logcat…

史上最全!全领域网络安全拓扑图(118页)

大家好,我是老杨。 前几天发了一篇OSPF的文章,助理发到群里和大家讨论。 好几个小友表示,绘制拓扑的才是最高境界,并且想看些拓扑图案例。 其实拓扑图案例老杨也分享过不少了。 可以看看这些往期文章,《超干货&…

【送书福利-第四期】从程序员到架构师:大数据量、缓存、高并发、微服务、多团队协同等核心场景实战书籍

大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我! 送书福利-第四期 一、前言二、书籍介绍抽…

KY111 日期差值

1.题目&#xff1a; 2.分析&#xff1a; 1. 分别求出每一个日期与0000年0月1日距离的天数 2. 两个距离天数相减即可得到两个日期相差的天数 3.我的代码&#xff1a; #include <iostream> using namespace std;class Date { public:Date(int year 1, int month 1, …

java学习:字面量,基本语句

一、字面量 1.字面量的类型 Java字面量的类型其实跟 c 的有点相似&#xff0c;有一点不一样的就是&#xff0c;Java有个null类型&#xff0c;注意这个没有大写 2.特殊字面量 \t 是制表符&#xff0c;它的作用就是补齐一个字符串到8位&#xff0c;这样就会使输出结果变得美观…

【arxiv】关于 SAM 的论文扫读(一)

文章目录 一、阴影检测二、弱监督下的隐蔽物体分割&#xff1a;基于SAM的伪标签和多尺度特征分组三、Instruct2Act&#xff1a;利用大型语言模型将多模态指令映射到机器人动作四、OR-NeRF: Object Removing from 3D Scenes Guided by Multiview Segmentation with Neural Radia…

Lucene(5):索引维护

1 需求 管理人员通过电商系统更改图书信息&#xff0c;这时更新的是关系数据库&#xff0c;如果使用lucene搜索图书信息&#xff0c;需要在数据库表book信息变化时及时更新lucene索引库。 2 添加索引 调用 indexWriter.addDocument&#xff08;doc&#xff09;添加索引。 参…

[Data structure]环形链表

⭐作者介绍&#xff1a;大二本科网络工程专业在读&#xff0c;持续学习Java&#xff0c;努力输出优质文章 ⭐作者主页&#xff1a;逐梦苍穹 ⭐所属专栏&#xff1a;数据结构。数据结构专栏主要是在讲解原理的基础上拿Java实现 ⭐如果觉得文章写的不错&#xff0c;欢迎点个关注一…

文心一言 VS chatgpt (21)-- h264编码一帧数据的流程是怎样的?

h264编码一帧数据的流程是怎样的&#xff1f; 文心一言&#xff1a; H.264编码将一帧数据分成多个块&#xff0c;其中每个块可以单独进行编码。编码的过程包括预测、变换和量化等步骤。 具体流程如下&#xff1a; 1.帧内预测&#xff1a;对一帧视频进行编码&#xff0c;首先…

什么是网络编程

目录 一、什么是网络编程&#xff1f; 二、协议 1.用户数据报协议(User Datagram Protocol) 2.TCP协议 TCP三次握手过程 三、实例 1.UDP通信程序 实现步骤 TCP接收数据 四、TCP协议和UDP协议的区别和联系 一、什么是网络编程&#xff1f; 1.在网络通信协议下&#xf…

Qt编程基础 | 常用控件 | 组合框

一、组合框 1.1、定义 QComboBox提供了一种向用户呈现选项列表的方式&#xff0c;以占用最少的屏幕空间。 组合框是一个显示当前项目的选择小部件&#xff0c;可以弹出可选择项目的列表。 组合框可以是可编辑的&#xff0c;允许用户修改列表中的每个项目。 QComboBox 除了显示…

四、IOC容器(3)

一、IOC操作Bean管理&#xff08;外部属性文件&#xff09; 1.直接配置数据库信息 配置德鲁伊连接池引入德鲁伊连接池依赖jar包 <!--配置连接池--> <bean id"dataSource" class"com.alibaba.druid.pool.DruidDataSource"><property name&…

深度学习神经网络学习笔记-多模态方向-10-Neural Voice Cloning with a Few Samples

摘要 语音克隆是个性化语音接口非常需要的功能。我们介绍了一个神经语音克隆系统&#xff0c;该系统仅从少数音频样本中学习合成一个人的声音。我们研究了两种方法:说话人适应和说话人编码。说话人自适应是基于多说话人生成模型的微调。说话人编码是基于训练一个单独的模型来直…