বাইপাসের সাথে এলিক্সির মধ্যে কিভাবে বাহ্যিক API গুলি পরীক্ষা করা হয়

$config[ads_kvadrat] not found

মাঝে মাঝে টিà¦à¦¿ অ্যাড দেখে চরম মজা লাগে

মাঝে মাঝে টিà¦à¦¿ অ্যাড দেখে চরম মজা লাগে

সুচিপত্র:

Anonim

আমরা সেবা ভিত্তিক স্থাপত্য নীতি অগ্রাধিকার বিপরীত । তার মানে আমাদের কাছে ছোট, রক্ষণশীল উপাদানগুলি পরিষ্কারভাবে নির্ধারিত দায়িত্বগুলির সাথে রয়েছে। তারা প্রতিনিধিত্বমূলক রাষ্ট্র স্থানান্তর, অথবা REST, API এর মাধ্যমে একে অপরের (বেশিরভাগ) সাথে যোগাযোগ করে।

এটি নমনীয়তা সরবরাহ করে এবং একটি গুরুত্বপূর্ণ দিকের ব্যতিক্রম ছাড়া আমাদের ভাল পরিবেশিত করেছে: টেস্টিং। পরীক্ষার সময়, এড়ানো উচিত:

  • একই মেশিনে চলমান বাহ্যিক সেবা উপর নির্ভরতা।
  • ধীর পরীক্ষা।

কারণ অ্যাপ্লিকেশনগুলি স্বতঃস্ফূর্তভাবে বহিরাগত পরিষেবাসমূহের উপর নির্ভর করে, সেই নির্ভরতাগুলির জন্য একটি পরীক্ষামূলক কৌশল থাকা গুরুত্বপূর্ণ।

আমরা সম্প্রতি বাইপাস ব্যবহার শুরু করেছি এবং আমি ব্যাখ্যা করবো কিভাবে আমরা সেখানে পৌঁছেছি এবং বিশেষভাবে আমরা কীভাবে এটি ব্যবহার করছি।

অতীত

Mock পদ্ধতি এবং এই মত কিছু উদাহরণ তথ্য ফিরে:

যে ছিল (এবং আমি এখনো বিশ্বাস করি) রুবি / Rails বিশ্বের "যেতে উপায়"। দুর্ভাগ্যবশত, জোসে Valim দ্বারা সেরা ব্যাখ্যা এখানে হিসাবে খারাপ আচরণ fosters।

তখন আমরা এক্সভিসিআর ব্যবহার করে শুরু করি, যা একটি দুর্দান্ত লাইব্রেরি, কিন্তু মক / স্টাবস হিসাবে একই রকম ত্রুটি রয়েছে: এটি আলস্যকে উৎসাহিত করে এবং ভাল সংজ্ঞায়িত API গুলির উদ্বেগযুক্ত উদ্বেগগুলিকে পৃথক করে না। ExVCR একটিকে "রেকর্ড" এবং "প্লেব্যাক" রিয়েল-লাইভ ডেটাতে সক্ষম করে। এটি সংহত করা খুব সহজ (আপনার পরীক্ষার কয়েকটি লাইন সহ এবং অন্য সবগুলি যত্ন নেওয়া হয়)। কিন্তু আদর্শভাবে আপনি বহিরাগত নির্ভরতা সম্পর্কে পরীক্ষা করতে হবে, তাদের বিমূর্ত না। এটি তখনও দৃশ্যমান পছন্দসই পছন্দ হতে পারে যখন অন্তর্বর্তী আচরণটি সংক্ষিপ্ত ওভারহেডের সাথে পরীক্ষা করা উচিত (আমরা S3 এর মত আমাজন এর AWS পরিষেবাদিগুলিতে কলগুলির পরীক্ষার জন্য এটি ব্যবহার করি)।

অ্যাডাপ্টার লিখুন

অ্যাডাপ্টারগুলি দুর্দান্ত কাজ করে এবং এপিআই চুক্তিগুলি এবং স্পষ্টভাবে সংজ্ঞায়িত যোগাযোগ সীমানাগুলির কাছাকাছি আলোচনার প্রচার করে। আমরা এখনও এই পদ্ধতিটি ব্যবহার করি, বিশেষ করে যখন অ্যাডাপ্টারটি বেশি জটিল (একটি JSON-RPC সকেটের মত)।

এডাপ্টারটি কীভাবে দেখতে পারে:

