前端调试,模拟数据利器之Mock Server使用教程来啦~

article/2025/9/18 4:16:56

文章目录

  • 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/

写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,希望尽自己的努力,做到更好,大家一起努力进步!

如果有什么问题,欢迎大家评论,一起探讨,代码如有问题,欢迎各位大神指正!

给自己的梦想添加一双翅膀,让它可以在天空中自由自在的飞翔!


http://chatgpt.dhexx.cn/article/kSMDqM2Z.shtml

相关文章

浅谈 Mock Server

What&#xff1f;什么是 Mock Server Mock 是模拟的意思。在测试中&#xff0c;通常表述为&#xff1a;对测试过程中不容易构造或者不容易获取的物件&#xff0c;用一个虚拟的物件来进行模拟的一个过程。能够提供 Mock 功能的服务就叫作 Mock Server。 Mock Server 通过模拟真…

Mock Server 入门

Mock Server介绍 什么是mock ? 我在去年的时候介绍一篇幅 python mock的基本使用&#xff0c;http://www.cnblogs.com/fnng/p/5648247.html 主要是针对单元测试的应用&#xff0c;它可以很方便的解除单元测试中各种依赖&#xff0c;大大的降低了编写单元测试的难度。 什么是Mo…

Matlab解决脚本中中文乱码问题

首先下载字体yahei consolas hybrid。百度网盘地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1Zv2FMt3uow7DZix2rtAbrA 提取码&#xff1a;am4d 然后将下载的字体保存在C:\Windows\Fonts中&#xff0c;启动Matlab2018a这里使用的是2018a版本&#xff0c;其他版…

WEB UI自动化测试之AutoMagic自动化测试

AutoMagic自动化测试平台 AutoMagic 是一个基于WebUI的自动化管理平台。为什么叫AutoMagic呢&#xff1f;因为自动化&#xff08;Automation&#xff09;在执行起来的时候是一个很神奇的事情&#xff0c;它可以无人值守的模拟人的操作&#xff0c;就像魔术&#xff08;Magic&a…

Jupyter Notebook从入门到精通

下载 本课程练习完整代码 Jupyter Notebook&#xff1a; https://gist.github.com/zgpeace/8d3eb8c803a54d1ca797fa26cb68bd4c 财富500强 csv下载 https://github.com/zgpeace/fortune500.git 1. 什么是 Jupyter 笔记本&#xff1f; Jupyter Notebook 是一个非常强大的工具&…

dev shm mysql_新特性:/dev/shm对Oracle 11g的影响

ORACLE 从11g版本开始&#xff0c;引入了一个自动内存管理(Automatic Memory Management)特性&#xff0c;该特性需要更多的共享内存(/dev/shm)&#xff0c;因此如 /dev/shm对Oracle 11g的影响: ORACLE 从11g版本开始&#xff0c;引入了一个自动内存管理(Automatic Memory Mana…

Git分布式版本控制工具

Git分布式版本控制工具 文章目录 Git分布式版本控制工具1、目标 2、概述2.1、开发中的实际场景2.2、版本控制器的方式2.3、Git工作流程图 3、Git安装与常用命令3.1、Git 环境配置3.1.1 下载与安装3.1.2 基本配置3.1.3 为常用指令配置别名3.1.4 解决 GitBash 乱码问题 3.2、获取…

关于我在windows使用volatility取证这档事

官网下载地址&#xff1a;https://www.volatilityfoundation.org/releases volatility3的官方文档&#xff1a;https://volatility3.readthedocs.io/en/latest/basics.html 下载 看清有两个版本&#xff0c;用法不一样 第一次我下载了Volatility 2.6 Windows Standalone Exe…

DLNLP学习笔记03(Speech Recognition: LAS模型)

Listen, Attend, and Spell (LAS) [Chorowski. et al., NIPS’15] 论文地址&#xff1a;https://arxiv.org/pdf/1508.01211.pdf 1 模型简介&#xff1a; 2 Listen&#xff1a;其中Encoder可以为RNN&#xff0c;CNN或者RNNCNN。 Listen-down sampling&#xff1a;&#xff08;RN…

On Device Debug!IDA+GDB trace automagic.apk in s1

