在项目开发和项目测试时,都会遇到不同项目、模块相互调用的情况,调用方式也有很多,通过http/https、TCP连接、RPC等;这样系统之间相互依赖,会影响开发速度,所以基本上都是采用mock的方式进行开发、测试,即先写一个符合预期的假接口,进行调用。
在github上看到一个挺不错的http mock server,这里简单介绍一下。
MockServer可用来模拟http、https服务。当MockServer收到请求后,会去内存在查找之前配置好的规则,如果匹配上,就返回之前指定的内容。MockServer支持以下动作:
- 返回响应,如果请求命中了规则,可以返回响应
转发请求,如果请求命中了规则,可以将请求转发到其他服务
执行回调函数,如果请求命中了规则,还允许动态的生成响应
返回无效响应、或者直接关闭连接
校验请求,检查接收到的请求是否符合预期
获取日志,能获取请求和响应的日志,用来定位问题
如何使用
- MockServer支持多种启动方式,如下:
- 可以通过maven plugin的方式启动
- 可以通过java代码控制
- 可以使用JUnit框架中的@Rule控制
- 可以使用命令行启动
- 可以通过部署war包启动
- 可以通过Node.js启动
- 可以通过Grunt plugin方式启动
- 可以通过Docker方式启动
- 配置响应,java代码如下:
new MockServerClient("localhost", 1080)
.when(
request()
.withMethod("POST")
.withPath("/login")
.withBody("{username: 'foo', password: 'bar'}")
)
.respond(
response()
.withStatusCode(302)
.withCookie(
"sessionId", "2By8LOhBmaW5nZXJwcmludCIlMDAzMW"
)
.withHeader(
"Location", "https://www.mock-server.com"
)
);
响应包括四部分:
+ request_matcher
,url路径,用来匹配请求
+ action
,动作,包括response
, forward
, callback
和error
+ times
,用来控制此action可以请求的次数
+ timeToLive
,用来控制响应存活时间
new MockServerClient("localhost", 1080)
.when(
request()
.withPath("/some/path"),
Times.once(),
TimeToLive.exactly(TimeUnit.SECONDS, 60L)
)
.respond(
response()
.withBody("some_response_body")
);
还可以使用正则表达式:
new MockServerClient("localhost", 1080)
.when(
request()
// matches any requests those path starts with "/some"
.withPath("/some.*")
)
.respond(
response()
.withBody("some_response_body")
);
匹配路径时,还可以取反:
new MockServerClient("localhost", 1080)
.when(
request()
// matches any requests those path does NOT start with "/some"
.withPath(not("/some.*"))
)
.respond(
response()
.withBody("some_response_body")
);
匹配请求时,还可以通过匹配参数来控制:
new MockServerClient("localhost", 1080)
.when(
request()
.withPath("/some/path")
.withQueryStringParameters(
param("[A-z]{0,10}", "055CA455-1DF7-45BB-8535-4F83E7266092")
)
)
.respond(
response()
.withBody("some_response_body")
);
MockServer还支持各种配置,更多可以看英文文档 http://www.mock-server.com/mock_server/getting_started.html
版权声明
本站文章、图片、视频等(除转载外),均采用知识共享署名 4.0 国际许可协议(CC BY-NC-SA 4.0),转载请注明出处、非商业性使用、并且以相同协议共享。
© 空空博客,本文链接:https://www.yeetrack.com/?p=1310
近期评论