You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用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的请求记录功能可以完美实现这一点:

  1. 启用请求记录:
    • CLI启动时添加参数:wiremock --port 8080 --record-mappings
    • Java SDK中可配置记录规则:
      wireMockServer.startRecording(RecordSpec.recordSpec()
              .forTarget("http://localhost:8080") // 记录自身收到的请求
              .makeStubsPersistent(false));
      
  2. 查询回调请求:
    • 通过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\"");
      

只要服务B的回调地址指向WireMock模拟的服务A,就能通过上述方式记录并验证回调请求是否到达。

内容的提问来源于stack exchange,提问作者Laodao

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:32:20