কিন্তু সহজ HTTP এন্ডপয়েন্টগুলির জন্য, অ্যাডাপ্টারগুলি অনেকগুলি কাজ বলে মনে হয় এবং এটি একটি বড় ত্রুটিযুক্ত কারণ: তারা পরীক্ষার সমীকরণ থেকে যে লাইব্রেরিগুলিকে উপভোগ করে তা ছেড়ে দেয়। যদি HTTP বা JSON লাইব্রেরিগুলিতে কিছু পরিবর্তন হয়, তবে পরীক্ষাগুলি এটি ধরবে না। এই পদ্ধতির দ্বারা অপ্রচলিত পণ্য-সমালোচনামূলক কোডের পরিমাণ অগ্রহণযোগ্য।

বর্তমান এবং ভবিষ্যত

বাইপাস আমাদের ব্যবহারযোগ্য বহিরাগত পরিষেবাদি অনুসরন করে পরীক্ষাগুলিতে একটি খুব সহজ ওয়েব সার্ভার শুরু করতে দেয়।

এখন, আমরা HTTP লাইব্রেরী, JSON এনকোডিং / ডিকোডিং লাইব্রেরি এবং প্রমাণীকরণ প্রক্রিয়া সহ সমগ্র স্ট্যাক পরীক্ষা করতে পারি। বাইপাস README ভাল লেখা হয়, তাই আমি বাস্তবায়ন বিবরণ পরিত্যাগ করা হবে। তবে, আমরা সংক্ষিপ্ত এবং পাঠযোগ্য পরীক্ষাগুলি রাখতে আমরা কীভাবে এটি ব্যবহার করি তা সামান্য পরিবর্তন করে:

প্রথম বন্ধ, আমরা কখনও কখনও পূর্ণ ইন্টিগ্রেশন স্যুট হিসাবে চালানো হয় যখন আমরা ফেসবুকে কল করতে চান। ফেসবুক এপিআই এখনও আমাদের প্রত্যাশা অনুযায়ী কাজ করে তা নিশ্চিত করতে আমরা অনিয়মিতভাবে এটি করি। যোগ করার পদ্ধতি - ইন্টিগ্রেশন অন্তর্ভুক্ত থেকে পরীক্ষা মিশ্রিত করা API গুলি অনুকরণ করে না, পরিবর্তে, বহিরাগত পরিষেবাকে কল করে (লাইন 5, 7)।

বাইরের পরিষেবায় অনুরোধগুলি অনুসরন করার সময় আমরা স্পষ্ট, যাতে বাইপাস ব্যবহার করে প্রতিটি পরীক্ষা অবশ্যই থাকতে হবে @ টাগ ফেসবুক_ বাইপাস (লাইন 7)।

অবশেষে, দী handle_fb ফাংশন (লাইন 30-39) বলা হচ্ছে (যে দেওয়া request_path ম্যাচ)। আমি ফাংশন হেডে মিলিং পছন্দ করি কারণ এটি স্পষ্ট করে তোলে যে আমরা কোন পথে প্রতিক্রিয়া জানাচ্ছি এবং আমাদের বিভিন্ন পথের জন্য বিভিন্ন ফাংশন সংজ্ঞায়িত করার অনুমতি দেয়।

সুতরাং বাইপাস শুধুমাত্র ট্যাগ সঙ্গে পরীক্ষা চালায় @ ট্যাগ: বাইপাস এবং আমরা আমাদের ইন্টিগ্রেশন স্যুট চলমান হয় না। বাইপাস সেট আপ করার সময় আমরা আরও একটি জিনিস ট্যাগটিকে একটি পৃষ্ঠা আইডি (লাইন 8, ২0) পাস করতে অনুমতি দিচ্ছি। সুতরাং বাইপাস ব্যবহার করে এমন একটি পরীক্ষা কিভাবে তার সমস্ত গৌরব দেখায়:

আপনি দেখতে পারেন, হিসাবে facebook_bypass ট্যাগটি স্পষ্ট করে তোলে যে আমরা API টি সিমুলিয়েটিং করছি (যদি না আমরা ইন্টিগ্রেশন মোডে থাকি)। এটি আমাদের সিমুলেটেড API এ তথ্য পাস করতে দেয় এবং বিভিন্ন পরীক্ষার জন্য একই বাইপাস কনফিগারেশনের পুনঃব্যবহার করা খুব সহজ।

আশা করি এটি আপনাকে বাইরের API গুলি পরীক্ষা করতে সহায়তা করবে। যদি আপনার কোন প্রশ্ন থাকে তবে আপনি টুইটারে আমাকে খুঁজে পেতে পারেন (নীচে দেখুন)।

$config[ads_kvadrat] not found