यहाँ बायपास के साथ एलिक्जिर में कैसे टेस्ट एक्सटर्नल एपीआई हैं

$config[ads_kvadrat] not found

ªà¥à¤°à¥‡à¤®à¤®à¤¾ धोका खाएका हरेक जोडी लाई रुवाउ

ªà¥à¤°à¥‡à¤®à¤®à¤¾ धोका खाएका हरेक जोडी लाई रुवाउ

विषयसूची:

Anonim

हम सर्विस ओरिएंटेड आर्किटेक्चर सिद्धांतों को प्राथमिकता देते हैं श्लोक में । इसका मतलब है कि हमारे पास स्पष्ट रूप से परिभाषित जिम्मेदारियों के साथ छोटे, बनाए रखने योग्य घटक हैं। वे एक दूसरे के साथ संवाद करते हैं (ज्यादातर), प्रतिनिधि राज्य स्थानांतरण, या आरईएसटी, एपीआई के माध्यम से।

यह लचीलापन प्रदान करता है और एक महत्वपूर्ण पहलू के अपवाद के साथ हमें अच्छी तरह से सेवा प्रदान की है: परीक्षण। परीक्षण करते समय, किसी को बचना चाहिए:

  • एक ही मशीन पर चलने वाली बाहरी सेवाओं पर निर्भरता।
  • धीमी गति से परीक्षण।

क्योंकि अनुप्रयोग स्वाभाविक रूप से बाहरी सेवाओं पर निर्भर करते हैं, इसलिए उन आश्रितों के लिए परीक्षण रणनीति बनाना महत्वपूर्ण है।

हमने हाल ही में बाईपास का उपयोग शुरू किया है और मैं बताऊंगा कि हम वहां कैसे पहुंचे और विशेष रूप से हम इसका उपयोग कैसे कर रहे हैं।

भूतकाल

नकली तरीके और इस तरह से कुछ उदाहरण डेटा लौटाएं:

यह था (और मुझे विश्वास है कि अभी भी है) रूबी / रेल की दुनिया में "जाने का रास्ता"। दुर्भाग्य से, जोस वालिम द्वारा यहां बताए गए इस बुरे व्यवहार को सबसे अच्छा समझा गया।

हमने तब एक्सवीसीआर का उपयोग करना शुरू किया, जो एक महान पुस्तकालय है, लेकिन इसमें मोक्स / स्टब्स के समान कमियां हैं: यह आलस्य को प्रोत्साहित करता है और उन चिंताओं के अलगाव को बढ़ावा नहीं देता है जो अच्छी तरह से परिभाषित एपीआई के लिए महत्वपूर्ण हैं। ExVCR एक "रिकॉर्ड" और "प्लेबैक" वास्तविक-लाइव डेटा को सक्षम करता है। इसे एकीकृत करना बहुत आसान है (आपके परीक्षण में कुछ पंक्तियाँ और बाकी सभी चीजों का ध्यान रखा जाता है)। लेकिन आदर्श रूप से आपको परीक्षणों में बाहरी निर्भरता के बारे में सोचना होगा, न कि उन्हें बाहर निकालना। यह तब भी परिदृश्यों के लिए एक व्यवहार्य विकल्प हो सकता है जब समापन बिंदु व्यवहार को न्यूनतम ओवरहेड के साथ परीक्षण किया जाना चाहिए (हम इसका उपयोग अमेज़ॅन की एडब्ल्यूएस सेवाओं जैसे एस 3 के परीक्षण कॉल के लिए करते हैं)।

एडेप्टर दर्ज करें

एडेप्टर बहुत अच्छा काम करते हैं और एपीआई अनुबंधों और स्पष्ट रूप से परिभाषित संचार सीमाओं के आसपास विचार-विमर्श को बढ़ावा देते हैं। हम अभी भी इस दृष्टिकोण का उपयोग करते हैं, खासकर जब एडेप्टर अधिक जटिल होता है (जैसे JSON-RPC सॉकेट)।

यह एक अनुकूलक कैसे दिख सकता है:

