当前位置:  开发笔记 > 编程语言 > 正文

Spring Boot + Cloud | Zuul代理| 集成测试

如何解决《SpringBoot+Cloud|Zuul代理|集成测试》经验,为你挑选了1个好方法。

使用Spring Boot构建微服务时,很容易编写广泛且易读的集成测试并模拟远程服务请求MockRestServiceServer.

有没有办法使用类似的方法来执行额外的集成测试ZuulProxy?我想要实现的是能够模拟远程服务器,ZuulProxy这些服务器将转发并验证我ZuulFitler的所有操作符合预期.但是,ZuulProxy是否正在使用RestClientNetflix(它似乎被弃用?),它自然不会使用RestTemplate哪些可以重新配置MockRestServiceServer,我目前无法找到一种很好的方法来模拟远程服务对代理请求的响应.

我有一个微服务,负责处理API会话密钥创建,然后将采取类似于API网关的行为.使用Zuul Proxy对底层公开的服务进行转发,Zuul Filters将检测Session密钥是否有效.因此,集成测试将创建有效会话,然后转发到虚假端点,例如"集成/测试".

通过设置配置属性@WebIntegrationTest,可以指定"集成/测试"是新端点,我可以成功模拟通过RestTemplate但不是Zuul转发处理的所有服务.

实现模拟远期目标服务的最佳方法是什么?



1> Shawn Clark..:

查看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 responseEntity = this.restTemplate.getForEntity("/test-path/test", String.class);
        assertThat(responseEntity.getStatusCode()).isEqualTo(HttpStatus.OK);

        serviceA.verify(1, getRequestedFor(urlPathEqualTo("/test-path/test")));
    }
}


是否有任何需要添加的配置才能工作?我正在尝试做类似的事情,但Zuul没有选择路线.我得到这个异常`引起:com.netflix.client.ClientException:负载均衡器没有客户端的可用服务器:strategie`.我想这来自Zuul配置,期望来自服务发现服务器的信息,在这种情况下是Eureka,将呼叫路由到正确的ip.
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有