最强Mock 工具,没人反对吧?

news2025/1/12 8:43:19

背景

在开发过程中,由于后端与前端并行开发,或者前端需要等待后台开发,难以保证对接效率,同时即使用开发好的 API 对接,也有可能一个 API 不通就阻塞了整个软件的对接工作。同时对软件的敏感度也很高,一不小心就可能导致整个软件不能正常工作。并且界面之间存在着严重的相互依赖关系,产生的业务逻辑非常复杂,这些都会对软件的开发效率产生很大的影响。

所以学习如何利用最好的 Mock数据是很关键的。这样做会降低前端开发者的工作量,降低开发费用,提高开发效率。

以下是一些常见的Mock方法,我们可以根据具体的场景条件来进行选择和配置。最关键的是要知道如何去做,并从中挑选出最适合自己的方式。

Mock介绍

或许还有一些没见过 Mock的读者,不知道 Mock是什么。今天就来跟你说说这玩意的厉害,这玩意非同凡响!

简单地说, Mock是指在测试期间,为一些难以构建或不易获得的对象,创建一个虚拟物体进行测试。而这个虚拟物体就是模拟物体,模拟对象是在调试过程中实际对象的替代。

有时候, Mock服务被称为一个测试服务替代品,或一个测试服务,下面的图片非常生动地说明了它的功能。

Mock能解决什么问题?

Mock功能的优势:

  • 前端对接不依赖后端: 让前端工程师独立于后端进行开发。

  • 增加测试的真实性: 通过随机数据,模拟各种场景。

  • 开发无侵入: 不需要修改既有代码,就可以拦截Ajax请求,返回模拟的响应数据。

  • 数据类型丰富: 支持生成随机的文本、数字、布尔值、日期、邮箱、链接、图片、颜色等。

  • 方便扩展: 支持扩展更多数据类型,支持自定义函数和正则。

Mock功能适用场景在实际工作中非常多,真正在实际项目中,引入Mock工具通常来解决如下几类问题。

主要有:

  • 开发进行单元测试

因为单元测试只对目前的单元进行,所以必须保证所有的内外依赖关系都是稳定的,使用 mock的方式来模拟基础单元依赖的其它单元,这样就可以把测试的重心放在当前单元的功能上,从而消除外部因素的影响,提高测试的准确性。

  • 调用第三方接口

在做接口自动化的时候,有时候需要调用第三方的接口,但是别人公司的接口服务稳定性不受你的控制,有可能别人提供的测试环境今天服务给你开着,别人就关掉了,给自动化接口测试带来很多的麻烦,此时就可以通过mock来模拟接口的返回数据,比如模拟各种第三方异常时的返回。

  • 解决接口间的相互依赖

例如,您正在开发前端网页,现在您需要开发付款功能:下一次订购、付款页面界面、付款结果、付款成功、显示付款成功页、付款失败页。为了实现这个特性,您必须调用后台界面,并显示出相应的页面。现在的后端界面还没有完全开发出来,如果是前端开发,那就只能加班了。要实现开发工作的同步,在这个时候,您可以按照接口文件的要求,将接口的地址和参数发送给用户,再通过 mock接口的不同的返回接口,来完成开发工作。

传统Mock解决方案

传统Mock解决方案常见的有两种,一种是使用Postman接口测试工具进行Mock数据,另外一种是使用Mock js第三方库进行Mock数据。

Postman接口测试工具

Postman中需要点击Create Mock Server配置mock服务。选择之后,应用程序会进行一步一步的提示。

配置需要mock的接口地址,手动输入响应数据返回值即可。

Mock js第三方库

Mock.js 是一款模拟数据生成器,旨在帮助前端攻城师独立于后端进行开发,帮助编写单元测试。提供了以下模拟功能:

  • 根据数据模板生成模拟数据

  • 模拟 Ajax 请求,生成并返回模拟数据

  • 基于 HTML 模板生成模拟数据

在Mac上打开命令行终端,输入安装命令 npm install mockjs,稍等几分钟安装完成。

简单示例展示:

Mock list是自增数据

// 使用 Mock
var Mock = require('mockjs')
var data = Mock.mock({
    // 属性 list 的值是一个数组,其中含有 1 到 10 个元素
    'list|1-10': [{
        // 属性 id 是一个自增数,起始值为 1,每次增 1
        'id|+1': 1
    }]
})
// 输出结果
console.log(JSON.stringify(data, null, 4))

Mock 按规则生成字符串

// 指定范围的数量

Mock.mock({ "string|1-10": "★" }) // 执行后

