使用Spring Boot构建微服务时,很容易编写广泛且易读的集成测试并模拟远程服务请求MockRestServiceServer
.
有没有办法使用类似的方法来执行额外的集成测试ZuulProxy
?我想要实现的是能够模拟远程服务器,ZuulProxy
这些服务器将转发并验证我ZuulFitler
的所有操作符合预期.但是,ZuulProxy
是否正在使用RestClient
Netflix(它似乎被弃用?),它自然不会使用RestTemplate
哪些可以重新配置MockRestServiceServer
,我目前无法找到一种很好的方法来模拟远程服务对代理请求的响应.
我有一个微服务,负责处理API会话密钥创建,然后将采取类似于API网关的行为.使用Zuul Proxy对底层公开的服务进行转发,Zuul Filters将检测Session密钥是否有效.因此,集成测试将创建有效会话,然后转发到虚假端点,例如"集成/测试".
通过设置配置属性@WebIntegrationTest
,可以指定"集成/测试"是新端点,我可以成功模拟通过RestTemplate
但不是Zuul转发处理的所有服务.
实现模拟远期目标服务的最佳方法是什么?
查看WireMock.我一直用它来做我的Spring Cloud Zuul项目的集成级测试.
import static com.github.tomakehurst.wiremock.client.WireMock.*; public class TestClass { @Rule public WireMockRule serviceA = new WireMockRule(WireMockConfiguration.options().dynamicPort()); @Before public void before() { serviceA.stubFor(get(urlPathEqualTo("/test-path/test")).willReturn(aResponse() .withHeader("Content-Type", "application/json").withStatus(200).withBody("serviceA:test-path"))); } @Test public void testRoute() { ResponseEntityresponseEntity = this.restTemplate.getForEntity("/test-path/test", String.class); assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK); serviceA.verify(1, getRequestedFor(urlPathEqualTo("/test-path/test"))); } }