Mockserver之Moco框架搭建使用
- 客户要求进行完整的产品展示,人员和时间都有限,来不及开发后端服务。。。
- 工期比较紧的项目,前端已开发完成,需要调试,后端接口还未开发完成。。。
- 公司某个项目依赖于第三方服务,但是第三方服务不方便频繁调用。。。
实际的工作当中,从商务到开发再到测试,经常会遇到上述所说的情况,如此的反复就造成了项目
的进度受限,这被称为短板效应。此时,Moco框架可以很好的解决这些问题。
一、Moco简介
Moco是基于Java开发的开源项目,是一个简单搭建模拟服务器的框架,可以模拟http、https、
socket等协议。其运行原理是Moco会根据一些配置,启动一个真正的HTTP服务(会监听本地的某
个端口)。当发起的请求满足配置中的条件时,会返回指定的响应数据。
Moco有两种使用模式:API模式和独立运行模式,如果是编写Java应用或者以其它JVM上的语
言编写的应用,可以采用直接调用API的模式;独立运行模式就是下载moco服务jar包,然后根据实
际需要编写配置文件或者进行二次开发。
二、环境配置
1.安装JDK并配置好环境变量,这个不再细说,大家自行百度。
2.下载服务jar包:Moco下载
下载完成的jar包是这样的 moco-runner-1.1.0-standalone.jar ,本文采用的是最新版本。
三、运行Moco
我们新建一个文件夹,命名为Moco,把jar包放在这里,新建test.json文件,内容如下:
[ { "response": { "text": "Hello world!" } } ]
在Moco文件夹中点击鼠标右键打开终端,输入以下命令:
java -jar moco-runner-1.1.0-standalone.jar start -p 8080 -c test.json
<path-to-moco-runner>:jar包存放路径,我这里在同一个文件夹,直接输入jar包名字
<monitor-port>:服务监听的端口,设置一个未被占用的端口
<configuration-file>:配置文件存放路径
如下图中所示,表示启动成功:
此时,在浏览器中输入: http://localhost:8080 可以看到Hello word!,说明我们搭建的模拟
服务器可以正常使用了。
四、Moco常用配置参数
Moco主要致力于服务器的配置,目前只有两种API:Request 和 Response。两种API都有
各自的属性,在配置使用的过程中,一定要遵循这些方法。
Request 请求
有14个固定属性: method, headers, json, factory, uri, text, cookies, xpaths,json_paths,
version, file, queries,path_resource,forms 。
Response 响应
有12个固定属性: status, attachment, headers, version, factory, file,text, proxy, cookies,
json, latency, path_resource 。
1.普通的GET请求
{
"description": "查找书籍", "request" : { "method" : "get", "uri" : "/article/book/" }, "response" : { "text" : "响应内容" } }
2.GET方法带参数
{
"description": "查找具体书籍", "request": {
"method": "get"
"uri": "/article/book", "queries": { "name": "kaka", "id": "75" } }, "response": { "text": "响应内容" } }
3.POST方法定义请求头和JSON请求体
[ { "description": "登录", "request": { "uri": "/login", "method": "post", "headers": { "Content-Type": "application/json" }, "json": { "username": "13812345678", "password": "123456" } }, "response": { "text": "login success" } } ]
4.定义响应结果为JSON格式
[ { "description": "登录", "request": { "uri": "/login" }, "response": { "headers": { "Content-Type": "application/json;charset=UTF-8" }, "json": { "code": "00", "msg": "登录成功", "data": { "userId": 5, "token": "jvuRbbA5EKPzJTfZbDAY9SMzq40YBfws" } } } } ]
五、Moco实战应用
1.单体配置
将所有的接口请求和返回数据写入到同一个json文件中,这种配置适用于请求报文和响应结果
内容不大的情况,如下图所示将整个配置写入到 config.json 中:
[ { "description": "登录", "request": { "uri": "/login", "method": "post", "headers": { "Content-Type": "application/json" }, "json": { "username": "13312345678", "password": "123456" } }, "response": { "headers": { "Content-Type": "application/json;charset=UTF-8" }, "json": { "retCode": "00", "retMsg": "success", "data": { "userId": 6, "token": "ked6jsdXkjdwm37dy6" } } } } ]
在终端中运行启动命令: java -jar D:\Moco\moco-runner-1.1.0-standalone.jar start -p 8080 -c config.json
服务启动后,使用接口测试工具调用该配置中的接口。
2.全局配置
Moco支持在全局的配置文件中引入其他配置文件,我们可以根据实际需要分别定义配置文件,然后在全局
文件中引用。这样,既便于管理,又轻松的解决了接口请求报文或响应数据太大不方便查看的问题。
a.在Moco文件夹中创建login文件夹,在login文件夹中创建 local_login_req.json 和 local_login_res.json 两个
文件;
b.在Moco文件夹中创建 global_settings.json 文件
在 local_login_req.json 中写入:
[ { "description": "登录", "request": { "uri": "/login", "method": "post", "headers": { "Content-Type": "application/json" }, "json": { "username": "13300001122", "password": "123456" } }, "response": { "headers": { "Content-Type": "application/json;charset=UTF-8" }, "file": "./login/local_login_res.json" } } ]
在 local_login_res.json 中写入:
[ { "retCode":"00", "retMsg":"登录成功", "data":{ "userId":2, "token":"ked6jsdXkjdwm37dy6xm" } } ]
在 global_settings.json 中写入:
[ { "include":"login/local_login_req.json" } ]
准备完成后,在当前目录的终端中输入: java -jar moco-runner-1.1.0-standalone.jar start -p 8080 -g global_settings.json
注意:在启动服务的命令中, -c 是加载单体配置文件, -g 是加载全局配置文件。两者不可以混淆,否则
配置文件解析会报错。
Moco开源链接:https://github.com/dreamhead/moco