wiremock tutorial introduction wiremock
यह परिचयात्मक वीडियो ट्यूटोरियल वायरमॉक की विशेषताएं और वायरलॉक को स्टैंडअलोन सर्वर के रूप में और JUnit टेस्ट के एक भाग के रूप में कैसे समझा जाएगा:
इस ट्यूटोरियल में, हम वायरमॉक टूल के आस-पास बुनियादी अवधारणाओं और विवरणों को कवर करेंगे। इसका उपयोग एक स्टैंडअलोन HTTP सर्वर के साथ-साथ आवश्यकताओं के अनुसार JUnit परीक्षणों के भीतर किया जा सकता है।
यह एक भारी उपयोग किया जाने वाला उपकरण है क्योंकि यह ओपन-सोर्स है और इसमें योगदानकर्ताओं का एक बड़ा समुदाय है। यह सेवा वर्चुअलाइजेशन टूल की श्रेणी में आता है।
आप क्या सीखेंगे:
वायरमॉक क्या है?
सरल शब्दों में, वायरमॉक एकीकरण परीक्षणों के लिए एक नकली सेटअप है। यह केवल एक नकली सर्वर है जो किसी दिए गए अनुरोध के लिए अपेक्षित प्रतिक्रिया देने के लिए अत्यधिक विन्यास योग्य है।
यह व्यापक रूप से विकास के दौरान और अधिक महत्वपूर्ण रूप से एकीकरण परीक्षण के दौरान उपयोग किया जाता है, जबकि एक प्रणाली या सेवा एक या कई बाहरी या आंतरिक निर्भरता / सेवाओं से बात करती है।
आइए सामान्य रूप से एकीकरण परीक्षण के बारे में अधिक समझने की कोशिश करें और यह पता करें कि वायरमॉक उन चुनौतियों को पार करने और हमारे जीवन को आसान बनाने में कैसे मदद कर सकता है।
आम तौर पर, जब शब्द एकीकरण आता है, तो 2 संचार प्रणालियों के बीच एकीकरण को समाप्त करने के लिए हम पर क्या प्रहार होता है। अब, आइए इसे परीक्षण के तहत एक आवेदन के परिप्रेक्ष्य से देखें जो काम पाने के लिए कुछ बाहरी सेवा का उपयोग करता है।
उदाहरण के लिए, मान लें कि हम ऑनलाइन यात्रा या टिकटिंग प्रणाली के लिए एक एप्लिकेशन का निर्माण कर रहे हैं और हमारे पास पीएनआर स्टेटस चेक के लिए एक मॉड्यूल है, जो भारतीय रेलवे द्वारा प्रदान की गई बाहरी एपीआई को हिट करता है।
अब, हम बाहरी एपीआई के साथ अपने आवेदन का परीक्षण कैसे कर सकते हैं?
ऐसा करने के 2 तरीके हैं:
- प्रथम, इकाई परीक्षण दृष्टिकोण है, जहां हम इंटरफ़ेस को प्रदान करते हैं (या घर में बनाया गया है) ताकि बाहरी एपीआई मारने से पहले भी हमारे सिस्टम परीक्षण किए गए या नकली प्रतिक्रिया को मान्य करता है। यह एक बाहरी निर्भरता का मजाक उड़ाने की कोशिश करने वाली एक इकाई परीक्षण के अलावा और कुछ नहीं है।
- दूसरा बाहरी निर्भरता के कुछ परीक्षण वातावरण (या वास्तविक उत्पादन वातावरण) के साथ परीक्षण कर रहा है। हालाँकि, उस दृष्टिकोण के साथ कई चुनौतियाँ हैं जो नीचे उल्लिखित हैं:
- बाहरी API सिस्टम हमेशा उपलब्ध नहीं हो सकता है। यानी हम भारी निर्भर हैं या बाहरी प्रणालियों पर निर्भर हैं और किसी भी समय हमारे परीक्षण और अप्रत्यक्ष रूप से विकास / रिलीज प्रक्रिया को प्रभावित करेंगे।
- दूसरे, बाहरी API में परीक्षण वातावरण हो सकता है या नहीं भी हो सकता है। उदाहरण के लिए, पीएनआर स्टेटस चेक एपीआई को हमेशा वास्तविक पीएनआर नंबर लाने और प्रतिक्रियाएं देने की आवश्यकता हो सकती है।
- बहुत बार, एक एपीआई को मारने में शामिल लागतें होती हैं। उदाहरण के लिए, मान लीजिए पीएनआर चेक एपीआई हर 1000 अनुरोधों के लिए 100 रुपये लेता है। चूंकि एकीकरण परीक्षण आमतौर पर प्रत्येक प्रतिगमन के दौरान चलाए जाते हैं (और अधिकांश समय हर प्रतिबद्ध के साथ), ऐसे एपीआई को हिट करने के लिए लागत-प्रभावी समाधान नहीं हो सकता है जो हमें परीक्षण प्रयोजनों के लिए भी खर्च करता है।
- वांछित प्रतिक्रिया वापस करने के लिए एक बाहरी एपीआई को कॉन्फ़िगर नहीं किया जा सकता है। यदि संभव हो तो, आपको विभिन्न अनुरोध इनपुट के लिए विभिन्न प्रतिक्रियाओं को सुनिश्चित करने के लिए बहुत सारे परीक्षण डेटा बनाने होंगे।
उदाहरण के लिए, आप त्रुटि परिदृश्यों का परीक्षण करना चाहते हैं जैसे कि एपीआई विभिन्न प्रकार के डेटा के लिए अलग स्थिति कोड लौटा रहा है। अब चूंकि प्रतिक्रिया हमारे नियंत्रण में नहीं है, इसलिए हमें विभिन्न संभावित परिदृश्यों या परिणामों को मान्य करने के लिए डेटा के कई सेट बनाने होंगे।
नीचे दिए गए आरेख की सहायता से इन अवधारणाओं को समझें।
यहां हम एकीकरण परीक्षण के दोनों दृष्टिकोणों की तुलना कर रहे हैं अर्थात् बाहरी निर्भरता के वास्तविक कार्यान्वयन का उपयोग करते हुए मॉक सर्वर के बिना और मॉक सर्वर (वायरमॉक) का उपयोग करते हैं जो निर्भरता के लिए प्राप्त अनुरोधों की प्रतिक्रियाओं का मखौल उड़ाते हैं।
बाद के मामले में, यह निर्भरता के वास्तविक कार्यान्वयन पर निर्भरता और निर्भरता को बहुत कम कर देता है और गुणवत्ता और वितरण कार्यक्रम पर समझौता किए बिना बहुत सारी कॉन्फ़िगरेशन क्षमताएं देता है।
वायरमॉक रिक्वेस्ट कैसे करता है?
जैसा कि हम जानते हैं, वायरमॉक एक प्रोग्रामेटिक मॉक सर्वर है, जिस तरह से यह किसी दिए गए अनुरोध का जवाब देता है वह 'मैपिंग' नामक फ़ोल्डर में सभी संबंधित मैपिंग (या नकली प्रतिक्रियाओं) को संग्रहीत करके है।
वायरमॉक का एक मिलान घटक है जो संग्रहित मैपिंग के लिए आने वाले अनुरोधों से मेल खाता है और यदि एक सफल मैच लौटा है, तो पहला ऐसा मैच दिए गए अनुरोध के जवाब के रूप में वापस आ जाता है।
यदि आप वायरमॉक के स्टैंडअलोन संस्करण का उपयोग कर रहे हैं, तो एक बार जब आप वायरमॉक सर्वर चलाते हैं, तो आप मैपिंग फ़ोल्डर देखेंगे जो वायरमॉक इंस्टॉल / जार स्थान निर्देशिका में बनाए जाएंगे।
वीडियो ट्यूटोरियल: वायरमॉक टूल का परिचय
java में लिंक्ड लिस्ट कैसे घोषित करें
वायरमॉक का उपयोग कैसे करें?
अब देखते हैं कि हम अपने एकीकरण परीक्षणों के साथ इस उपकरण का उपयोग कैसे कर सकते हैं।
इसका उपयोग निम्नलिखित तरीकों से किया जा सकता है।
एक स्टैंडअलोन वायरमॉक सर्वर
एक स्टैंडअलोन सर्वर के रूप में, आप सिर्फ वायरनॉक के लिए मावेन / ग्रैडल निर्भरता के साथ एक सरल जावा एप्लिकेशन बना सकते हैं, और इसे एक चालू प्रक्रिया के रूप में रख सकते हैं।
यह एक अच्छा विकल्प है जब आप किसी मशीन पर अपने स्टैंडअलोन सर्वर को होस्ट करना चाहते हैं और इसे पूरे प्रोजेक्ट या टीम के लिए सिंगल मॉकिंग सर्वर के रूप में उपयोग करते हैं। स्टैंडअलोन मोड में, उपलब्ध स्टैंडअलोन जार को डाउनलोड करके, इस टूल को निष्पादित भी किया जा सकता है यहां और बस जार को चलाएं।
उदाहरण के लिए, मान लें कि आप अपने वायरमॉक स्टैंडअलोन उदाहरण को क्लाउड या ऑन-प्रिमाइसेस सर्वर पर किसी सर्वर पर तैनात करना चाहते हैं, तो आप बस इस जार को चला सकते हैं और सिस्टम आईपी का उपयोग करके इसे होस्ट की गई सेवा के रूप में उपयोग कर सकते हैं।
चलो कुछ देखते हैं इसे स्टैंडअलोन मोड में चलाने के लिए चरण (और पोर्ट, मैपिंग फ़ोल्डर, आदि जैसे विभिन्न चीजों को कॉन्फ़िगर करने के लिए)
# 1) वायरमॉक जार को टर्मिनल (या विंडोज उपयोगकर्ताओं के लिए कमांड प्रॉम्प्ट) से किसी अन्य JAR फ़ाइल (वायरमॉक जार इंस्टॉल डायरेक्टरी से) की तरह चलाएं।
java -jar wiremock-standalone-2.25.1.jar
#दो) डिफ़ॉल्ट रूप से, वायरमॉक लोकलहोस्ट: 8080 पर चलता है (यदि पोर्ट उपयोग के लिए मुफ्त है, तो उपरोक्त कमांड एक स्टैंडअलोन मोड में वायरमॉक सर्वर शुरू करेगा) और आप नीचे दिए गए आउटपुट को देखेंगे।
# 3) अब एक बार सर्वर शुरू होने के बाद, आप लोकलहोस्ट पर किसी भी URL पर जा सकते हैं: 8080
उदाहरण के लिए, http: // localhost: 8080 / get / user / 1 - जैसा कि वर्तमान में कोई मोक्स सेट नहीं किए जा रहे हैं, आपको नीचे दिखाए अनुसार प्रतिक्रिया मिलेगी।
# 4) अब इस URL के लिए एक सरल स्टब / मॉक सेट करने का प्रयास करें और URL को फिर से हिट करने का प्रयास करें। फिर हम यह सत्यापित करेंगे कि एक ही URL को मारना अब मॉकडाउन या स्टब्ड प्रतिक्रिया को लौटा रहा है।
curl -X POST --data '{ 'request': { 'url': '/get/user/1', 'method': 'GET' }, 'response': { 'status': 200, 'body': 'Here it is!
' }}' http://localhost:8080/__admin/mappings/new
आइए पहले इस CURL अनुरोध को समझने की कोशिश करें:
- हम http: // localhost: 8080 / __ एडमिन / मैपिंग / नई के लिए एक CURL POST अनुरोध कर रहे हैं - अब यह वह स्थान है जहां सभी मैपिंग को वायरमॉक सर्वर के लिए संग्रहीत किया जाएगा जिसे हमने JAR फ़ाइल के माध्यम से निष्पादित / शुरू किया है।
- कर्ल अनुरोध में, हम 'प्रतिक्रिया' खंड में प्रतिक्रिया निकाय के साथ - जैसे अनुरोध URL और अनुरोध विधि को परिभाषित कर रहे हैं। इसका तात्पर्य यह है कि जब भी URL के साथ GET का अनुरोध आता है / / user / 1 तब निर्दिष्ट प्रतिक्रिया निकाय के साथ प्रतिक्रिया करें।
# 5) एक बार स्टब्ड रिस्पांस सेट होने के बाद (उपरोक्त कर्ल रिक्वेस्ट की मदद से), फिर हम यूआरएल को हिट करने की कोशिश कर सकते हैं और यह देख सकते हैं कि क्या हमें वायरमॉक से वापस स्टब्ड प्रतिक्रिया मिल रही है।
आइए इस URL को ब्राउज़र में मारने की कोशिश करें - http: // localhost: 8080 / get / user / 1
यदि मानचित्रण सफलतापूर्वक सेट किया गया था, तो आपको एक प्रतिक्रिया मिलनी चाहिए जैसा कि नीचे दिखाया गया है:
JUnit टेस्ट के साथ JUnit नियम विन्यास के रूप में
वायरमॉक सर्वर का उपयोग JUnit परीक्षणों के साथ JUnit नियम सेटअप के रूप में किया जा सकता है। इसके साथ, JUnit वायरमॉक जीवनचक्र की देखभाल करता है यानी वायरमॉक शुरू और रुकता है।
डेस्कटॉप समर्थन साक्षात्कार प्रश्न और उत्तर l2 स्तर के लिए पीडीएफ
यह अधिकतर उन सेटअपों में उपयोग किया जाता है जहां आप हर परीक्षण के बाद सर्वर को शुरू करना और बंद करना चाहते हैं।
इसके अलग-थलग होने के अपने फायदे हैं और इसमें स्टैंडअलोन सेटअप के विपरीत एक उच्च स्तर की विन्यास क्षमता है, जहां कई लोग एक ही सर्वर का उपयोग करके समाप्त हो सकते हैं और एक दूसरे के स्टब्ड प्रतिक्रियाओं पर कदम रख सकते हैं।
आइए इस दृष्टिकोण का एक कार्यशील उदाहरण देखें:
# 1) वायरमॉक सर्वर के लिए एक JUnit नियम बनाएं। यह कदम अनिवार्य रूप से एक परीक्षण सेटअप कदम की तरह है, जहां हम हर परीक्षण से पहले वायरमॉक सर्वर को इंस्टाल करने के लिए JUnit धावक को बता रहे हैं और हर परीक्षण के बाद सर्वर को रोक देते हैं।
इसका मतलब यह भी है कि जेनेट रनर वायरमॉक सर्वर को शुरू करने और रोकने का ध्यान रखेगा, बिना स्पष्ट रूप से ऐसा किए।
@Rule public WireMockRule wm = new WireMockRule(wireMockConfig().port(8080));
#दो) अब हम अपना परीक्षण लिखेंगे, जहाँ हम पहले वांछित समापन बिंदु के खिलाफ अनुरोधों को निष्पादित करने के लिए अपने ग्राहक (okHttp का उपयोग करके) बनाएंगे।
// execute request through http client OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url('http://localhost:8080/test/abc') .get() .build();
# 3) लेकिन, आप यहाँ देख सकते हैं, कि हमने अभी भी अपने वायरमॉक उदाहरण के लिए वापस आने के लिए कोई स्टब निर्धारित नहीं किया है। अर्थात उपरोक्त क्लाइंट URL http: // localhost: 8080 / test / abc का अनुरोध करेगा जिसमें कोई भी कॉन्फ़िगर स्टब नहीं है। इस स्थिति में, वायरमॉक सर्वर कोई 404 सामग्री नहीं लौटाएगा।
# 4) अब हमारे वायरमॉक सर्वर उदाहरण के लिए उपरोक्त URL के लिए एक स्टब सेट करने के लिए, हमें वायरमॉक के स्टब स्थिर तरीकों को कॉल करना होगा जैसा कि नीचे दिखाया गया है।
private void configureStubs() { configureFor('localhost', 8080); stubFor(get(urlEqualTo('/test/abc')) .willReturn(aResponse().withBody('Test success!'))); }
यहाँ, आप देख सकते हैं कि हमने कुछ स्थिर विधियों जैसे configFor, stubFor, आदि का उपयोग किया है। ये सभी विधियाँ वायरमॉक जावा लाइब्रेरी का एक हिस्सा हैं। (हम इन तरीकों को अपने अगले ट्यूटोरियल / अनुभागों में विस्तार से देखेंगे)
# 5) अब किए गए कॉन्फ़िगरेशन चरण के साथ, हम केवल क्लाइंट के माध्यम से अनुरोध निष्पादित कर सकते हैं और प्रतिक्रिया को मान्य कर सकते हैं (वायरमॉक के माध्यम से लौटने के लिए स्टब के लिए जो कुछ भी कॉन्फ़िगर किया गया है उसके आधार पर)
संक्षेप में, यहां बताया गया है कि संपूर्ण कोड नमूना कैसा दिखेगा:
public class WiremockJunitTest { @Rule public WireMockRule wm = new WireMockRule(wireMockConfig().port(8080)); @Test public void assertWiremockSetup() throws IOException { // Arrange - setup wiremock stubs configureStubs(); // execute request through the http client OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url('http://localhost:8080/test/abc') .get() .build(); // Act - call the endpoint Response response = client.newCall(request).execute(); // Assert - verify the response assertEquals('Test success!', response.body().string()); verify(exactly(1),getRequestedFor(urlEqualTo('/test/abc'))); } // configure stubs for wiremock private void configureStubs() { configureFor('localhost', 8080); stubFor(get(urlEqualTo('/test/abc')) .willReturn(aResponse().withBody('Test success!'))); } }
निर्भरता आवश्यक है
यह इस प्रकार उपलब्ध है:
- एक स्टैंडअलोन जार जिसमें सिर्फ वायरमॉक निर्भरता होती है।
- एक मोटा जार जिसमें वायरमॉक और उसकी सभी निर्भरताएँ होती हैं।
दोनों स्वाद ग्रैडल और मावेन निर्भरता के रूप में उपलब्ध हैं। अधिक विवरण आधिकारिक मावेन भंडार पर उपलब्ध हैं यहां
वीडियो ट्यूटोरियल: वायरमॉक विथ ज्यूनिट टेस्ट
निष्कर्ष
इस ट्यूटोरियल में, हमने वायरमॉक की बुनियादी विशेषताओं के माध्यम से देखा और देखा कि इसे स्टैंडअलोन सर्वर के रूप में कैसे चलाया जा सकता है और JUnit नियमों का उपयोग करके JUnit परीक्षणों के एक भाग के रूप में।
हमने कुछ समय के लिए रुकने का भी फैसला किया और हम इसे अपने अगले ट्यूटोरियल में विस्तार से कवर करेंगे।
अगले ट्यूटोरियल
अनुशंसित पाठ
- माइक्रो फोकस लोडरनर का परिचय - लोडरनर ट्यूटोरियल # 1 के साथ लोड परीक्षण
- Ngrok ट्यूटोरियल: इंस्टॉलेशन और सेटअप के साथ एक संक्षिप्त परिचय
- TestNG ट्यूटोरियल: TestNG फ्रेमवर्क का परिचय
- सेलेनियम वेबड्राइवर का परिचय - सेलेनियम ट्यूटोरियल # 8
- जावा प्रोग्रामिंग भाषा का परिचय - वीडियो ट्यूटोरियल
- पायथन परिचय और स्थापना प्रक्रिया
- यूनिक्स क्या है: यूनिक्स का एक संक्षिप्त परिचय
- Neoload ट्यूटोरियल: Neoload परिचय, डाउनलोड और स्थापना