Mock工具之Moco使用教程

article/2025/9/15 12:02:06

目录

    • 一、什么是Moco
    • 二、安装&配置
    • 三、接口配置&测试
        • 3.1 第一个简单的请求:
        • 3.2 Get请求:
        • 3.3 Post请求:
        • 3.4 返回值为Json格式的请求:
        • 3.5 带cookie信息才能访问的post请求:
        • 3.6 重定向请求:
        • 3.7 前后端联调mock实战:
    • 四、搭建Moco服务器供其他人调用

一、什么是Moco

在开发过程中,经常会使用到一些http网络接口,而这部分功能通常是由第三方开发团队或者是后端同事进行开发的,在我们开发时不能给我们提供服务,这为我们的联调和测试造成了麻烦,这个时候就需要使用到mock测试。

Moco是一个简单搭建模拟服务器的程序库/工具:Moco会根据一些配置,启动一个真正的HTTP服务(会监听本地的某个端口)。当发起请求满足一个条件时,它就给回复一个应答。

二、安装&配置

Jar包下载:https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.11.0/moco-runner-0.11.0-standalone.jar
Moco文档:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md

启动命令:
java -jar ./moco-runner-0.11.1-standalone.jar http -p 9090 -c all.json
-p 就是port 端口号, -c 后面就是配置接口内容的json文件。

启动成功效果:

在这里插入图片描述

三、接口配置&测试

3.1 第一个简单的请求:

all.json文件中增加以下request&response内容

[{"description": "这是第一个demo","request": {"uri":"/demo"},"response": {"text":"这是第一个demo","headers":{"Content-Type":"text/html;charset=gbk"}}}
]

注意:moco模拟请求返回中文乱码问题,添加响应头编码格式为gbk,就可以解决返回结果中文乱码

"headers":{"Content-Type":"text/html;charset=gbk"}

测试接口请求结果:

在这里插入图片描述

3.2 Get请求:

{"description": "这是一个带参数的Get请求的Demo","request": {"uri": "/getWithParam","method": "get","queries": {"name": "张三","sex": "20"}},"response": {"text": "我张三会来了","headers":{"Content-Type":"text/html;charset=gbk"}}
}

测试接口请求结果:http://localhost:9090/getWithParam?name=张三&sex=20

在这里插入图片描述

3.3 Post请求:

{"description": "这是一个带参数的post请求","request": {"uri": "/postWithParam","method": "post","forms": {"name": "张三","sex": "man"}},"response": {"text": "我张三带着参数回来了","headers":{"Content-Type":"text/html;charset=gbk"}}
}

测试接口请求结果:

在这里插入图片描述
注意:带中文值的入参,如果换成x-www-form-urlencoded格式(post请求的默认格式),则会请求失败:

在这里插入图片描述
在这里插入图片描述
这是Moco目前的问题,没有解决,英文的入参则没有问题:

在这里插入图片描述

3.4 返回值为Json格式的请求:

{"description": "电话号码注册post请求","request": {"uri": "/postWithPhone","method": "post","forms": {"type": "1"}},"response": {"json":{"code": "0000","msg": "请求成功","data": {"userId": 111111,"phone": "12011111111","cardNo": "8000000000"}}}
}

测试接口请求结果:

在这里插入图片描述

3.5 带cookie信息才能访问的post请求:

{"description": "这是一个需要带有cookie信息才能访问的post请求","request": {"method": "post","uri": "/postWithCookie","cookies": {"login":"true"},"json": {"name": "zhangsan","age": "18"}},"response": {"status":200,"json": {"name":"张三","status": "1"}}
}

测试接口请求结果:

在这里插入图片描述
在这里插入图片描述

3.6 重定向请求:

{"description": "重定向到百度","request": {"uri":"/redirect"},"redirectTo":"http://www.baidu.com"
}

测试接口请求结果:

在这里插入图片描述

3.7 前后端联调mock实战:

  1. moco本地运行起来之后,后端server地址: 127.0.0.1:9090
  2. 通过前端页面操作请求来调用mock接口试验:
    在这里插入图片描述

四、搭建Moco服务器供其他人调用

既然本地可以使用,那么放在服务器上去运行,则可以让更多的人(包括研发)使用,提供一个简易的mock服务。下载Moco的包到服务器上并解压,然后运行:

