有什么工具可以快速建立起一个Mock服务呢?

Moco

GitHub项目主页:https://github.com/dreamhead/moco

Moco之所以很受欢迎是因为这个项目主要特点是:简单、轻量、功能完全够你用。

安装与配置

下载地址:https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/1.1.0/moco-runner-1.1.0-standalone.jar

整个Moco服务就是一个jar包,如果想要启动它只需要你本地安装了Java,然后执行一个命令。

java -jar moco-runner--standalone.jar http -p 12306 -c foo.json
  • -p 启动的服务端口号
  • -c 配置文件路径

这个json格式的配置文件,才是Moco的核心。你想要模拟什么内容的返回,都靠它来决定。

编写配置文件

我们首先按照官方给出的示例,新建一个foo.json,模拟一个最简单的接口返回。

[  {    "response" :      {        "text" : "Hello, Moco"      }  }]

(foo.json)

此时启动Moco服务

java -jar moco-runner--standalone.jar http -p 12306 -c foo.json

访问 http://localhost:12306,你会看到一个Html响应,内容为:Hello, Moco



java模拟console软件链接交换机 java mock 模拟接口_mock模拟接口测试

moco1.jpg

配置文件语法规范

学会了它的简单使用,根据我的风格,下面就要介绍这个Json配置文件里,到底都能写什么?如何模拟复杂一点的需求?

总体格式

我们稍微观察一下就会发现,配置文件格式很简单。总体是一个大的列表,每一个接口就是一个大的{ }。

配置二级路径

现在的Moco服务只有一个地址,就是本地12306。我想继续配置二级、三级路径,比如增加一个/user/login代表登录接口。只需要在当前接口的区域增加一个request,填写url皆可。格式如下:

[  {    "request" : {"uri": "/user/login"},    "response" : {"text" : "Hello, Moco"}  }]

访问 http://127.0.0.1:12306/user/login



java模拟console软件链接交换机 java mock 模拟接口_json_02

moco2.jpg

模拟一个Json格式的返回
[  {    "request" : {    "uri": "/user/login",     "method" : "get",    },        "response" : {    	"status": 200,    	"headers": {"content-type": "text/x-json;charset=UTF-8"},    	"json": {"code": 0, "message": "login"}	}  }]

访问 http://127.0.0.1:12306/user/login



java模拟console软件链接交换机 java mock 模拟接口_json_03

moco3.jpg

携带请求参数--query
[  {    "request" : {    	"uri": "/user/login",    	 "queries": {            "name": "admin",            "pwd": "123456"        } 	},    "response" : {    	"status": 200,    	"headers": {"content-type": "text/x-json;charset=UTF-8"},    	"json": {"code": 0, "message": "login"}	}  }]

访问:http://127.0.0.1:12306/user/login?name=admin&pwd=123456



java模拟console软件链接交换机 java mock 模拟接口_mock模拟接口测试_04

moco4.jpg

匹配请求参数--query
[  {    "request" : {    	"uri": "/user/login",	    "queries": {	       "page": { "match": "[0-9]{1,}" }	    } 	},    "response" : {    	"status": 200,    	"headers": {"content-type": "text/x-json;charset=UTF-8"},    	"json": {"code": 0, "message": "login"}	}  }]

访问:http://127.0.0.1:12306/user/login?page=7



java模拟console软件链接交换机 java mock 模拟接口_配置文件_05

moco5.jpg

Post 请求参数--form表单
[  {    "request" : {    	"uri": "/user/login",    	"method" : "post",	    "forms": {          "name" : "admin",          "pwd"  : 123456        } 	},    "response" : {    	"status": 200,    	"headers": {"content-type": "text/x-json;charset=UTF-8"},    	"json": {"code": 0, "message": "login"}	}  }]

使用Postman访问:http://127.0.0.1:12306/user/login



java模拟console软件链接交换机 java mock 模拟接口_mock模拟接口测试_06

moco6.jpg

我们演示了Moco Json Api的基本语法使用,包括模拟各种请求参数格式和响应格式,更多详细内容大家参考它的官方文档,里面有很清晰地描述。

https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md

Moco功能强大,常规的Http场景比如:Cookie、重定向全部支持。但是习惯平时深度思考的同学,肯定会觉得哪里不对。

我们现在的Mock服务还有很多缺点,比如无法根据参数的不同,动态返回响应内容;无法筛选请求(如果要Mock的话,所有的请求都要在Moco启动的服务器中处理,想保留部分接口不使用Mock功能就做不到)。我们在下个小节中会进一步改造我们利用Moco搭建起来的Mock功能。