Moco Runner
一、基本介绍
Moco runnner是一个基于netty实现的Http服务器模拟程序,他可以向服务器一样接受你的Http请求,并返回你所定制的响应,主要应用在单元测试和开发过程需要调用第三方接口当时第三方接口尚不可用的情况下使用。
二、快速使用
Moco主要有两种使用方式:API、单立程序单独启动。
1、API方式
引入依赖:
Maven:
<dependency>
<groupId>com.github.dreamhead</groupId>
<artifactId>moco-core</artifactId>
<version>1.0.0</version>
</dependency>
gradle:
repositories {
mavenCentral()
}
dependencies {
testCompile(
"com.github.dreamhead:moco-core:1.0.0",
)
}
API调用方式主要应用在单元测试中,以下是一个典型的应用在单元测试中的例子:
@Test
public void should_response_as_expected() throws Exception {
HttpServer server = httpServer(12306);
server.response(“foo”);
running(server, new Runnable() {
@Override
public void run() throws IOException {
Content content = Request.Get("http://localhost:12306").execute().returnContent();
assertThat(content.asString(), is("foo"));
}
});
}
以上例子创建了一个新的服务器并且做了自定义配置,随后运行单元测试,使用Apache Http Client Fluent API去请求测试服务器。在某些情况可能需要去控制服务的开启和关闭,可以在Befor注解的方法中调用相关的API,样例如下:
public class MocoRunnerTest {
private Runner runner;
@Before
public void setup() {
HttpServer server = httpServer(12306);
server.response("foo");
runner = runner(server);
runner.start();
}
@After
public void tearDown() {
runner.stop();
}
@Test
public void should_response_as_expected() throws IOException {
Content content = Request.Get("http://localhost:12306").execute().returnContent();
assertThat(content.asString(), is("foo"));
}
}
关于更多api的使用可以访问https://github.com/dreamhead/moco/tree/master/moco-doc去了解。
2、独立程序运行
首先需要下载这个程序的jar包http://central.maven.org/maven2/com/github/dreamhead/moco-runner/1.0.0/moco-runner-1.0.0-standalone.jar
像运行普通java程序一样只需要部署到服务器,执行java -jar命令就能启动,默认访问端口为12306。这种方式需要配置相应的json配置文件以达到自定有请求和响应,下面着重介绍使用方式和json配置。
在启动时就需要先配置一个JSON配置文件例子如下:
[
{
“response” :
{
“text” : “foo”
}
}
]
(foo.json)
首先要在命令启动的第一参数中指定服务器的类型,不同的服务器类型支持不同的参数:
HTTP Sever:
可以通过以下命令开启一个Http服务器:
java -jar moco-runner--standalone.jar http -p 12306 -c foo.json
其中的 是当前执行jar包的版本,-p指定访问端口,-c 指定启动时的json配置
Socket Server:
以下命令启动一个Socket server:
java -jar moco-runner-<version>-standalone.jar socket -p 12306 -c foo.json
配置文件
更改配置文件不必重启服务,服务会在热加载配置,自动检测配置的变更
可以使用-c参数指定某一个json配置文件,如果有多个配置文件,可以使用全局匹配参数,但是要确保配置文件不冲突,命令如下:
java -jar moco-runner-<version>-standalone.jar http -p 12306 -c "*.json"
端口
可以通过-p参数指定启动时的访问端口,如果没有指定端口,Moco启动时将会随机选择一个可用端口,可以在控制台看到端口信息。
全局设定
将所有的配置文件都放到一个配置文件里,但是如果想要运行很多服务在一个Moco实例时,配置文件就会变得很庞大,这种情况下,可以使用设定文件(setting.json)分离不同的文件。
下面是两个例子:
[
{
“request” : {
“uri” : “/foo”
},
“response” : {
“text” : “foo”
}
}
](foo.json)
{
“request” : {
“uri” : “/bar”
},
“response” : {
“text” : “bar”
}
}
把他们放到一个setting.json文件中及进行管理:
[
{
“include” : “foo.json”
},
{
“include” : “bar.json”
}
](setting.json)
可以使用全局设定启动一个Moco服务,命令如下:
java -jar moco-runner--standalone.