REST API का अनुकरण कैसे करें?


13

मैं एक नई परियोजना पर काम कर रहा हूं, जो कि 3rd पार्टी REST API के डेटा को क्वेरी करेगी। यह एक वास्तविक समय के खेल डेटा फीड के लिए है, इसलिए फ़ीड केवल तभी काम करता है जब कोई गेम वास्तव में हो रहा हो।

हालाँकि, 3 पार्टी अच्छा प्रलेखन (XSD, आदि) प्रदान करती है, फिर भी उनके पास किसी गेम को अनुकरण करने का कोई तरीका नहीं है, और इसलिए मैंने इस एपीआई के खिलाफ लिखे गए कोड का परीक्षण करने के लिए मुझे एक वास्तविक गेम होने का इंतजार करना होगा।

मेरा एकमात्र सहारा अपने दम पर एक खेल का अनुकरण करने के लिए कोड लिखना है, लेकिन यह बहुत काम की तरह लगता है। आप इस से कैसे संपर्क करेंगे?


5
यह डेटा कितना जटिल है? मैं ज्यादातर मामलों में उन वस्तुओं को ठूंठ देता हूं जो इनकम डेटा को संभालती हैं। या तो पिछले गेम सत्रों से डेटा का उपयोग करें (परीक्षण के लिए बहुत जटिल हो सकता है) या डेटा का विश्लेषण करें और संबंधित प्रकार की जानकारी निकालें। इसे फ़ाइलों में संग्रहीत करें और अपने मुख्य कार्यक्रम को खिलाएं जैसे कि यह वास्तविक स्रोत से आएगा।
थोरस्टेन मुलर

2
मॉक ऑब्जेक्ट के लिए सही उपयोग मामला: //en.wikipedia.org/wiki/Mock_object
केविन क्लाइन

जवाबों:


15

यह एक नकली वस्तु के लिए एकदम सही उपयोग मामला है । हर लोकप्रिय भाषा के लिए मॉकिंग लाइब्रेरी हैं। आप ऑब्जेक्ट को मॉक करना चाहेंगे जो परीक्षण डेटा वापस करने के लिए REST सेवा प्रतिक्रिया प्रदान करता है। आप या तो परीक्षण डेटा को हाथ से उत्पन्न कर सकते हैं या इसे पिछली कॉल से लाइव सिस्टम में एकत्र कर सकते हैं।


1
यहाँ समस्या कोड की इतनी अधिक नहीं है। यह डेटा में से एक है। मैं एपीआई मोक्स या स्टब्स का
मजाक उड़ा

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

4

एक खेल होने तक प्रतीक्षा करें। फ़ीड से हर ईवेंट को कैप्चर करें। एक सिम्युलेटर लिखें जो उचित समय पर घटनाओं को दोहराता है। Voila, आपके पास वास्तविक डेटा के साथ एक फ़ीड सिम्युलेटर है।


यदि आप रूबी उपयोगकर्ता हैं, तो आप HTTP प्रतिसादों को कैप्चर करने और फिर से देखने के लिए वीसीआर का उपयोग कर सकते हैं ।
dusan

2

मैं अपने खुद के सिम्युलेटर लिखने की सलाह देता हूं। आप इसका उपयोग सभी प्रकार के परिदृश्यों का परीक्षण करने के लिए कर सकते हैं;

  • सर्वर कनेक्शन स्वीकार करता है, लेकिन प्रतिक्रिया नहीं करता है
  • सर्वर बार बाहर
  • सर्वर कचरा उत्तर आदि भेजते हैं ...

जब मैंने अतीत में ऐसा किया है, तो मैंने सिम्युलेटर संदेशों में "विशेष" मानों का उपयोग किया है जो सिम्युलेटर को मेरी आवश्यकता के लिए संकेत देने के लिए प्रेरित करते हैं। यह आपके विकास के वातावरण के बाहर जाने के बिना एंड-टू-एंड परीक्षण चलाने के लिए भी संभव बनाता है।

संपादित करें: उदाहरण के लिए, यदि आपका प्रोजेक्ट XML को किसी 3 पार्टी सेवा के लिए सबमिट करता है, तो अनुरोध में शामिल हो सकता है <value>50.00</value>। सिम्युलेटर को कोडित किया जा सकता है (या, बेहतर, कॉन्फ़िगर) ताकि 50.00 => विस्फोट हो, 60.00 => कचरा, 70.00 => करीबी कनेक्शन, और इसी तरह। विचार यह है कि सिम्युलेटर का व्यवहार उसके इनपुट पर निर्भर करता है, जिसे आप प्रत्येक परीक्षण मामले में नियंत्रित करते हैं।


