1. WireMock 介绍

WireMock 是一款虚拟服务工具,即我们常说的 HTTP Mock 服务。

WireMock 起始于 Tom Akehurst 在 2011 年的一个业余项目,现在已经非常成熟,拥有强大的 HTTP Mock 功能,并具备成熟的生态。

下面列举一些 WireMock 的核心特性:

HTTP Mock 大体上有两种接入方式,一类是虚拟服务模式或者叫直连模式,一类是代理人模式。两种接入方式各有利弊,这里不做过多阐述,有兴趣的可自行了解。

WireMock 和 Lyrebird 都同时支持虚拟服务模式和代理人模式接入(代理模式接入时,如果请求为 HTTPS 需要安装/导入工具自签名的 CA 根证书)。WireMock 使用代理方式接入时可以通过 host header 区分来自不同域名的相同路径的请求,从而给出不同的响应内容。

2. WireMock UI

WireMock 虽然功能强大,但缺乏简单易用的可视化界面是阻碍我们使用它的一大因素。目前市面上的 WireMock UI 要么过于老旧,项目停止维护,不可使用;要么使用受限,比如官方推出的 WireMock 云服务 WireMock Cloud ,免费版有使用限制。

如果初次上手,推荐使用 WireMock 云服务进行体验。不用自己进行部署维护,只需注册账号即可创建自己的 Mock 项目,简单易用。

有了开源免费的 wiremock-ui,我们再也不用手搓 StubMapping 了。下面简单介绍一下 wiremock-ui(这里的 WireMock UI 特指本开源项目,下同)的使用。详细用法请阅读官方文档:https://wiremock.org/docs/

3. WireMock UI 的使用

3.1 启动 WireMock 实例

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 镜像启动。

3.2 添加项目信息

1、访问在线网站 https://qadoc.cn/wiremock ,初始页面如下。

2、点击 WireMock 图标,进入项目信息管理页面,添加项目信息(点击单元格开始编辑,实时保存)。

3.3 Mock 初体验

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

3.4 动态响应

1、添加包含动态响应的 Mock 数据。


2、访问 http://localhost:3010/response/template ,可以看到如下响应信息。

3.5 请求日志

切换到 Logs 菜单,可以查看请求日志(保存在内存中,未持久化)。

4. 友情提示

如果使用本项目过程中发现问题,请在项目的 Issues 中提交。


↙↙↙阅读原文可查看相关链接,并与作者交流