红联Linux门户
Linux帮助

Moco 0.9发布,模拟服务器

发布时间:2013-11-02 09:19:45来源:红联作者:empast
我很高兴地宣布,Moco 0.9发布了。

Moco是什么?

Moco是一个可以轻松搭建测试服务器的框架/工具/程序库。

变更

本次发布包含两个重大的新特性,事件和验证。

事件指的是,在某种情况下,触发相应的处理。目前支持的事件是“完成”事件,也就是说,当一个请求处理完成时,我们可以做相应的处理。

比如,我们可以用如下代码在请求处理之后,发出另外一个请求。

server.request(by(uri("/event"))).response("event").on(complete(get("http://another_site")));

我们还可以声明这个请求是异步的,这样不会阻塞本次调用给客户端回应答。

server.request(by(uri("/event"))).response("event").on(complete(async(post("http://another_site", "content"), latency(1000))));

这种情况可以用于诸如OAuth认证之类的情形,在服务器接到一个请求之后,发起另外一个请求。

它也支持相应的JSON配置:

{
"request": {
"uri" : "/event"
},

"response": {
"text": "event"
},
"on": {
"complete": {
"async" : "true",
"latency" : 1000,
"post" : {
"url" : "http://another_site",
"content": "content"
}
}
}
}

验证,是一个用于测试代码中的特性,类似于Mock框架中的verify功能,对请求进行验证。下面是一个例子。

RequestHit hit = requestHit();
final HttpServer server = httpserver(12306, hit);
server.get(by(uri("/foo"))).response("bar");

running(server, new Runnable() {
@Override
public void run() throws Exception {
assertThat(helper.get(remoteUrl("/foo")), is("bar"));
}
});

hit.verify(by(uri("/foo")), times(1));

这里的verify的第一个参数是一个matcher,也就是说,我们可以写任意的条件组合,甚至与设置服务器的完全不同。

此外,我们还支持未预期请求的验证,如下:

hit.verify(unexpected(), never());

目前支持的验证条件包括:

never: 没有收到这样的请求。
time: 准确匹配收到这些次数的请求。
atLeast:至少收到这些次数的请求。
atMost:至多收到这些次数的请求。
此外,还有一些小特性的变更:

缺省情况下,关闭了使用API方式的日志。
seq API支持了ResponseHandler接口。
为PUT和DELETE方法增加了快捷方式。
在内部实现细节上也有一些微调:

如果不提供端口,服务器会自行选择可用端口。
在Failover的实现里,“statusCode”改成了“status”。如果因此造成了测试失败,可以手工修改Failover文件。
感谢

感谢Paul Hammant,为Moco提供了大量的反馈,并激发了验证特性实现的灵感。

官方首页:https://github.com/dreamhead/moco

来自:开源中国社区
文章评论

共有 0 条评论