如何让MockServer不返回响应,用于测试Spring重试配置
需求可行性结论
该需求完全可以实现,MockServer原生支持请求抓取+主动丢弃连接不返回响应的配置,刚好适配Spring重试场景的验证需求。
核心实现步骤
- 首先引入MockServer的Java测试依赖,常规使用可引入
org.mock-server:mockserver-netty:5.15.0版本,和JUnit集成可选择对应封装的starter依赖 - 启动MockServer实例后,针对目标特定端点配置请求匹配规则,仅匹配对应路径、请求方法的请求,配置响应动作选择
dropConnection,该动作的效果就是收到请求后直接断开TCP连接,不会返回任何响应报文 - 同步保持MockServer的请求记录功能默认开启,工具会自动留存所有匹配到的请求的发起时间、请求头、请求参数等信息,后续可直接查询这些记录验证Spring重试配置的正确性
核心配置代码示例
// 初始化本地MockServer客户端,端口和你启动的MockServer实例保持一致 MockServerClient mockServer = new MockServerClient("localhost", 1080); // 配置特定端点的无响应规则 mockServer.when( request() .withMethod("POST") // 替换为目标端点的请求方法 .withPath("/your/target/endpoint") // 替换为你要监听的特定端点路径 ) .respond( response() .withDelay(Delay.milliseconds(200)) // 可选添加小延迟模拟真实网络耗时,让触发的异常更贴合生产场景 .withDropConnection(true) // 核心配置:收到请求后直接断开连接,不返回任何响应 );
重试配置验证方式
测试流程跑完后,直接查询MockServer的请求记录统计匹配到的请求总数,和预期的重试次数做对比即可:
// 查询匹配规则的总请求次数 int actualRequestCount = mockServer.retrieveRecordedRequests( request() .withMethod("POST") .withPath("/your/target/endpoint") ).length; // 校验结果,比如Spring配置了最多重试2次,总请求数应该等于3(1次首次请求 + 2次重试) Assertions.assertEquals(3, actualRequestCount);
如果需要验证重试间隔,还可以获取每个请求的时间戳,计算相邻两次请求的时间差和配置的重试间隔做比对即可。
注意事项
如果你的Spring重试规则仅对特定异常生效,需要确认dropConnection触发的连接断开/超时异常在你的重试触发异常范围内即可。
内容的提问来源于stack exchange,提问作者k-wasilewski
相关产品推荐
相关产品推荐