लेकिन सरल HTTP एंडपॉइंट्स के लिए, एडेप्टर बहुत काम की तरह लगते हैं और एक बड़ी खामी है: वे पुस्तकालयों को छोड़ देते हैं जो वे परीक्षण समीकरण से बाहर का उपभोग करते हैं। यदि HTTP या JSON लाइब्रेरी में कुछ भी बदलता है, तो परीक्षण इसे पकड़ नहीं पाते हैं। उत्पादन-आलोचनात्मक कोड की मात्रा जो इस दृष्टिकोण से पूरी नहीं होती है, अस्वीकार्य है।

वर्तमान और भविष्य

बाईपास हमें उन परीक्षणों में एक बहुत ही सरल वेब सर्वर शुरू करने की अनुमति देता है जो हमारे द्वारा उपयोग की जाने वाली बाहरी सेवाओं का अनुकरण करते हैं।

अब, हम HTTP लाइब्रेरी, JSON एन्कोडिंग / डिकोडिंग लाइब्रेरी और प्रमाणीकरण तंत्र सहित पूरे स्टैक का परीक्षण कर सकते हैं। बाईपास README अच्छी तरह से लिखा गया है, इसलिए मैं कार्यान्वयन विवरणों को छोड़ दूंगा। हालाँकि, हम थोड़ा बदलाव करते हैं कि परीक्षणों को संक्षिप्त और पठनीय रखने के लिए हम इसका उपयोग कैसे करते हैं:

सबसे पहले, हम कभी-कभी फेसबुक को कॉल करना चाहते हैं जब परीक्षण पूर्ण एकीकरण सूट के रूप में चलाए जाते हैं। हम यह सुनिश्चित करने के लिए अनियमित रूप से फेसबुक एपीआई अभी भी हमारी उम्मीदों के अनुसार कार्य करते हैं। जोड़ा जा रहा है - एकीकरण को समाप्त करें सेवा मेरे मिक्स टेस्ट एपीआई का अनुकरण नहीं करता है, बल्कि, बाहरी सेवा को कॉल करता है (लाइनें 5, 7)।

जब हम बाहरी सेवाओं के अनुरोधों का अनुकरण करते हैं, तो हम स्पष्ट होते हैं ताकि प्रत्येक परीक्षा में बायपास का उपयोग हो @tag facebook_bypass (पंक्ति 7)।

अंततः handle_fb फ़ंक्शन (लाइनें 30-39) कहा जा रहा है (यह देखते हुए कि request_path मेल खाता है)। मुझे फंक्शन हेड में मैचिंग पसंद है क्योंकि यह स्पष्ट करता है कि हम किस पथ पर प्रतिक्रिया कर रहे हैं और हमें अलग-अलग रास्तों के लिए अलग-अलग फ़ंक्शन परिभाषित करने की अनुमति देता है।

इसलिए बायपास केवल टैग किए गए परीक्षणों पर चलता है @ टाग: बाईपास और जब हम अपना एकीकरण सूट नहीं चला रहे हैं। बायपास स्थापित करते समय एक और बात हम टैग को एक पेज आईडी (लाइनें 8, 20) पास करने की अनुमति देते हैं। तो यहां बताया गया है कि बाईपास का उपयोग करने वाला एक परीक्षण अपनी सभी महिमा में दिखता है:

जैसा कि आप देख सकते हैं, facebook_bypass टैग यह स्पष्ट करता है कि हम एपीआई का अनुकरण कर रहे हैं (जब तक कि हम एकीकरण मोड में नहीं हैं)। यह हमें सिम्युलेटेड एपीआई के बारे में जानकारी देने की अनुमति देता है, और विभिन्न परीक्षणों के लिए एक ही बाईपास कॉन्फिगर का पुन: उपयोग करना बहुत आसान है।

मुझे उम्मीद है कि यह आपको बाहरी एपीआई का परीक्षण करने में मदद करेगा। आप ट्विटर पर मुझे पा सकते हैं (नीचे देखें) यदि आपके कोई और प्रश्न हैं।

$config[ads_kvadrat] not found