前端调试,模拟数据利器之Mock Server使用教程来啦~
文章目录
- 1 MockServer是什么
- 2 为什么要使用MockServer
- 3 MockServer的作用
- 4 搭建MockServer服务
- 4.1 部署MockServer服务详细步骤
- 4.1.1 第一种方式(推荐)
- 4.1.2 第二种方式
- 4.2 启动Shell脚本
- 4.3 访问MockServer UI界面
- 5 MockServer服务的基础使用
- 5.1 项目启动时,初始化Expectations
- 5.2 访问模拟的数据
- 5.3 Creating Expectations && Query Expectations
- 5.3.1 Creating Expectations
- 5.3.2 Query Expectations
- 5.4 clear某个不需要的path
- 5.5 clear所有的path
- 6 数据持久化
1 MockServer是什么
MockServer
其实就是一个用来模拟http(https)
请求响应结果数据的服务器。通过这个MockServer服务,我们可以极大地方便接口的调试。
2 为什么要使用MockServer
如今的业务系统模块越来越多,功能也越来越复杂。及时的与前端调试也迎来了一些小的挑战。
假设有一个场景:
新项目刚开始启动时,这时候后台部分的接口都没有开发完成,这时候如果前端需要调试页面,该怎么调试呢?
傻傻的等着后台开发完成再进行调试?不可能的,这样你会影响项目正常上线。那么模拟数据就显得非常重要了,如何快速有效的模拟真实场景的数据?
有两种方案:
- 通常情况下,后台会把请求接口Api的结果先定义好,写死在action层,然后返回给前端,但是这种方案现在已经不怎么用了,效率太低
- 现在比较流行的方案,一般会
搭建一些server来进行mock
,这样可以使得被开发功能的调试和测试功能能够正常进行下去
。而MockServer就可以有效的解决这个问题,这也是MockServer的出现的原因
网上找了张图片,可以很好的说明使用MockServer前后的不同,如下图所示:
使用mock之前:
使用mock之后:
使用了Mock Server之后,前端可以不再依赖与后台的业务接口
,在后台接口未开发完成时,可以模拟一些业务数据,来进行前台页面的调试,极大的节省了调试的成本
。
3 MockServer的作用
对于通过HTTP或HTTPS与之集成的任何系统,MockServer都可以用作以下用途:
对于任何的http或者https请求,可以结合具体的业务场景,配置mock,来模拟接口Api,返回一个具体的响应结果
代理一个记录,并且可以选择修改请求路径和响应的结果
同时代理某些请求和模拟其他请求(both a proxy for some requests and a mock for other requests at the same time)
When MockServer receives a request it matches the request against active expectations
that have been configured, if no matches are found it proxies
the request if appropriate otherwise a 404
is returned.
首先我们会配置active expectations
,当MockServer接收到与之匹配的http或者https请求时,就会返回匹配到的模拟的响应结果。如果没有匹配到active expectations
,那么就会看看是否有合适的代理,有的话会代理这些http请求,否则返回404:
HTTP/1.1 404 Not Found
content-length: 0
connection: keep-alive<Response body is empty>Response code: 404 (Not Found); Time: 33ms; Content length: 0 bytes
4 搭建MockServer服务
4.1 部署MockServer服务详细步骤
4.1.1 第一种方式(推荐)
添加maven依赖
<!-- mockserver --> <dependency><groupId>org.mock-server</groupId><artifactId>mockserver-netty</artifactId><version>5.11.1</version> </dependency>
启动MockServer
@PostConstruct public void startMockServer() {mockServer = startClientAndServer(1080);System.out.println("mock server【" + mockServer + "】 start..."); }
这样,即可实现基础的mock server服务部署。
4.1.2 第二种方式
从github上下载源码
git clone https://github.com/jamesdbloom/mockservice.git
进入项目根目录
cd mockservice
通过maven构建一个包含所有依赖的可执行jar包
./mvnw clean package
成功生成的可执行jar包,在
mockserver-netty/target/
目录下
mockserver-netty/target/mockserver-netty-5.11.1-jar-with-dependencies.jar
将打包好的可执行jar包,上传到Linux服务器上,启动成功后,MockServer即部署完成
4.2 启动Shell脚本
这里送给老铁们一个shell脚本,方便启动jar项目服务:
#!/bin/shDIR=$(dirname $(readlink -f "$0"))
JAR_NAME="mockserver-netty-5.11.1-jar-with-dependencies"JAR_FILE=${DIR}/${JAR_NAME}.jar
PID_FILE=${DIR}/${JAR_NAME}.pid
PID=$(cat ${PID_FILE})if [ $PID -gt 0 ];thenkill -9 $PIDrm -f ${PID_FILE}echo "mock server stop finished"
fi
java -Xms256m -Xmx256m -jar ${JAR_FILE} -serverPort 1001 & echo $! > ${PID_FILE}
4.3 访问MockServer UI界面
- 使用以下命令访问MockServer UI界面
http(s)://<host>:<port>/mockserver/dashboard
访问成功的UI界面,如下图所示:
MockServer UI界面可以看到MockServer内部的运行状态,主要包括以下部分:
- logs
- active expectations
- requests received
- proxied requests
5 MockServer服务的基础使用
5.1 项目启动时,初始化Expectations
首先创建一个配置类
ExpectationInit
,把需要初始化的期望初始化:package cn.smilehappiness.mockserver.expectation;import org.mockserver.mock.Expectation; import org.mockserver.server.initialize.ExpectationInitializer;import static org.mockserver.model.HttpRequest.request; import static org.mockserver.model.HttpResponse.response;/*** <p>* Expectation Initializer Class,用来初始化 expectation* <p/>** @author smilehappiness* @Date 2020/8/16 17:13*/ public class ExpectationInit implements ExpectationInitializer {@Overridepublic Expectation[] initializeExpectations() {return new Expectation[]{new Expectation(request().withPath("/simpleFirst")).thenRespond(response().withBody("some first response")),new Expectation(request().withPath("/simpleSecond")).thenRespond(response().withBody("some second response"))};}}
启动mock server服务时,初始化期望配置类
@PostConstruct public void startMockServer() {ConfigurationProperties.enableCORSForAPI(true);//初始化期望配置类ConfigurationProperties.initializationClass(ExpectationInit.class.getName());//持久化期望数据ConfigurationProperties.persistExpectations(true);mockServer = startClientAndServer(1080);System.out.println("mock server【" + mockServer + "】 start..."); }
以上两步,即可在MockServer服务启动时,初始化期望模拟数据。
5.2 访问模拟的数据
项目启动时,设置了两个简单的期望数据,可以通过Restful Api访问数据,访问格式:http://ip:port/path
比如: 访问http://localhost:1080/simpleFirst
【请求结果】
HTTP/1.1 200 OK
connection: keep-alive
content-length: 19some first responseResponse code: 200 (OK); Time: 32ms; Content length: 19 bytes
5.3 Creating Expectations && Query Expectations
创建和获取模拟的Expectations
期望数据
5.3.1 Creating Expectations
可以使用postman等工具,添加expectations,比如:
使用put
请求,http://localhost:1080/mockserver/expectation
(/mockserver/expectation为固定写法)
请求json串内容:
{"id": "test_mock","httpRequest" : {"path" : "/hello/mock","method":"POST"},"httpResponse" : {"body" : {"status": 200,"result": "Welcome to mock server!"}},"priority" : 10
}
需要说明的是,这里id需要保证唯一,因为同一个path,会根据这个主键id修改之前的内容
完整示例截图:
5.3.2 Query Expectations
访问刚才创建的期望数据:
使用post请求,访问链接http://localhost:1080/hello/mock
,即可访问到刚才创建的期望数据,如下图所示:
5.4 clear某个不需要的path
使用url:http://localhost:1080/mockserver/clear?type=EXPECTATIONS
例如:
日志如下:
5.5 clear所有的path
格式: curl -v -X PUT "http://localhost:1080/mockserver/reset
比如,笔者使用postman操作:
所有的期望数据都被清空了,这个操作需要谨慎
呀
至此,基础使用已经ok了,但是有个小问题,如果mock server重启了,那么UI界面上,数据都丢失了,那么,数据持久化也是需要解决的一个问题,下面介绍下,MockServer expectations 数据如何持久化
。
6 数据持久化
In MockServer expectations are only held in memory by default
. However, it is possible to persist expectations to the local file system
to ensure that they survive a restart of MockServer
.
上面这句话意思是,MockServer expectations默认把数据保存在内存中,但是,你可以把数据持久化到文件中,这样,再重启MockServer之后,数据不会丢失。
持久化大致需要三个步骤:
persistExpectations属性,需要使用以下方式开启(true)
ConfigurationProperties.persistExpectations(boolean persistExpectations)
使用以下方法,设置expectations持久化的路径
ConfigurationProperties.persistedExpectationsPath(String persistedExpectationsPath)
The file path used to save persisted expectations as json, which is updated whenever the expectation state is updated (i.e. add, clear, expires, etc)比如: 设置path为
persistedExpectations.json
当MockServer服务启动时,会通过以下方法加载持久化文件,并初始化文件中每一组的期望数据,The expected format of the file is a
JSON array
of expectations
ConfigurationProperties.initializationJsonPath(String initializationJsonPath)
注意:
为了确保下次MockServer启动时初始化JsonPath时加载持久化的期望,那么persistedExpectationsPath应该匹配,并且persistExpectations需要设置为true
配置后,重启MockServer,出现以下界面,说明持久化配置成功:
好啦,本部分内容先介绍到这里了,后续有用到代理
(比如使用代理,隔离单个服务等等)相关的内容再更新吧,这里面说的,基本上可以满足日常使用了,希望对老铁们有所帮助哈。
本文涉及到的相关代码已上传GitHub,需要的小伙伴们可以下载Code
如果GitHub网速不好的话,也可以使用另一个下载链接下载
参考资料链接:
https://github.com/mock-server/mockserver
https://www.mock-server.com/
写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,希望尽自己的努力,做到更好,大家一起努力进步!
如果有什么问题,欢迎大家评论,一起探讨,代码如有问题,欢迎各位大神指正!
给自己的梦想添加一双翅膀,让它可以在天空中自由自在的飞翔!
前端调试,模拟数据利器之Mock Server使用教程来啦~相关推荐
- 前端之模拟数据 - HackerVirus - 博客园
阅读目录 玩转前端之模拟数据 回到目录 玩转前端之模拟数据 博客园主页:http://www.cnblogs.com/handoing/ 是否还在为前端模拟数据头疼? 是否还在为后端返回数据格式较多内 ...
- 前端003_模拟数据接口_easymock
为了不影响大家的学习,如果后端的api数据还没有生成,可以先使用mock.js来模拟数据接口,提供对外服务的api接口. 第三章 1.Mock.js 解决什么问题 2.设么是Mock.js 3.使用E ...
- 前端项目模拟数据两种方式
文章目录 1. Mock.js 1.1 安装依赖包mockjs 1.2 在 src 目录下创建 mock 文件夹 1.3 准备模拟的数据 1.4 创建 mockServer.js 1.5 引入mock ...
- 前端 mockjs模拟数据
mockjs文档: Mock.js 1.下载mockjs npm install mockjs --save //开发环境 2.在src下新建mock文件并导入index.js import Mock ...
- 阿里云大数据利器之-RDS迁移到Maxcompute实现动态分区
摘要: 当前,很多用户的业务数据存放在传统关系型数据库上,例如阿里云的RDS,做业务读写操作.当数据量非常大的时候,此时传系关系型数据库会显得有些吃力,那么会经常有将mysql数据库的数据迁移到[大数 ...
- python爬虫利器之scrapy的基本教程
安装 Scrapy 是一个十分强大的爬虫框架,使用 pip 来安装 scrapy 需要安装大量的依赖库,至少需要的依赖库有 Twisted,lxml,pyOpenSSL.而在不同平台环境又各不相同,所 ...
- html通过jsp连接sql数据库数据,jsp连接sql Server数据库教程(示例代码)
jsp连接sqlServer数据库教程: 首先讲下我用的工具版本以供参考: jar包:jtds1.3.1.jar 下载地址:点击进入 数据库:SQL Server2012 服务器:Tomcat8.0 ...
- mock模拟的数据能增删改查吗_使用Swager API Docs和easy-mock生成模拟数据
前面文章已经搭建了本地的easy-mock 本地搭建Easy-Mock实现模拟数据 常见的Mock方式: 将模拟数据直接写在代码里 利用javascript拦截请求 利用Charles.Fiddler ...
- mock模拟接口测试 vue_Easy Mock以及Vue+Mock.js模拟数据
Easy Mock以及Vue+Mock.js模拟数据 一.Mock.js简介 Mock.js是一个可以模拟后端数据,也可以模拟增删改查操作的js库 基础语法规范 数据模板中的每个属性由 3 部分构成: ...
- Mock.mock()生成模拟数据
在做前端项目时,如果没有测试数据,可以通过mock来生成模拟数据. Mock.mock( rurl?, rtype?, template|function( options ) ) 根据数据模板生成模 ...
最新文章
- CTOR在区块熵编码中的优点
- [置顶] 分步实现具有分页功能的自定义DataList控件【附源代码】
- 理解离散傅立叶变换(三.复数)
- recaptcha_与reCAPTCHA的Spring集成
- springboot_yml配置
- 权威预测:未来一年,企业云服务将会如何发展?
- c# 调用cmd WaitForExit 死锁问题解决方案
- 彻底搞定 Java 注解
- 在对话框中进行消息映射((CEdit*)GetDlgItem(IDC_EDIT_TEST))-SetWindowText(this is a edit box)...
- 爱折腾星人必备工具,系统重启还原精灵-影子卫士
- 顶级 OEM 游戏整机到底行不行 — 惠普 OMEN 暗影精灵 6 游戏台式旗舰版评测
- 你真正了解图像金字塔吗?详细介绍拉普拉斯金字塔和高斯金字塔(pyrDown() and pyrUp()),参考《OpenCV轻松入门:面向Python》
- arduino超声波测距接线图详细_Arduino Uno + HY-SRF05 超声波测距模块详细讲解演示实验...
- HbuilderX 自有证书生成
- JAVA计算两条直线的交点(判断两条线段相交)
- 蓝牙baseband概述
- Python数据结构与算法基础|第五期:代码实现——循环队列的链式存储结构
- 智能工厂在智能制造企业中的实践应用-东杰智能
- 经济寒冬之下如何逆袭?强烈推荐几位大牛!
- 强化学习:函数逼近思想
热门文章
- Windows8.1-KB2999226-x64安装提示此更新不适用你的计算机
- java实现房屋出租系统
- 如何将数据库文件进行压缩
- 计算机二级vb语言题库百度云,[计算机二级vb题库]计算机二级VB语言程序设计考试题及答案.doc...
- 通达信手机版分时图指标大全_今天教大家怎么把通达信副图指标源码导入手机通达信软件上。...
- 用 VC2012 产生脱离VC运行库的 C/C++ 程序
- 怎么在安卓手机上阅读txt小说,小说阅读器推荐
- 元宇宙的车,迷你世界上不了
- TCP/IP四层模型
- Cent OS 7 配置静态ip