2019独角兽企业重金招聘Python工程师标准>>> http://forum.xda-developers.com/showthread.php?t2050393 Well... I have attached a debugger to native code, set breakpoints, analyzed registers, memory, etc. It wasnt that easy though. It took me severa…

【Jetson Nano 入门】环境配置汇总

文章目录 前言一、镜像烧写二、PWM风扇自动调速三、使用MicroUSB在电脑打开终端四、VNC实现局域网及网线直连通信五、SSH文件传输六、状态监控软件Jtop七、检查CUDA、OpenCV及cuDNN八、USB摄像头测试软件Camorama九、CSI摄像头测试十、实现Yolov4-tiny的USB摄像头实时检测 前言…

WEB UI自动化测试之AutoMagic自动化测试平台开源

作者介绍&#xff1a; 网名: Ray 介绍&#xff1a;笑起来像个孩子&#xff0c;冷起来是个迷。 博客&#xff1a;http://www.cnblogs.com/tsbc/ 2018年3月29日&#xff0c;Ray说准备把AutoMagic自动化测试管理平台开源了&#xff01;&#xff01;&#xff01; 这是个好消息&…

三星s20 android auto,Automagic一个更简单的方式来自动化您的Android手机 | MOS86

你有没有想过你的智能手机会在你回家的时候开始播放音乐&#xff1f;当你关闭社交网络的时候怎么样&#xff1f;Automagic是一种替代方案&#xff0c;通过使用易于理解的流程图执行许多相同的任务&#xff0c;向用户提供了一种更简单的自动化Android手机的方法。 Automagic如何…

AutoMagic自动化测试平台简介

PS:给想做自动化平台同学一点思路。 AutoMagic 是一个基于WebUI的自动化管理平台。为什么叫AutoMagic呢&#xff1f;因为自动化&#xff08;Automation&#xff09;在执行起来的时候是一个很神奇的事情&#xff0c;它可以无人值守的模拟人的操作&#xff0c;就像魔术&#xff0…

AutoMagic设计思路简介及新增自定义关键字实例

目录 简介 AutoMagic介绍 SeleniumKey介绍 自定义关键字 简介 AutoMagic 是一个基于WebUI的自动化管理平台。为什么叫AutoMagic呢&#xff1f;因为自动化在执行起来的时候是一个很神奇的事情&#xff0c;它可以无人值守的模拟人的操作&#xff0c;就像魔术&#xff08;Magic&am…

AutoMagic-开源自动化平台的容器化构建

github上看到AutoMagic自动化平台开源了&#xff0c;一时手痒&#xff0c;就试着搭了一套环境&#xff0c;现在把思路和大家说一说。 AutoMagic从其工作分工分两部分&#xff1a; 1&#xff1a;Web端管理平台 管理平台基于Python Django框架Mysql开发&#xff0c;主要用来管理自…

Automagic Premium 安卓上的自动化神器

每当我使用手机时&#xff0c;就对各种App的签到领奖非常反感&#xff0c;如果不签好像吃了亏&#xff0c;签一次花的时间自己也觉得不值。这时候我就在想&#xff0c;如果有一个App&#xff0c;能够自动帮我完成这种每天重复执行的任务就好了。之前找到一个叫uiautomator2的py…

[重磅消息]AutoMagic自动化测试平台开源

作者介绍&#xff1a; 网名: Ray 介绍&#xff1a;笑起来像个孩子&#xff0c;冷起来是个迷。 博客&#xff1a;http://www.cnblogs.com/tsbc/ 2018年3月29日&#xff0c;Ray跟我说准备把AutoMagic自动化测试管理平台开源了&#xff01;&#xff01;&#xff01; 这是个好消息&…

AutoMagic使用说明

简介 自动化测试管理平台&#xff0c;可以进行用户、产品、项目、模块、测试用例、测试元素、测试关键字、测试报告的管理等。 Github地址&#xff1a;https://github.com/radiateboy/automagic/ 用户和产品管理 本平台是自动化管理平台&#xff0c;整个平台结构是 用户>产品…

AutoMagic使用说明以及图文操作步骤

一、简介 自动化测试管理平台&#xff0c;可以进行用户、产品、项目、模块、测试用例、测试元素、测试关键字、测试报告的管理等。 二、平台结构设计 三、用例关系 四、用户和产品管理 本平台是自动化管理平台&#xff0c;整个平台结构是 用户>产品>项目>模块>…