{ "string": "★★" } // 随机生成数量为1-10个'*'字符串

// 固定数量

Mock.mock({ "string|3": "*" }) // 执行后

{ "string": "***" } // 生成指定数量的'*'(示例是3个)字符串

Postman和Mock js使用小结

PostmanPostman的安装更容易,但 Postman在mock功能中的表现,必须手工填写mock数据,而且只有一个配置可以写入。在实际应用中,仍然不够灵活,扩展性不强。

Mock js:Mock js虽然能mock出很多类型的数据,但是它需要嵌入在前端vue项目中结合使用,上手使用有一定的门槛。

总的来看,传统Mock解决方案存在几类问题:

  • 适配复杂场景的Mock能力弱;

  • 复杂依赖环境不稳定;

  • 会增加代码量,在写mock对象代码时,有可能引入错误;

  • 学习成本较高,需要编写代码;

综上问题,我们需要一套开箱即用的Mock工具,能应对复杂的业务场景、稳定并且可靠、对代码无侵入、上手使用简单。

Eolink ApiKit解决方案

在介绍Eolink解决方案之前,介绍下Eolink Apikit 到底是个啥? 能解决什么问题?让我们先来了解一下。

官方的解释: Eolink Apikit 能够提供 API 全生命周期管理解决方案,帮助前端、后端以及测试人员的工作变得更敏捷,包含功能: 接口文档管理、接口自动化测试、接口数据Mock等功能。

这意味着 Eolink Apikit 将会为我们带来一种全新的技术解决方案, 接下来给大家介绍强大的mock功能使用。

Eolink Apikit的 mock功能非常完善,从一个整体 Mock到一个字段级的 Mock都可以适应不同的情况。我肯定相信大部分人会将其用于每天的应用,例如前后端项目开发,第三方接口的调试,以及接口的自动化测试,几个小时就能熟练地运用。

我将其功能拆解成思维导图的方式讲解,这样会更清晰易懂。

从以上的思维导图可以分为六个层次的 Mock功能,下面我将通过每个 Mock的业务上的实例来说明功能的特点,具体的 Mock的用法,还有一些具体的调试和优化。

全局Mock

特点: 提供系统兜底的Mock规则,确保每个Mock调用的返回参数均有随机数据。

全局Mock是Eolink提供的最兜底或者最保守的一种Mock功能,主要是为了方便那些不想要附加 Mock的同学,提供一些简单的Mock功能。

首先,需要编辑页面的返回结果设置city字段。

然后在文档底部Mock模块选择系统默认期望链接并且点击复制到浏览器中。

每次刷新浏览器,都会name字段都会返回随机字符串,达到了每个Mock调用的返回参数均有随机数据的效果。

高级Mock

特点:配置不同的请求参数,以获得不同的返回数据。灵活全面的自定义配置,一个接口实现多种返回数据。

比如请求参数的类型name字段参数值是1、2、3,但是需要返回的结果返回不同的响应结果。在实际项目中,为了降低前端配置Mock接口,可以通过一个接口实现配置不同的请求参数,获取不同的返回数据。

可是使用动态Javascript通过代码生成返回数据时,JavaScript是一种支持面向对象编程、命令式编程和函数式编程的网页开发客户端脚本语言,可以使用编写 Javascript 代码的方式,并使用 return 语句返回数据,而且这种方式最容易处理数据,本文中使用的就是这种方式。Javascript模式中也支持 Mock JS,通过 Mock.mock() 方式调用,详情可以查阅 Mock JS 官方文档。

通过编写Javascript脚本设置响应内容,还可以直接使用内置函数设置“请求体触发条件”相关内容, 设置的信息等同于在“请求体触发条件”输入框中的设置,如设置Header参数或者请求体参数等, 设置完成后,在测试时填写对应的参数进行触发。

示例:设置请求体参数,对触发条件进行判断输出符合条件的数值 判断触发条件“a”是否等于“eo_test”若等于则输出“成功”,否则输出“失败”。

在请求参数中输入status=1后,可以看出结果是code=1,这样就是根据输入条件动态mock返回数据的效果。当然,在“数据输出”中,我们可以添加代码,对数据的合理性进行检查,以确保数据的合理可信。

返回结果Mock

特点:编辑接口文档的返回结果的同时完成Mock规则配置。边写文档边完成Mock配置,无需额外工作量。

在Mock规则区域,可直接在Mock规则输入框中填写固定值,Mock API调用时直接返回其固定值。

智能内置Mock

特点:智能识别常用返回参数,自动填入预置Mock规则。零配置,无形中完成Mock规则填写。

