如何对接运行在Docker中的Wiremock服务获取请求交互数据
解决方案
完全可以通过WireMock官方提供的远程客户端能力对接运行在Docker中的服务,无需在本地显式启动WireMock实例,具体实现方案如下:
方案1:直接使用已配置的静态API
你已经在代码中执行了WireMock.configureFor("localhost", 8080);,该配置已经将静态上下文绑定到了Docker中运行的WireMock服务,直接调用WireMock类的静态方法即可获取运行数据,示例如下:
// 获取所有交互请求记录 List<ServeEvent> allServeEvents = WireMock.getAllServeEvents(); // 检查WireMock服务运行状态 boolean isRunning = WireMock.isRunning(); // 清空历史请求记录(适合多测试用例场景下隔离数据) WireMock.resetAll();
方案2:创建独立的远程WireMock客户端
如果需要同时对接多个WireMock服务,避免静态上下文的冲突,可以手动创建WireMock实例指向远端服务,示例如下:
// 初始化指向Docker中WireMock服务的客户端 WireMock remoteWireMock = new WireMock("localhost", 8080); // 调用实例方法获取数据 List<ServeEvent> events = remoteWireMock.getAllServeEvents();
注意事项
- 确保Docker中WireMock服务的8080端口已正确映射到本地,且网络可达
- 项目依赖的WireMock版本尽量和Docker中运行的WireMock版本保持一致,避免出现接口兼容性问题
- 若WireMock服务开启了API鉴权,配置时需要补充认证参数,示例:
WireMock.configureFor("localhost", 8080, "你的认证令牌");
实际测试用例示例(JUnit5)
@Test void verifyApiRequestToWireMock() { // 调用待测试的业务API businessApi.queryUserInfo(123); // 从远端WireMock拉取交互记录 List<ServeEvent> serveEvents = WireMock.getAllServeEvents(); // 验证请求符合预期 assertEquals(1, serveEvents.size()); ServeEvent receivedRequest = serveEvents.get(0); assertEquals("/user/info", receivedRequest.getRequest().getUrl()); assertEquals("GET", receivedRequest.getRequest().getMethod().getName()); assertEquals("123", receivedRequest.getRequest().queryParameter("id").firstValue()); }
内容的提问来源于stack exchange,提问作者CJDownUnder
相关产品推荐
相关产品推荐

