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

相關問題