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数据的含义、工具和方法,内容有点多,大家慢慢消化

本来想继续写一下单元测试当中Mock框架的具体用法,一看都2000多字了,那就留到下次吧(其实是我懒)

现在我邀请你进入我们的软件测试学习交流群:746506216】,备注“入群”, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路。

喜欢软件测试的小伙伴们,如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一 键三连哦!

测试必知必会的Mock数据方法相关推荐

  1. 【SQL必知必会笔记(3)】SELECT语句的WHERE子句数据过滤操作

    上个笔记主要介绍了利用SELECT语句检索单个/多个/所有列,并利用DISTINCT关键字检索具有唯一性的值.利用LIMIT/OFFSET子句限制结果:以及利用ORDER BY子句排序检索出的数据,主 ...

  2. 《MySQL必知必会学习笔记》:更新和删除数据

    更新和删除数据 上篇博文介绍了下插入数据的几种方式.这篇博文就来讲述下更新和删除数据. 更新数据 更新(修改)表中的数据,使用update语句. 更新数据一般采用如下两种方式: 更新表中特定行的数据. ...

  3. 电子工程师必知必会——矢网史密斯Smith Chart圆图测试阻抗

    史密斯圆图是由很多圆周交织在一起的一个图.正确的使用它,可以在不作任何计算的前提下得到一个表面上看非常复杂的系统的匹配阻抗,唯一需要作的就是沿着圆周线读取并跟踪数据. 本期视频贝贝就带大家学习矢网的史 ...

  4. 《渗透测试实践指南 必知必会的工具与方法 (原书第2版)》读书摘录

    ----------------------------------------------------------------------------分割线--------------------- ...

  5. gns3中两个路由器分别连接主机然后分析ip数据转发报文arp协议_关于TCP/IP,必知必会的十个问题!...

    本文整理了一些TCP/IP协议簇中需要必知必会的十大问题,既是面试高频问题,又是程序员必备基础素养. TCP/IP十个问题 TCP/IP十个问题 一.TCP/IP模型 TCP/IP协议模型(Trans ...

  6. mysql第四章分页显示查询出租房屋信息_MYSQL必知必会读书笔记第四章之检索数据...

    MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理. 使用Select语句返回的数据,可能会发现显 ...

  7. sql必知必会的数据初始化

    之前已经配置好mysql的工作环境,但是还缺少可以进行操作的文件,即缺少对应的一个数据库和其中的5个表. 下载相关代码 在网址http://www.forta.com/books/0672325675 ...

  8. mysql必知必会的数据_MySQL必知必会--汇 总 数 据

    聚集函数 我们经常需要汇总数据而不用把它们实际检索出来,为此MySQL提 供了专门的函数.使用这些函数,MySQL查询可用于检索数据,以便分 析和报表生成.这种类型的检索例子有以下几种. 确定表中行数 ...

  9. 《SQL必知必会》:过滤数据 SELECT WHERE

    SQL必知必会:了解SQL SQL必知必会:检索数据 SELECT SQL必知必会:排序检索 SELECT ORDER BY SQL必知必会:过滤数据 SELECT WHERE SQL必知必会:高级数 ...

最新文章

  1. RASPBERRY PI PICO 树莓派PICO开发板双核高性能低功耗RP2040芯片
  2. java session 生命周期_JavaWeb关于session生命周期的几种设置方法
  3. 趋势不能deploy的解决方法
  4. mysql ---- innodb-3-锁、事务
  5. 进程和线程基础知识(已经是最详细的啦)
  6. java 父类 超类_Java超类-java.lang.object
  7. 软件设计师中级 百度知道_设计师应该知道什么
  8. 连接linux工具有哪些_推荐 10 个不错的网络监视工具,值得收藏
  9. 【网络爬虫与信息提取】信息的组织与提取
  10. opc服务器连接plc断开显示,如何判断OPC与PLC通讯失败
  11. 2、金融量化分析简介
  12. Web前端是干嘛的 为什么要学Web前端
  13. 前端将List列表转化为树型结构(reduce函数)
  14. python中text格式_python读取各种格式的文本
  15. kafka启动失败 The Cluster ID doesn‘t match...
  16. elasticsearch xpack license过期
  17. FileNotFoundError: [Errno 2] No such file or directory: ‘ETHZ/eth01/images/image_00000001_2021-10-29
  18. 字节跳动数据中台的 Data Catalog 系统搜索实践
  19. 前端实现文件下载(a标签实现文件下载 避免直接打开问题)
  20. 0x8007007E 错误解决方法

热门文章

  1. pg_terminate_backend()运维改造--打印调用记录及被终止query文本
  2. C# VS2013生成的exe文件修改图标
  3. Visual Studio 2019 Python 环境配置
  4. 计算机系统的管理工具,如何使用电脑系统中的管理工具查看各项情况
  5. ext/atomicity.h file not find
  6. 跳台阶问题(组合数学)
  7. 凤梨文案:水果凤梨新鲜的文案,水果凤梨的销售文案
  8. JS将字符串拆分为字符数组
  9. 【数据挖掘】多特征组合的基本方法
  10. 【Java基础】运行时异常和非运行时异常的区别