能否用WireMock模拟服务并触发REST POST调用?
WireMock模拟主动调用及回调验证方案
完全可以用WireMock实现你的需求,核心分两步:让模拟的服务A主动发起POST调用,以及验证服务B的回调请求是否到达。
一、让模拟服务A主动发起POST调用
WireMock本身主打被动响应,但可以通过代码或脚本结合实现主动请求:
- 如果用WireMock的Java SDK,启动模拟服务A后,直接用HTTP客户端(比如JDK自带的HttpClient、OkHttp)编写代码发起POST请求到服务B的API。示例代码:
// 启动WireMock作为服务A WireMockServer wireMockServer = new WireMockServer(8080); wireMockServer.start(); // 主动调用服务B的API HttpClient client = HttpClient.newHttpClient(); HttpRequest request = HttpRequest.newBuilder() .uri(URI.create("http://service-b:8081/trigger-flow")) .POST(HttpRequest.BodyPublishers.ofString("{\"bizId\":\"12345\"}")) .header("Content-Type", "application/json") .build(); client.send(request, HttpResponse.BodyHandlers.discarding()); - 如果用WireMock CLI,可搭配Shell/Python脚本,在启动WireMock实例后,执行脚本触发POST请求。
二、验证服务A是否收到B的回调
WireMock的请求记录功能可以完美实现这一点:
- 启用请求记录:
- CLI启动时添加参数:
wiremock --port 8080 --record-mappings - Java SDK中可配置记录规则:
wireMockServer.startRecording(RecordSpec.recordSpec() .forTarget("http://localhost:8080") // 记录自身收到的请求 .makeStubsPersistent(false));
- CLI启动时添加参数:
- 查询回调请求:
- 通过WireMock的管理API查询:发送GET请求到
http://localhost:8080/__admin/requests,可筛选出服务B的回调请求(比如根据请求路径、请求头)。 - 测试代码中直接验证:
// 检查是否收到POST类型的回调请求 List<LoggedRequest> callbackRequests = WireMock.findAll(postRequestedFor(urlEqualTo("/service-a/callback"))); assert !callbackRequests.isEmpty(); // 进一步验证请求体、参数等 assert callbackRequests.get(0).getBodyAsString().contains("bizId\":\"12345\"");
- 通过WireMock的管理API查询:发送GET请求到
只要服务B的回调地址指向WireMock模拟的服务A,就能通过上述方式记录并验证回调请求是否到达。
内容的提问来源于stack exchange,提问作者Laodao
相关产品推荐
相关产品推荐

