Moco 框架以及其在 Web 集成测试的应用(2)
 
- UID
- 1066743
|

Moco 框架以及其在 Web 集成测试的应用(2)
Moco 是什么作者是这样描述 Moco 的:
是一个简单搭建模拟服务器的程序库/工具,这个基于 Java 开发的开源项目已经在 Github 上获得了不少的关注。该项目的简介是这样描述自己的:Moco 是一个简单搭建 stub 的框架,主要用于测试和集成。这个框架的开发灵感来自 Mock 框架,如 和 。
为什么要开发这个框架?
集成,尤其是基于 HTTP 协议的集成——web service、REST 等,在我们的项目开发中被广泛应用。以前,我们每次都要往 Jetty 或 Tomcat 等应用服务器上部署一个新的 WAR。大家都知道,开发部署一个 WAR 的过程是很枯燥的,即使在嵌入式服务器上也是如此。而且,每次我们做一点改动,整个 WAR 都要重新组装。
Moco 的出现,正是为了解决这些问题。开发团队只要根据自己的需要进行相应的配置,就会很方便得到一个模拟服务器。而且,由于 Moco 本身的灵活性,其用途已经不再局限于最初的集成测试,比如,Moco 可以用于移动开发,模拟尚未开发的服务;Moco 还可以用于前端开发,模拟一个完整的 Web 服务器,等等。
在 2013 年 上,Moco 框架被提名为最具创新力的 Java 项目之一,在 Twitter 上得到了 Martin Fowler 的关注,详见《企业系统集成点测试策略》一文在 InfoQ 英文站
Moco 下的 Hello World首先,您需要:
- 配置您的 Java 环境下载 Java 程序,并设置好系统环境变量 (PATH, JAVA_HOME)
- 安装并配置 Gradle具体可以参考
接下来,按照下面的步骤安装 Moco
- 获取 Moco 源文件
- 也可以直接下载编译好的 Jar 文件,目前是 0.9.1
- 编译源代码,生成 Jar 文件 (用以编译好的 Jar 文件的,可以忽略这个步骤) 在命令行执行如下的命令
1
2
| cd <moco directory>
./gradlew build
|
- 编写配置文件,以简单的 Hello World 为例
1
2
3
4
5
6
7
8
| [
{
"response" :
{
"text" : "Hello, Moco"
}
}
]
|
将文件以 json 的后缀存储,比如 foo.json
- 启动 Moco 服务在命令行输入
1
| java -jar moco-runner-<version>-standalone.jar start -p 12306 -c foo.json
|
注:-p 指定 Moco 服务端口 (目前仅指 Web 端口)
- 访问 Web 服务打开浏览器,访问 http://localhost:12306
您应该可以立即看到久违了的"Hello World"
Moco 的复杂实例实例一, 带参数的 HTTP 请求
有些时候我们希望能够在请求的同时,传递相应的参数。这时我们需要用到"queries"关键字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| {
"request" :
{
"uri" : "/foo",
"queries" :
{
"param" : "blah"
}
},
"response" :
{
"text" : "bar"
}
}
|
1
| http://localhost:12306/foo?parm=blash
|
实例二,基于正则表达的 URL 匹配
在很多对 URL 请求的测试中,我们希望对于多个相似的 URL,都返回相同的结果
1
2
3
4
5
6
7
8
9
10
11
12
13
| {
"request":
{
"uri":
{
"match": "/\\w*/foo"
}
},
"response":
{
"text": "bar"
}
}
|
在地址栏输入多个地址(/foo 前带有任意字符, 比如 http://localhost:12306/xxx/foo)
实例三:跳转
页面的自动跳转也是经常在 Web 开发中遇到的问题之一
1
2
3
4
5
6
7
| {
"request" :
{
"uri" : "/redirect"
},
"redirectTo" : "http://www.github.com"
}
|
- 启动浏览器访问 http://localhost:12306/redirect
页面将会被自动导向到 http://www.github.com
实例三: 返回 JSON 对象
在 Web 开发中,对于 JSON 的操作是最典型的应用
1
2
3
4
5
6
7
8
9
10
| {
"request": {
"uri": "/json"
},
"response": {
"json": {
"foo" : "bar"
}
}
}
|
- 启动浏览器访问 http://localhost:12306/json
页面上会显示输出的 JSON 对象 |
|
|
|
|
|