wiremock做组件测试时遇到异常Software caused connection abort: recv failed; nested exception is java.net.Soc...

wiremock做组件测试时遇到异常"Software caused connection abort: recv failed; nested exception is java.net.SocketException: Software caused connection abort: recv failed"。

发现写用例的时候,一个一个跑没问题,后面整个测试类一起跑,总有用例报这个异常。

分析后发现,问题是Spring Boot运行器每个一次启动和停止spring容器。如果您使用@Rule来声明WireMockRule,则每种测试方法都会启动和停止一次Rule,也就是wiremock server。这意味着在测试用例之间,Spring容器的池化连接将变为无效,在第一个用例跑完后,导致后续的用例报错。

3种解决方案

1.切换到Spring团队的WireMock集成:http://cloud.spring.io/spring-cloud-static/spring-cloud-contract/1.1.2.RELEASE/#_spring_cloud_contract_wiremock

2.使用@ClassRule来声明WireMockRule,以便WireMock在每个测试类中只启停一次。

3.配置HTTP客户端以检测和丢弃失效http池连接。优点是,很多负载平衡器/反向代理/浮动IP表现出相似的行为,这样做对生产系统中的故障转移更具弹性。

推荐使用第1或2方案修复后,仍然配置第3个方案,

你可能感兴趣的:(wiremock做组件测试时遇到异常Software caused connection abort: recv failed; nested exception is java.net.Soc...)