mock-server
1、概述:
moco是一个简单搭建模拟服务器的程序库/工具,主要用于测试集成。这个基于 Java 开发的开源项目已在 Github 上获得了不少关注。mock-server用途就是开发在开发的过程中,需要依赖一部分的接口,但是对方没有提供或者环境等等情况。
例如,当前端开发在开发页面的时候,需要服务端提供API接口此时服务端没开发完成,或者说没搭建测试环境,这个时候前端开发会自己mock一个api服务端,自己给自己提供调用接口的返回数据。
2、运行方式:
moco目前支持多种使用方式,最基本的方式是两种:API和独立运行。本文主要讲解独立运行的sever搭建。
独立运行:moco主要是通过将配置放入json文件中,启动moco的时候,需要指定使用的配置文件路径,这样配置就可以生效了。
3、MOCO的不足:
moco的使用很简单,配置也很方便,目前更是提供了http、rest、socket服务。但是也仅仅是能stub出接口,模拟出简单的场景。如果接收到请求后需要做一些处理,如需查询数据库、进行运算、或者一些复杂的操作,就无能为力了。所以是否选用moco,就取决于开发者是否只是需要一个简单的模拟服务器
4、MOCO搭建准备:
Step1:配置jdk:打开cmd窗口,通过java –version 检查是否成功安装jdk。
Jdk下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,选择适合自己电脑系统的版本进行下载安装。
Jdk安装方法:
● windows:http://jingyan.baidu.com/article/bea41d435bc695b4c41be648.html
● linux:http://www.cnblogs.com/caosiyang/archive/2013/03/14/2959087.html
如果出现以下信息则说明安装正确。
Step 2:下载moco-runner jar文件,目前版本是 0.11.0:
https://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.11.0/moco-runner-0.11.0-standalone.jar
MOCO基础搭建
Step1:新建文件夹,将2.2中下载的moco-runner-0.11.0-standalone.jar文件放置此目录,并在该目录新建json文件,命名为foo,此文件作为moco的配置文件。
Step2:编写配置文件,像下面这个样子描述你的moco 服务的配置:
Step3:通过配置文件 foo.json 启动 moco服务在命令行输入:
java -jar moco-runner-<version>-standalone.jar http -p 12306 -c foo.json
其中< version> 替换为下载的 Jar 包的版本,此处为 0.11.0 ,所以执行:java -jar moco-runner-0.11.0-standalone.jar http -p 12306 -c foo.json
-p 指定 Moco 服务端口。
Moco-runner成功启动如下图:
需要注意的是,执行以上的命令,需要先 cd 到 Jar 文件所在的目录,然后 foo.json 文件也需要放在同一个目录才行,否则会报错。或者可以通过使用 Jar 文件和 .json 文件绝对路径的方式也可以。
json 文件路径也可以使用相对路径,如:./api/foo.json
用postman访问moco-runner sever:
如果他人也想访问,需要提供本机IP就可以了。
启动服务之后,必然会根据需求stub出各种各样接口反馈, moco服务可以检测到配置文件的变更,假如你修改了配置文件,不需要重新启动moco,服务照样可以生效。
5、进阶操作:
参考moco官方文档:https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md,以下列举几个较为常用的配置。
1.url:在request中设置uri,访问 http://localhost:12306/foo ,就可以获取到内容bar。
[
{
"request" : {
"uri" : "/foo"
},
"response" : {
"text" : "bar"
}
}
]
2. 带有参数的请求, 启动浏览器,并访问http://localhost:12306/foo?parm=blash
[
{
"request" : {
"uri" : "/foo",
"queries" : {
"param" : "blash"
}
},
"response" : {
"text" : "bar"
}
}
]
3.返回特定的status
[
{
"request" :
{
"uri" : "/foo"
},
"response" :
{
"status" : 503
}
}
]
4.返回json数据
[
{
"request" :{
"uri": "/getJson"
},
"response" :{
"json": {
"foo": "bar"
}
}
}
]
5.通过不同的请求方式返回不同的参数,以下通过POST和GET返回不同的参数。
[
{
"request": {
"uri": "/test1",
"method": "POST"
},
"response": {
"json": {
"code":"200",
"desc":" POST success"
}
}
},
{
"request": {
"uri": "/test1",
"method": "GET",
},
"response": {
"json": {
"code":"200",
"desc":" GET success "
}
}
}
]
6.Json请求参数
[
{
"request": {
"uri": "/json",
"json": {
"foo": "bar"
}
},
"response": {
"text": "foo"
}
}
]
6、配置文件:
moco 支持在配置文件中引入其他配置文件,这样就可以分服务定义配置文件,便于管理。
例如你有两个不同路径的 API:http://xxx.com/path1/login 和 http://xxx.com/path2/pay (登录和支付接口)。
按照上一小节所讲,我们可以写好 login 和 pay 的两个配置文件(或写在一起),分别设置 request 的 url 为 /path1/login 和 /path2/pay 。如果需要测试的接口很多,则不利于管理,且 path1、path2 这么混乱的分布于不同的配置文件中,对于以后想要更改也很不方便。
● 正确的姿势应该是这样的:
同样写好 login.json 和 pay.json 两个配置文件,然后写一个配置文件 ,配置如下:
// config.json
[
{"context":"/path1", "include":"login.json"},
{"context":"/path2", "include":"pay.json"}
]
login 和 pay 两个文件没有特殊要求,和之前的写法一样。比如:
// pay.json
[
{
"request": {
"uri": "/pay",
"method": "POST",
"json": {
"phone":"18688886666",
"password":"123456"
}
},
"response": {
"json": {
"state":"0"
}
}
}
]
// login.json
[
{
"request": {
"uri": "/login",
"method": "POST",
"json": {
"amount":"100"
}
},
"response": {
"json": {
"state":"0"
}
}
}
]
然后启动 moco 服务的命令是:
java -jar moco-runner-<version>-standalone.jar http -p 12306 -g config.json
要注意的是,最后指定的参数是 -g config.json !
如果只是想引入多个 json 文件的话,全局配置文件中可以不使用 context 字段。比如:
// 不使用 context 字段的 config.json。
[
{"include":"login.json"},
{"include":"pay.json"}
]
。