WireMock 是一款虚拟服务工具,即我们常说的 HTTP Mock 服务。
WireMock 起始于 Tom Akehurst 在 2011 年的一个业余项目,现在已经非常成熟,拥有强大的 HTTP Mock 功能,并具备成熟的生态。
下面列举一些 WireMock 的核心特性:
HTTP Mock 大体上有两种接入方式,一类是虚拟服务模式或者叫直连模式,一类是代理人模式。两种接入方式各有利弊,这里不做过多阐述,有兴趣的可自行了解。
WireMock 和 Lyrebird 都同时支持虚拟服务模式和代理人模式接入(代理模式接入时,如果请求为 HTTPS 需要安装/导入工具自签名的 CA 根证书)。WireMock 使用代理方式接入时可以通过 host header 区分来自不同域名的相同路径的请求,从而给出不同的响应内容。
WireMock 虽然功能强大,但缺乏简单易用的可视化界面是阻碍我们使用它的一大因素。目前市面上的 WireMock UI 要么过于老旧,项目停止维护,不可使用;要么使用受限,比如官方推出的 WireMock 云服务 WireMock Cloud ,免费版有使用限制。
如果初次上手,推荐使用 WireMock 云服务进行体验。不用自己进行部署维护,只需注册账号即可创建自己的 Mock 项目,简单易用。
有了开源免费的 wiremock-ui,我们再也不用手搓 StubMapping 了。下面简单介绍一下 wiremock-ui(这里的 WireMock UI 特指本开源项目,下同)的使用。详细用法请阅读官方文档:https://wiremock.org/docs/ 。
Windows CMD 启动命令(3.0.0 beta 10 版本,生产使用推荐稳定版 2.35):
"D:\Program\Java\jdk-11.0.11\bin\java.exe" ^
-cp wiremock-standalone-3.0.0-beta-10.jar;wiremock-webhooks-extension-2.35.0.jar ^
com.github.tomakehurst.wiremock.standalone.WireMockServerRunner ^
--extensions org.wiremock.webhooks.Webhooks ^
--global-response-templating --filename-template={{{id}}}.json -port=3010
也可以使用官方提供的 Docker 镜像启动。
1、访问在线网站 https://qadoc.cn/wiremock ,初始页面如下。
2、点击 WireMock 图标,进入项目信息管理页面,添加项目信息(点击单元格开始编辑,实时保存)。
1、切换到主页面,选择刚添加的项目,添加如下所示的一条 Mock 数据(列表项中的红色星号表示数据有修改未保存)。
2、点击 “预览”,可以看到最终发送给 WireMock 服务的预览数据。
{
"metadata": {
"wmui": {
"description": "",
"createTime": "",
"updateTime": "",
"responseBodyType": "text"
}
},
"request": {
"method": "GET",
"urlPath": "/example/get",
"queryParameters": {
"id": {
"hasExactly": [
{
"equalTo": "A"
},
{
"equalTo": "B"
},
{
"equalTo": "C"
}
]
}
}
},
"response": {
"status": 200,
"statusMessage": "",
"headers": {
"Content-Type": "text/plain"
},
"body": "This is Response Body Info.",
"fromConfiguredStub": true
},
"name": "多值 QueryParam 的 GET 请求",
"priority": 5,
"persistent": true,
"postServeActions": []
}
3、点击保存,访问 http://localhost:3010/example/get?id=A&id=B&id=C 。
1、添加包含动态响应的 Mock 数据。
2、访问 http://localhost:3010/response/template ,可以看到如下响应信息。
切换到 Logs 菜单,可以查看请求日志(保存在内存中,未持久化)。
如果使用本项目过程中发现问题,请在项目的 Issues 中提交。