与Spring Boot一起构建微服务时,很容易编写广泛且易读的集成测试,并使用来模拟远程服务请求MockRestServiceServer
。
有没有办法使用类似的方法对它执行附加的集成测试ZuulProxy
?我想要实现的是能够模拟远程服务器,该服务器ZuulProxy
将转发并验证我ZuulFitler
的所有服务器的行为均符合预期。但是,ZuulProxy
是RestClient
从Netflix使用(似乎已弃用吗?),这自然不使用RestTemplate
,可以通过Netflix重新配置,MockRestServiceServer
并且我目前找不到模拟来自远程服务的代理请求响应的好方法。
我有一个微服务,负责处理API会话密钥的创建,然后将其行为类似于API网关。使用Zuul代理转发到基础公开的服务,并且Zuul过滤器将检测会话密钥是否有效。因此,集成测试将创建一个有效的会话,然后转发到伪造的端点,例如“集成/测试”。
通过在上设置配置属性@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() {
ResponseEntity<String> responseEntity = this.restTemplate.getForEntity("/test-path/test", String.class);
assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);
serviceA.verify(1, getRequestedFor(urlPathEqualTo("/test-path/test")));
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句