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

如何获取MockServerContainer的请求列表以验证webhook请求?

使用Testcontainers获取MockServer的请求记录

当然可以,MockServer本身提供了查询已接收请求的API,结合Testcontainers的MockServerContainer,你可以直接调用这些API获取所有请求记录,具体操作如下:

1. 获取MockServer的访问地址

从启动的MockServerContainer实例中拿到容器的可访问端点:

MockServerContainer mockServer = new MockServerContainer(DockerImageName.parse("mockserver/mockserver:5.15.0"));
mockServer.start();
String mockServerUrl = mockServer.getEndpoint();

2. 查询所有已接收的请求

MockServer提供/retrieve接口用于获取请求记录,你可以用任意HTTP客户端(比如RestTemplate、OkHttp)发送请求来获取:

// 用RestTemplate示例查询所有请求
RestTemplate restTemplate = new RestTemplate();
List<HttpRequest> recordedRequests = restTemplate.exchange(
    mockServerUrl + "/retrieve",
    HttpMethod.GET,
    null,
    new ParameterizedTypeReference<List<HttpRequest>>() {}
).getBody();

3. 验证请求体是否符合预期

拿到请求列表后,遍历提取请求体并和预期内容对比:

// 假设这是你的3个预期请求体
List<String> expectedBodies = Arrays.asList("request-body-1", "request-body-2", "request-body-3");

// 提取记录中的请求体
List<String> actualBodies = recordedRequests.stream()
    .map(request -> request.getBody().toString())
    .collect(Collectors.toList());

// 验证数量和内容匹配
assertEquals(expectedBodies.size(), actualBodies.size());
assertTrue(actualBodies.containsAll(expectedBodies));

额外技巧:精准过滤请求

如果不需要查询所有请求,还可以通过/retrieve接口带匹配规则,精准筛选特定请求(比如指定请求方法、路径):

// 构造匹配规则:只查POST到/webhook路径的请求
HttpRequest requestMatcher = HttpRequest.request()
    .withMethod(HttpMethod.POST.name())
    .withPath("/webhook");

List<HttpRequest> filteredRequests = restTemplate.exchange(
    mockServerUrl + "/retrieve",
    HttpMethod.PUT,
    new HttpEntity<>(requestMatcher),
    new ParameterizedTypeReference<List<HttpRequest>>() {}
).getBody();

另外,测试前后如果需要清空请求记录,可以调用/clear接口:

restTemplate.put(mockServerUrl + "/clear", null);

内容的提问来源于stack exchange,提问作者Roger Frauca Cordoba

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 02:15:33