6

使用Spring Boot构建微服务时,使用MockRestServiceServer可以非常轻松地编写大量可读集成测试和模拟远程服务请求。Spring Boot + Cloud | Zuul Proxy |集成测试

是否有使用类似的方法对ZuulProxy执行额外的集成测试的方法吗?我想实现的是能够模拟ZuulProxy将转发的远程服务器,并验证我的所有ZuulFitler的行为如预期。然而,ZuulProxy使用RestClient来自Netflix(不建议使用它似乎?),这自然不使用RestTemplate可能被MockRestServiceServer重新配置,我目前还没有找到嘲讽从代理请求远程服务响应的好方法。

我有一个微服务,负责处理API对话密钥生成,然后将起到类似的API网关。转发是通过Zuul代理向底层公开服务进行的,Zuul过滤器将检测会话密钥是否有效。因此,集成测试会创建一个有效的会话,然后转发到假端点,例如“集成/测试”。

同时指定“集成/测试”是一个新的端点是通过在@WebIntegrationTest设置配置属性可能的话,我可以成功地嘲笑正在通过RestTemplate但不Zuul转发处理的所有服务。

怎样做实现正向目标服务的嘲讽的最佳方式?

回答

3

退房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"))); 
} 
} 
+1

是否有任何配置需要添加这个工作?我试图做类似的事情,但Zuul并没有选择路线。我得到这个异常'由com.netflix.client.ClientException引起:负载平衡器没有可用的客户端:策略'的服务器。我想这是来自Zuul配置,期望来自服务发现服务器的信息,在这种情况下,Eureka将呼叫路由到正确的IP。 – Kilian

相关问题