6

सूक्ष्म सेवाओं के निर्माण के लिए स्प्रिंग बूट के साथ काम करते समय व्यापक और बहुत पठनीय एकीकरण परीक्षण और MockRestServiceServer के साथ रिमोट सेवा अनुरोधों को नकल करना बहुत आसान है।वसंत बूट + बादल | जुउल प्रॉक्सी | एकीकरण परीक्षण

ZuulProxy पर अतिरिक्त एकीकरण परीक्षण करने के लिए समान दृष्टिकोण का उपयोग करने का कोई तरीका है? मैं जो हासिल करना चाहता हूं वह दूरस्थ सर्वरों को नकल करने में सक्षम है जो ZuulProxy आगे बढ़ेगा और सत्यापित करेगा कि मेरे सभी ZuulFitler एस अपेक्षित व्यवहार किए गए हैं। हालांकि, ZuulProxy नेटफ्लिक्स से RestClient का उपयोग कर रहा है (इसे अस्वीकार कर दिया जाएगा?) जो स्वाभाविक रूप से RestTemplate का उपयोग नहीं करता है जिसे MockRestServiceServer द्वारा फिर से कॉन्फ़िगर किया जा सकता है और मुझे वर्तमान में प्रॉक्सी अनुरोधों के लिए रिमोट सेवाओं से प्रतिक्रियाओं का मजाक करने का एक अच्छा तरीका नहीं मिल रहा है।

मेरे पास एक माइक्रो-सेवा है जो API सत्र कुंजी निर्माण को संभालने के लिए ज़िम्मेदार है और फिर एपीआई गेटवे के समान कार्य करेगी। ज़ुउल प्रॉक्सी के साथ अंतर्निहित सेवाओं को अंतर्निहित करने के लिए अग्रेषण किया जाता है, और ज़ुइल फ़िल्टर का पता लगाया जाएगा कि सत्र कुंजी वैध है या नहीं। एक एकीकरण परीक्षण इसलिए एक वैध सत्र तैयार करेगा और फिर नकली समापन बिंदु, जैसे 'एकीकरण/परीक्षण' के लिए आगे बढ़ेगा।

निर्दिष्ट है कि 'एकीकरण/परीक्षण' एक नया endpoint @WebIntegrationTest पर एक विन्यास संपत्ति की स्थापना द्वारा संभव है, मैं सफलतापूर्वक सभी सेवाओं है कि RestTemplate नहीं बल्कि Zuul अग्रेषण के द्वारा नियंत्रित किया जा रहा है नकली कर सकते हैं।

आगे लक्ष्य सेवा की नकल करने का सबसे अच्छा तरीका क्या है?

उत्तर

3

WireMock देखें। मैं अपने स्प्रिंग क्लाउड जुउल प्रोजेक्ट के एकीकरण स्तर परीक्षण करने के लिए इसका उपयोग कर रहा हूं।

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

क्या कोई विन्यास है जिसके लिए काम करने के लिए इसमें जोड़ा जाना चाहिए? मैं कुछ ऐसा करने की कोशिश कर रहा हूं लेकिन जुउल मार्ग नहीं उठाता है। मुझे यह अपवाद मिलता है: com.netflix.client.ClientException: लोड बैलेंसर में क्लाइंट के लिए उपलब्ध सर्वर नहीं है: Strategie'। मुझे लगता है कि ज़ुउल कॉन्फ़िगरेशन से सेवा खोज सर्वर से जानकारी की उम्मीद है, इस मामले में यूरेका, कॉल को सही आईपी पर रूट करने के लिए। – Kilian

संबंधित मुद्दे