在这里插入图片描述
访问Moco服务:http://服务器IP:9090/postDemo
在这里插入图片描述
服务器上mock返回日志:

在这里插入图片描述

注意点:

  1. 前面说过本地运行时,如果返回内容有中文,需要加上一段header指定格式为gbk才能正常显示中文。测试时发现服务器上运行,mock返回内容Json文件中,反而需要去掉这一段,返回内容才能正常显示中文,有这一段反而会中文显示乱码:
"headers":{"Content-Type":"text/html;charset=gbk"
}
  1. 如果服务器上想让mock服务一直运行,使用命令:
nohup java -jar  ./moco-runner-0.11.1-standalone.jar http -p 9090 -c all.json > /dev/null 2> /dev/null &

如果只是在前面加nohup,会报错:

nohup: ignoring input and appending output to ‘nohup.out’

原因是nohup执行会产生日志,默认是写到nohup.out文件中,文件没有写入权限。需要配合后面的命令 > /dev/null 2> /dev/null & 将 nohup 的日志输出到 /dev/null,这个目录类似于linux的一个黑洞,会让所有到它这的信息自动消失。

如果想保留日志,可以新建一个文件,比如moco.log, 然后nohup时指定日志写到moco.log中:

nohup java -jar  ./moco-runner-0.11.1-standalone.jar http -p 9090 -c all.json >moco.log &

日志信息记录如下:

在这里插入图片描述

=====================================================================================

以上就是本次的全部内容,如果对你有帮助,欢迎关注我的微信公众号:程序员杨叔,各类文章都会第一时间在上面发布,持续分享全栈测试知识干货,你的支持就是作者更新最大的动力~
在这里插入图片描述


http://chatgpt.dhexx.cn/article/9O6l3b8t.shtml

相关文章

mock功能

目标 了解mock的作用及使用场景; mock使用场景 mock:假的 前端程序员提到的mock数据的含义是:真的假数据 真的:符合接口规范要求的。 假数据:数据是人为创建出来的,不是真正的业务数据。 什么时候需…

mock的介绍

1.什么是mock mock测试是以可控的方式模拟真实的对象行为。程序员通常创造模拟对象来测试对象本身该具备的行为,很类似汽车设计者使用碰撞测试假人来模拟车辆碰撞中人的动态行为 2.为什么要使用mock 之所以使用mock测试,是因为真实场景很难实现或者短…

Mock介绍

mock的定义(what): mock是在测试过程中,对于一些不容易构造/获取的对象,创建一个mock对象来模拟对象的行为 为什么要使用mock(why): 在做单元测试过程中,经常会有以下的…

Mockito单元测试

