第二章 搭建第一个Mock服务:启动WireMock、定义静态响应、验证返回

本章通过实操完成你的第一个WireMock服务:从零启动实例、编写静态JSON映射,并使用curl验证返回结果。这是整个Mock工具链的起点,后续所有高级功能(动态响应、延迟模拟、断言等)都建立在此基础之上。

本章目标:掌握WireMock的三种启动方式、理解Stub映射文件结构、能够独立配置一个返回固定JSON的Mock端点并通过HTTP请求验证。

核心流程

下图展示了搭建并验证第一个Mock服务的完整步骤:

搭建第一个WireMock服务流程 启动WireMock服务 编写静态映射文件 发送HTTP请求 验证响应内容 端口默认8080 映射文件放在 mappings/

启动WireMock服务

WireMock支持三种启动方式:独立JAR、Docker容器、内嵌在测试代码中。本章使用最快捷的独立JAR方式。

# 下载WireMock Standalone JAR(若未下载)
wget https://repo1.maven.org/maven2/org/wiremock/wiremock-standalone/3.9.1/wiremock-standalone-3.9.1.jar

# 启动服务,监听8080端口
java -jar wiremock-standalone-3.9.1.jar --port 8080

启动成功后控制台将输出类似信息:

WireMock server started at http://localhost:8080
端口冲突处理:若8080被占用,可使用 --port 9090 或其他端口,后续所有URL相应调整。

定义静态响应(Stub映射)

WireMock使用JSON文件描述请求与响应的映射关系。所有映射文件放置在启动目录下的 mappings/ 文件夹中,服务启动时会自动加载。

创建文件 mappings/hello-stub.json:

{
  "request": {
    "method": "GET",
    "url": "/api/hello"
  },
  "response": {
    "status": 200,
    "headers": {
      "Content-Type": "application/json"
    },
    "jsonBody": {
      "message": "Hello from WireMock!",
      "timestamp": "2025-01-01T12:00:00Z"
    }
  }
}
字段说明示例值
request.method匹配的HTTP方法(GET/POST/PUT等)"GET"
request.url匹配的请求路径(精确匹配)"/api/hello"
response.status返回的HTTP状态码200
response.jsonBody返回的JSON对象(自动设置Content-Type为application/json){"message":"Hello"}
文件位置必须正确:WireMock默认从当前工作目录下的 mappings/ 子目录读取映射文件。若文件放在其他位置,需要 --root-dir 参数指定。

验证返回结果

启动WireMock后,使用curl或浏览器发送请求:

curl -v http://localhost:8080/api/hello

应当看到返回的JSON响应:

{
  "message": "Hello from WireMock!",
  "timestamp": "2025-01-01T12:00:00Z"
}

同时WireMock控制台会记录请求日志:

INFO: Request received:
GET /api/hello
Matched stub: hello-stub.json
验证小技巧:使用 curl -w "\nHTTP状态码: %{http_code}\n" 可同时打印响应体与状态码,便于断言。

常见启动参数速查

参数作用示例
--port指定监听端口--port 9090
--root-dir指定映射文件根目录--root-dir ./wiremock
--verbose开启详细日志,打印每次请求匹配详情--verbose
--global-response-templating启用响应模板(后续动态响应章节使用)--global-response-templating

本章小结

  • 成功启动WireMock独立实例并监听指定端口。
  • 在 mappings/ 目录下编写了第一个静态JSON映射,定义了GET /api/hello返回固定JSON。
  • 通过curl发送请求并验证了状态码200与响应体内容。
  • WireMock自动加载映射文件,无需重启服务即可生效(后续章节将介绍热加载细节)。