धन्यवाद। क्या आप give विशेष ’मूल्यों के बारे में आप क्या उदाहरण दे सकते हैं?
डेफेर्रा

1
मेरा उत्तर विस्तृत किया।
रोरी हंटर

2

यह देखते हुए कि शायद सट्टेबाज कुछ नमूना डेटा प्रदान करता है (और इसे एकीकरण चरण के दौरान बचाया जा सकता है), मेरी सलाह है कि इस तरह से उन फीड को व्यवस्थित करें:

  • घटनाओं की सूची
  • अनुसूचित घटनाओं के लिए अद्यतन
  • अद्यतन अद्यतन
  • परिणाम

संभवतः प्रदाता 2 प्रकार के अपडेट प्रदान करता है: पुश (POST) और पुल (GET)।

इस बिंदु पर आपको चाहिए

  1. एक साधारण सर्वर बनाएं जो केवल GET अनुरोधों को संभालता है, ताकि आपके प्रोग्रामर एल्गोरिदम को विस्तृत कर सकें।
  2. एक ही जानकारी के सबमिशन को प्रबंधित करने के लिए एक स्वचालन बनाएं और इस प्रकार आपके सिस्टम पर जोर दे सकते हैं।

विकास और परीक्षण की व्यवस्था करें

उपयोग की जाने वाली तकनीक के विवरण में जाने के बिना, आपको एक मिनी-सर्वर मिलता है , जो केवल 4 URL (या जो प्रदाता प्रदान करता है, उसके आधार पर आवश्यक है) और एक मिनी-पुश सेवा पर प्रतिक्रिया करता है ।

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

व्यक्तिगत रूप से मैं एक सरल पर्ल सर्वर या एक ही है, लेकिन Nodejs के साथ होगा। डेटा के इंजेक्शन के संबंध में, एक पर्याप्त टाइमर होगा, जो एक ऑफ़लाइन ब्राउज़र ( CURL , WGET ) को आमंत्रित करता है।


2

मैं cucumberjs, 127.0.0.1 करने के लिए प्रॉक्सी सर्वर स्थापित करने और साथ एक Node.js प्रक्रिया hooking के साथ phantomjs के संयोजन का उपयोग करके REST API का नकली http-proxyऔर nockवहाँ। CucumberJS महत्वपूर्ण हिस्सा नहीं है, आप किसी भी तरह से टेस्ट परिदृश्य लिख सकते हैं, बाकी सिमुलेशन की कुंजी है। यह केवल मैच-अनुरोध-रिटर्न-डेटा द्वारा मॉक करने में सक्षम है, लेकिन आप उत्तर का उत्पादन करने के लिए पैटर्न और हुक कॉलबैक फ़ंक्शन द्वारा अच्छी तरह से फ़िल्टर कर सकते हैं, इसलिए आप किसी भी स्तर की ग्रैन्युलैरिटी का अनुकरण कर सकते हैं, जिसकी आपको ज़रूरत है (चरम अंत में) पूर्ण डेमो सर्वर, लेकिन आप इसे बढ़ा सकते हैं)।

यह अच्छी तरह से काम करता है:

  1. प्रेत एक URI का अनुरोध करते हैं।
  2. अनुरोध 127.0.0.1:पोर्ट पर प्रॉक्सी सर्वर पर जाता है।
  3. आपका नोड.जेएस प्रक्रिया पारदर्शी रूप से उपयोग करके इसे आगे बढ़ाती है http-proxy। तो कोई भी "सामान्य" लोडिंग (पृष्ठ, चित्र) काम करता है।
  4. यदि आप कुछ अनुरोधों (एपीआई, मुख्य रूप से) nockको इसके लिए उपयोग करना रोकते हैं ।

मेरे परिदृश्य में, मैंने इसे एक ही प्रक्रिया में ककड़ी के जेएस परीक्षणों के साथ जोड़ा, इसलिए यह इस प्रकार था:

  1. टेस्ट चलता है।
  2. यह nockपरीक्षण के परिदृश्य के लिए HTTP मॉकिंग सेट करता है ।
  3. यह सेलेनियम प्रोटोकॉल के माध्यम से प्रेत में एक पेज लोड करता है।

शेष इस पैराग्राफ में पहले दिखाया गया है (अर्थात, यह एक सा है, मैं परीक्षण धावक के रूप में एक पृष्ठ लोड करने के लिए प्रेत निर्देश देता हूं, जो सभी अनुरोधों को वापस मेरे पास भेज देता है, और मैं उन्हें नेट पर भेज देता हूं; या अवरोधन देता हूं; अगर यह परीक्षित एपीआई है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.