系统已内置一套常用的智能Mock规则,你无需做任何配置,在文档中编写对应的字段名则会出现对应的Mock规则。实现Mock API零配置,无形中完成Mock规则填写。

比如: 字段名输入time,Mock规则会自动识别匹配出内置Mock规则,@datetime('yyyy-MM-dd HH:mm:ss')这种Mock规则,用户在使用过程中,使用效果无感知、不需要额外配置。

智能自定义Mock

特点:智能识别特殊返回参数,自动化填充自定义Mock规则。一次配置多次复用,提升Mock规则边写效率。

你可以通过智能自定义Mock配置,使得你在文档中编写某个字段名后,系统自动填入对应的Mock规则。实现字段Mock规则一次配置,永久复用。大大提高了工作效率,让您在工作中游刃有余。

把Mock规则和字段名的匹配规则预先自定义好,然后后续可以在实际使用的时候,填写对应的字段名可以输出对应的Mock规则。

比如

@ctitle: 随机生成一句中文标题。

@cword: 随机中文词组。

@datetime: 日期时间。

约束条件Mock

特点:根据字段约束条件自动生成对应的Mock数据。字段级多条件配置,还原最真实的随机数据。

对返回参数字段进行约束条件设置后,Mock规则输入框会自动填入占位符@eo.limit 并自动根据约束条件返回Mock数据。

在操作区域内点击更多设置,如字段长度,最大值最小值,和值可能性等。

Eolink的Mock解决方案的优势:

  • 能适配各种场景的Mock能力强;

  • 学习成本低,不需要额外编写代码;

  • mock能力更加智能,实现零配置;

  • mock服务和应用服务彼此分离,不会存在代码污染;

结语

Eolink在Mock方面表现的很强大,适用于不同的业务场景、适用于不同的使用人群,通过以上两种简单和高级的调用,不同之处是简单的 Mock配置简单,而高级 Mock是基于简单 Mock的增强,可以适应更加复杂的情况,结合多种智能配置方式搭建的Mock API 能力体系,满足了大部分用户对Mock能力的需求。

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

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

相关文章

微软推出 Hierarchical Transformer 实现更高准确率的语音评测

对于语言学习者来说,练习发音并获得及时准确的反馈,是提高口语水平的重要环节。多年来,微软一直深耕基于 Azure 认知服务的语音功能,不断优化语音评测[1]功能的底层技术,从准确率、流畅度、完整性和语音语调等方面&…

Cadence+SPB16.2入门教程(下)

弹出Create Net Class对话框,如图4.21所示。输入名称DDR_DATA,点击OK关闭对话框。 建立DDR_ADDR的过程也一样,同时选中网络XM1ADDR0-XM1ADDR15,XM1CASN、XM1CKE0、XM1CSN0、XM1RASN、XM1WEN后右键Create->Net Class。其它就不重复了。 然后将上一步建立的两个电气规则D…

chatgpt赋能Python-python_ijust

简介 Python ijust,是一款非常优秀的Python代码编辑器,它支持多种语言编程、自动补全、代码高亮、代码片段库和多种主题等众多特性。Python ijust 可以在Windows、macOS、Linux上运行,而且界面简洁、易用。 主要功能 代码高亮:P…

【MySQL新手到通关】第三章 基本的SELECT语句

文章目录 1. SQL 概述1.1 SQL 背景知识 1.2 SQL 分类2. SQL语言的规则与规范2.1 基本规则2.2 注释2.3 数据导入指令 3. 基本的SELECT语句3.1 SELECT ... FROM3.2 列的别名3.3 去除重复行3.4 空值参与运算3.5 着重号 4. 显示表结构5. 基本的过滤数据 1. SQL 概述 1.1 SQL 背景知…

计讯物联打造医疗设备远程质检“新神器”TG453,引领医疗设备数字化浪潮

方案背景 基于物联网的普及与推广,物联网技术在医疗行业得到更广泛的应用。在医院的日常诊疗工作开展中,CT、呼吸机、监护仪、注射泵、核磁共振、DR系统、工频X光机等医疗设备稳定无故障地运行对于医院、患者而言具有重要影响。医疗设备在长期使用过程中…

讨论:为什么越来越多的企业开始搭建属于自己的知识库?

随着信息技术的发展,人们可以在互联网上随时随地获取各种信息。企业作为一个独立的组织体系,其运营和管理需要依赖于大量的知识和信息。因此,建立一个属于自己的知识库,可以帮助企业更好地管理和共享知识,提高员工的工…

VS Code 大量 Java 新功能来袭!