文章目录 Mockito单元测试为什么要使用Mock?导入依赖import导入包使用Mock模拟测试某个类中的某个方法是否可以成功执行使用Mock模拟某个类的方法,自己给这个方法返回我们指定的值使用Mock模拟某个方法调用后会抛出指定的异常使用Mock模拟测试某个类中的某个方法(加…

javascript 中怎么判断为数字类型

javascript中判断变量是否为数字类型抄的方法有两种: 方法一: function isnum(s) { if(s!null){ var r,re; re /\d*/i; //\d表示数字,*表示匹配多个数字 r s.match(re); return (rs)?true:false; } return false; } 方法二: function isnu…

js判断字符串是不是一个纯数字

1.使用隐式转换判断 使用parseInt()/parseFloat()会把其他类型转换为数值,转换结果为数值或NaN,转换字符串的时候,头部内容有数值就会截取前面,如123456aff789bb转成123456,后面即使有数字也不会转换处理,开头如果是字…

javaScript 判断是否为数值类型的三种方法

第一种方法:isNaN(value) isNaN : isNaN() 函数用于检查其参数是否是非数字值。 返回true则判断为非数值。缺点:空字符串,空格 ,null会做为数字0进行处理,结果为falsehttps://www.w3school.com.cn/js/jsref_isnan.anusp 第二种方法…

JS中判断变量是否为数字方法

推荐教程:《JavaScript视频教程》 JavaScript 是一种动态类型语言,这意味着解释器在运行时确定变量的类型。实际上,这也允许我们在相同的代码中使用相同的变量来存储不同类型的数据。如果没有文档和一致性,我们在使用代码时并不总…

matlab绘制图形中,常用函数调用(num2str,disp,gcf,hold on,plot,axis,subplot,line,stairs,grid,set,gca)

num2str 将数字转换为字符数组 s = num2str(A) 将数字数组转换为表示数字的字符数组。输出格式取决于原始值的大小。 num2str对于使用数值标注和标题绘图非常有用。 s = num2str(A,precision) 返回一个字符数组,表示具有精度指定的最大有效位数的数字。 s = num2str(A,fo…

Matlab中num2str函数使用

目录 语法 说明 示例 浮点值的默认转换 指定精度 指定格式 num2str函数将数字转换为字符数组。 语法 s num2str(A)s num2str(A,precision)s num2str(A,formatSpec) 说明 s num2str(A) 将数值数组转换为表示数字的字符数组。输出格式取决于原始值的量级。num2str 对…

C/C++ split函数 num2str str2num函数

C/C split函数,num2str及str2num函数实现 在C98及其以下版本的C/C中,没有现成的字符串split函数和num2str及str2num函数,对于竞赛不能使用C11的我来说非常头疼,通过学习stringstream和strtok实现了自己的split函数,通过stringstr…

matlab 中num2str函数的使用

运行ECO代码报错:转义字符 ‘\d’ 无效。有关支持的特殊字符,请参阅 ‘doc sprintf’。 num2str函数功能:将数字转换为字符串 具体所有功能可见官网。 这里使用的格式为: str num2str(A, format) 将 format 指定的格式应用到 A …

js基础运用——js用*打印三角形,菱形

js基础运用 新手见解,有不足或更简单的方法希望各位指点 1.用*排列直角三形 (图一) (图二) 图一图二是js语句利用*号画出来的直角三角形,方法思路都一致,下面以图一为例讲一下本人所用的方法…

java:打印十字图

java:打印十字图 题目 问题描述 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示:..$$$$$$$$$$$$$.. ..$...........$.. $$$.$$$$$$$$$.$$$ $...$.......$...$ $.$$$.$$$$$.$$$.$ $.$...$...$...$.$ $.$.$$$.$.$$…

JAVA 利用JFram,JPanel,JScrollPane简单文本框实现

****1.JFram 支持通用窗口的所有基本功能 2…JPanel是一个无边框,不可以被移动的,放大的,缩小的,或者关闭的面板,默认布局是FlowLayout(也可用setLayout()来设定)** 3……

deflater java_Java Deflater finished()用法及代码示例

如果已到达压缩数据输出流的末尾,则java.util.zip中Deflater类的finished()函数将返回true。 函数签名: public boolean finished() 用法: d.finished(); 参数:该函数不需要参数 返回类型:该函数返回布尔值,即如果所有…

jQuery API ( 三 ) -------- 链式编程 与 修改样式方法

今天这篇文章是 jQuery API 的第三篇,今天心情很好,因为破了300粉,希望所有代码人前端人在编程与写作的路上都能一帆风顺,全都早日拿认证。okk言归正传,这篇文章将带大家走进链式编程的世界,这也是 jQuery …

jsfiddle 使用教程

最近有许多的Css 3 demo,因此为了方便查阅,就将demo部分放在 jsfiddle ,方便日后翻阅。 这是 JSFIDDLE 的官网文档,都是英文,不过对照看还是可以的:官方文档 HTML区域: 它的HTML区域已经包含 ht…

Jfinal 框架 在Html页面使用 #if(调用java方法) #end

欢迎转发分享, 转发请附上本文地址: https://blog.csdn.net/Luoxianxun/article/details/106399780 一、实现需求 实现在html 中使用 #if(调用java类中的方法) #end; 二、使用技术 JFinal后台框架 JFinal 官方文档:https://jfi…

java文本框代码_Java Swing JTextField文本框的代码示例

1. 概述 官方JavaDocsApi: javax.swing.JTextField JTextField,文本框。JTextField 用来编辑单行的文本。 JTextField 常用构造方法: /* * 参数说明: * text: 默认显示的文本 * columns: 用来计算首选宽度的列数;如果列设置为 0,则首选宽度将…