Article Image
read

一个moco的简明使用教程

moco简介

作为2013 年 Oracle Java 大赛的获奖作品 的Moco。他的作者是这样描述 Moco 的:
Moco是一个简单搭建模拟服务器的程序库/工具,这个基于 Java 开发的开源项目已经在 Github 上获得了不少的关注。该项目的简介是这样描述自己的:Moco 是一个简单搭建 stub 的框架,主要用于测试和集成。这个框架的开发灵感来自 Mock 框架,如 Mockito 和 Playframework。 为什么要开发这个框架? 集成,尤其是基于 HTTP 协议的集成——web service、REST 等,在我们的项目开发中被广泛应用。以前,我们每次都要往 Jetty 或 Tomcat 等应用服务器上部署一个新的 WAR。大家都知道,开发部署一个 WAR 的过程是很枯燥的,即使在嵌入式服务器上也是如此。而且,每次我们做一点改动,整个 WAR 都要重新组装。 Moco 的出现,正是为了解决这些问题。开发团队只要根据自己的需要进行相应的配置,就会很方便得到一个模拟服务器。而且,由于 Moco 本身的灵活性,其用途已经不再局限于最初的集成测试,比如,Moco 可以用于移动开发,模拟尚未开发的服务;Moco 还可以用于前端开发,模拟一个完整的 Web 服务器,等等。

一个简单的开始

国际惯例,先从hello world开始我们的moco之旅吧。

首先,您需要:
配置您的 Java 环境
下载 Java 程序,并设置好系统环境变量 (PATH, JAVA_HOME)

安装并配置 Gradle
具体可以参考http://www.gradle.org/

接下来,按照下面的步骤安装 Moco
获取 Moco 源文件,使用 git 命令,获取最新的代码

git clone https://github.com/dreamhead/moco.git

也可以直接下载编译好的 Jar 文件,目前最新版本0.10.2
http://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/0.10.2/moco-runner-0.10.2-standalone.jar

接下来,编写配置文件,以简单的 Hello World 为例
[ { "response" : { "text" : "Hello, Moco" } } ]

将文件以 json 的后缀存储,比如 foo.json

接下来,启动Moco服务
在命令行输入

java -jar moco-runner-<version>-standalone.jar start -p 12306 -c foo.json

注:-p 指定 Moco 服务端口 (目前仅指 Web 端口)

接下来,访问 Web 服务
打开浏览器,访问 http://localhost:12306 您应该可以立即看到久违了的"Hello World"

Moco 的复杂实例

实例1, 带参数的 HTTP 请求
启动浏览器,并访问

{
  "request" :
    {
      "uri" : "/foo",
      "queries" :
        {
          "param" : "blah"
        }
    },
  "response" :
    {
      "text" : "bar"
    }
}

启动浏览器,并访问
http://localhost:12306/foo?parm=blash

实例2, 带参数的 HTTP 请求,并在响应中打印出来 ``` { "request" : { "uri" : "/fooTemplateCustomQuery"

    },
  "response" :
    {
      "headers":{
          "content-type":"application/json"
        }
        ,
      "text":{
        "template":"{\"name\":\"${req.queries['name']}\",\"card\":\"${req.queries['card']}\"}"
      }

    }
}

启动浏览器,并访问   
http://localhost:12345/fooTemplateCustomQuery?name=hyy&card=123321

实例3, 返回一个特定Status code的response

[ { "request" : { "uri" : "/fooSCR503"

    },
  "response" :
    {
      "status" : 503,
      "headers":{
        "Error":"unkown error",
        "Error-Code":"110001"
      }
    }
}

] ```

启动浏览器,并访问
http://localhost:12345/fooSCR503

实例4, 返回json 我们经常情况下返回的数据都是json格式,但是如果手工拼的话效率不高,也容易出错,还好moco支持json对象的返回。 这个例子里还展示了根据query的值拦截请求 注意,如果使用template功能获取request的query,header的数据,只能手工拼json字符串了,目前moco还没有提供好的解决办法。 { "request": { "uri": "/data/2.5/weather", "queries": { "q": "Shenyang,China", "appid": "2de143494c0b295cca9337e1e96b00e0" } }, "response": { "json": { "coord": { "lon": 123.43, "lat": 41.79 }, "weather": [ { "id": 800, "main": "Clear", "description": "Sky is Clear", "icon": "01n" } ], "base": "stations", "main": { "temp": 262.15, "pressure": 1040, "humidity": 61, "temp_min": 262.15, "temp_max": 262.15 }, "visibility": 10000, "wind": { "speed": 6, "deg": 360 }, "clouds": { "all": 0 }, "dt": 1448283600, "sys": { "type": 1, "id": 7474, "message": 0.0102, "country": "CN", "sunrise": 1448232295, "sunset": 1448266801 }, "id": 2034937, "name": "Shenyang", "cod": 200 } } }

启动浏览器,并访问
http://localhost:12345/data/2.5/weather?q=Shenyang,China&appid=2de143494c0b295cca9337e1e96b00e0

实例5, 模拟下载附件,当然可以 { "request": { "uri": "/file_attachment" }, "response": { "attachment": { "filename": "foo.txt", "file": "foo.response" } } }

filename为下载文件被重命名的名字,file为文件的目录位置和文件名,以脚本执行目录为基准。

启动浏览器,并访问
http://localhost:12345/file_attachment

实例6, 使用Cookie,在request和response里 在request里指定Cookie的值,可以拦截指定的请求 { "request" : { "uri" : "/cookieRequest", "cookies" : { "login" : "true" } }, "response" : { "text" : "success" } }

在response里指定Cookie的值,可以返回特定的Cookie { "request" : { "uri" : "/cookieReponse" }, "response" : { "cookies" : { "login" : "true" } } }

Blog Logo

大乖和小乖


Published

Image

球球

球球,咱们的blog

Back to Overview