大家好,欢迎来到 Visual Studio Code Java 的 4 月更新!在此博客中,我们将带来大量基础用户体验更新,其中包括调试功能改进、Maven 插件中的配置文件支持、全新 Java Project Explorer 的用户界面和 Spring Boot 项目的可视化增强…

2.shell脚本基本操作及案例

本文介绍了shell脚本的基本建立过程,并举了4个案例。关键是例3的shell脚本检测局域网ip地址机器是否宕机,例4的shell脚本获取本机ip地址 一、第一个shell脚本 1、定义解释器 #!/bin/bash echo "hello world" #! 是一个约定的标记…

[玩游戏想道理]底层能力提升

继续金铲铲中想道理; overview 很多熟悉的情况是调用记忆即可,但是新的情况则需要使用底层能力,包括不限于做事的方式倾向,对事物的深刻理解等等; 既有事情更多在调用和打磨记忆,新的事物更多调用和打磨底…

『C++』C++的IO流详解

「前言」文章是关于C的IO流 「归属专栏」C嘎嘎 「笔者」枫叶先生(fy) 「座右铭」前行路上修真我 「枫叶先生有点文青病」 「每篇一句」 就像山看水,水流山还在, 喜欢之人,只管远去, 我只管喜欢。 ——烽火戏诸侯《剑来》 目录 一…

留学热议话题:在美国可以用ChatGPT写作业吗?

今年,学术界最热议的话题要数人工智能技术非大语言数据模型ChatGPT了。随着ChatGPT等智能写作助手在学生群体中的应用和日益普及,极大程度地影响了学生们的传统学习方法。然而,在享受技术革新带来便利的同时,不恰当的运用这些软件…

rails routes的使用

Rails routes 是用于确定应该将请求发送到哪个控制器和操作的一种机制。在 Rails 应用程序中,可以通过定义路由来映射 URL 到控制器操作。可以使用 rails routes 命令查看当前应用程序中定义的所有路由。 以下是一些常见的用法: 查看所有路由&#xff…

从三个层次来介绍用于机器人主控板的设计思想

在很多人眼里,主控板有着密密麻麻的芯片引脚与PCB走线,看起来非常难的样子。其实恰恰相反,主控板的设计有着其特有的设计规律,其实说白了就像搭积木,在满足单片机最小系统的条件下,需要哪些功能&#xff0c…

chatgpt赋能Python-python_head_first

Python Head First:学习Python编程的必备指南 如果你是一位编程新手,尤其是对Python感兴趣,那么Head First Python是你需要阅读的书籍之一。这本书通过富有趣味性的教学方法,让你轻松理解Python编程语言。 了解Python编程 Pyth…

物联网通信协议-MQTT及使用python实现

MQTT概念及其原理 简述 MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的"轻量 级"通讯协议,该协议构建于TCP/IP协议上,由IBM在…

亚马逊云科技构建Serverless数据分析战略

亚马逊云科技Amazon EMR是行业领先的大数据分析服务,适用于使用开源框架进行PB级数据处理、交互分析和机器学习,它可以更快地运行大数据应用并且成本不到本地解决方案成本的一半。通过性能优化且兼容开源API的Spark、Hive和Presto版本,洞察时…

增加或修改现有apk的功能(apk功能扩展)

现有apk不能满足需要,又没有源代码,想要扩展其功能,是可以实现的。 本人根据多年修改apk的经验,总结如下: 一、扩展apk功能的原理及步骤 1、必要条件: 该apk能够被反编译为smali代码,也能够…

【2023五一杯数学建模】B题 快递需求分析 31页论文

【2023五一杯数学建模】B题 快递需求分析 31页论文及代码 1 题目 请依据以下提供的附件数据和背景内容,建立数学模型,完成接下来的问题:问题背景是,网络购物作为一种重要的消费方式,带动着快递服务需求飞速增长&…

Spring源码阅读:Spring事务执行流程

一、概述 Spring事务执行的流程如下图,我们将按照下面的执行顺序,介绍Spring的事务。 二、代码分析 (一)核心流程 TransactionAspectSupport#invokeWithinTransaction 事务处理核心伪代码 // 通过事务调用 protected Object i…

第12届蓝桥杯Scratch选拔赛真题集锦

第12届蓝桥杯Scratch选拔赛真题集锦 编程题 第 1 题 问答题 吃豆人游戏 题目说明 编程实现: 吃豆人游戏: 通过方向键控制吃豆人吃到水果,当水果全部被吃掉后游戏结束。具体要求: 1).点击绿旗,舞台上出现要求的角色与背景;每个格子内有一个水果和一个幽…