আরএসপেকের সাথে একটি গো অ্যাপের ব্ল্যাক বক্স পরীক্ষা

অটোমেটেড টেস্টিং আজকাল ওয়েব বিকাশের সমস্ত ক্রোধ এবং সমগ্র ইন্ডাস্ট্রিতে ব্যবহৃত হয়। একটি ভাল-লিখিত পরীক্ষা আপনি নতুন বৈশিষ্ট্য যুক্ত করতে বা বাগগুলি ঠিক করার সাথে সাথে কোনও অ্যাপ্লিকেশনটিকে দুর্ঘটনাক্রমে ক্ষতির ঝুঁকি হ্রাস করে। যখন আপনার একাধিক উপাদান যা একে অপরের সাথে ইন্টারেক্ট করে সেগুলি নিয়ে গঠিত একটি জটিল সিস্টেম থাকে, তখন প্রতিটি উপাদান কীভাবে অন্যান্য উপাদানগুলির সাথে ইন্টারঅ্যাক্ট করে তা পরীক্ষা করা অবিশ্বাস্যরকম কঠিন।

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

আমাদের প্রকল্পের টেক স্ট্যাক এ যান

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

প্রকল্পের অংশ যা অনুরোধগুলি পরিচালনা করে তা সর্বাধিক গুরুত্বপূর্ণ। সুতরাং আমাদের এটির নির্ভরযোগ্যতা এবং প্রাপ্যতা সর্বাধিক করতে হয়েছিল।

মনোলিথিক অ্যাপ্লিকেশনটির অংশ হিসাবে, অ্যাপ্লিকেশনের অংশগুলিতে কোডের পরিবর্তন না থাকলেও অনুরোধ প্রসেসর কোনও বাগ দ্বারা প্রভাবিত হবে এমন একটি উচ্চ ঝুঁকি রয়েছে। অনুরোধ প্রসেসর ক্রাশ হওয়ার ঝুঁকিও রয়েছে যখন অন্যান্য উপাদানগুলি খুব বেশি ব্যবহৃত হয়। অ্যাপ্লিকেশনটির জন্য এনগনিক্স কর্মীদের সংখ্যা সীমিত, যা কাজের চাপ বাড়ার সাথে সাথে সমস্যার সৃষ্টি করতে পারে। উদাহরণস্বরূপ, যদি অ্যাডমিন অঞ্চলে একই সাথে বেশ কয়েকটি সংস্থান-পৃষ্ঠাগুলি খোলা হয় তবে প্রসেসর পুরো অ্যাপ্লিকেশনটি ধীর করে দেয় বা এমনকি এটি ক্র্যাশ করে।

এই ঝুঁকিগুলি, পাশাপাশি ব্যবস্থায় থাকা সিস্টেমের পরিপক্কতা - আমাদের কয়েক মাস ধরে কোনও বড় ধরনের পরিবর্তন করতে হয়নি - অনুসন্ধানগুলি পরিচালনা করার জন্য পৃথক পরিষেবা তৈরি করার জন্য এই অ্যাপটিকে একটি আদর্শ প্রার্থী করে তুলেছে।

আমরা গোতে পৃথক পরিষেবা লেখার সিদ্ধান্ত নিয়েছি যা রেল অ্যাপ্লিকেশনটির সাথে ভাগ করে নেওয়া ডেটাবেস অ্যাক্সেস করেছে, যা এখনও টেবিল কাঠামোর পরিবর্তনের জন্য দায়ী ছিল। মাত্র দুটি অ্যাপ্লিকেশন সহ, এই জাতীয় স্কিমা একটি ভাগ করা ডাটাবেসের সাথে সূক্ষ্মভাবে কাজ করে। এটি দেখতে এটির মতো:

আমরা পৃথক রেলের উদাহরণে পরিষেবাটি লিখেছি এবং সরবরাহ করেছি। এইভাবে, প্রতিবার আপনি রেলস অ্যাপ্লিকেশনটি প্রয়োগ করার সময় আপনাকে অনুরোধ প্রসেসরটি প্রভাবিত হওয়ার বিষয়ে চিন্তা করতে হবে না। পরিষেবাটি সরাসরি এনগনিক্স ছাড়াই এইচটিটিপি অনুরোধগুলি গ্রহণ করে এবং বেশি মেমরি ব্যবহার করে না। আপনি এটিকে একটি মিনিমালিস্ট অ্যাপ বলতে পারেন!

গো ইউনিট পরীক্ষা নিয়ে সমস্যা

আমরা গো অ্যাপ্লিকেশনটির জন্য ইউনিট পরীক্ষা তৈরি করেছি যা সমস্ত ডেটাবেস অনুরোধকে মশকরা করে। এই সমাধানের পক্ষে অন্যান্য যুক্তি ছাড়াও, মূল রেল অ্যাপ্লিকেশনটি ডাটাবেস কাঠামোর জন্য দায়ী, সুতরাং গো অ্যাপ্লিকেশনটিতে একটি পরীক্ষামূলক ডাটাবেস তৈরি করার তথ্য ছিল না। প্রক্রিয়াজাতকরণের অর্ধেকটি ছিল ব্যবসায়ের যুক্তি, অন্য অর্ধেকটি ছিল ডেটাবেস কোয়েরি, যার সবগুলিই উপহাস করা হয়েছিল।

মজাদার জিনিসগুলি রুবির তুলনায় গোতে খুব কম পঠনযোগ্য। যখনই ডাটাবেস থেকে ডেটা পড়ার জন্য নতুন কার্যকারিতা যুক্ত করা হয়েছিল, তখন অনেকগুলি ব্যর্থ পরীক্ষার সময় আমাদের পূর্বে কাজ করে এমন সময় মশকরাগুলি যুক্ত করতে হয়েছিল। শেষ পর্যন্ত, এই জাতীয় ইউনিট পরীক্ষা খুব কার্যকর হিসাবে প্রমাণিত হয়নি এবং অত্যন্ত ভঙ্গুর ছিল।

আমাদের সমাধান

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

এর অর্থ হ'ল পরীক্ষার পরিষেবাটির মাধ্যমে প্রেরিত অনুরোধগুলি উপহাস করা যায়নি। সুতরাং এই পরীক্ষাগুলি পরিচালনা ও লেখার জন্য আমাদের আরও একটি অ্যাপ্লিকেশন প্রয়োজন needed অনুরোধবিনের মতো কিছু কাজ করবে, তবে এটি স্থানীয়ভাবে কাজ করতে হয়েছিল। আমরা ইতিমধ্যে একটি ইউটিলিটি লিখেছিলাম যা চালাকি করেছিল। সুতরাং আমরা এটি ব্যবহার করার সিদ্ধান্ত নিয়েছে।

এটি ফলাফল ছিল:

  1. আরএসপেকটি এইচটিটিপি অনুরোধ গ্রহণের জন্য নির্দিষ্ট পোর্টের সাথে পরীক্ষা ডাটাবেসে অ্যাক্সেস নির্দিষ্ট করে কনফিগারেশন সহ গো বাইনারি সংকলন ও পরিচালনা করবে run এইচ 8082।
  2. এটি ইউটিলিটিটি চালায় যা 8083 পোর্টে এইচটিটিপি অনুরোধ রেকর্ড করে।
  3. আমরা আরএসপেকে নিয়মিত পরীক্ষা লিখি। এটি ডাটাবেসে প্রয়োজনীয় ডেটা তৈরি করবে এবং লোকালহোস্টের কাছে একটি অনুরোধ প্রেরণ করবে: 8082 যেন এটি HTTP'র মতো বাহ্যিক পরিষেবা।
  4. আমরা প্রতিক্রিয়াটি বিশ্লেষণ করি, ডাটাবেজে পরিবর্তনগুলি পর্যালোচনা করি, অনুরোধবিনের প্রতিনিধি দ্বারা রেকর্ড করা অনুরোধগুলির একটি তালিকা পাই এবং সেগুলি পর্যালোচনা করি।

বাস্তবায়ন বিশদ

আমরা এটিই করেছিলাম। প্রদর্শনের জন্য, পরীক্ষার পরিষেবাটিসেবা কল করুন এবং একটি মোড়ক তৈরি করুন:

এটি উল্লেখ করার মতো যে আরএসপেক ব্যবহার করার সময় ফাইলগুলির স্বয়ংক্রিয় লোডিং সমর্থন ফোল্ডারে কনফিগার করা উচিত:

দির [রেলস.রোট.জয়াইন ('স্পেস / সাপোর্ট / ** / *। আরবি'))। প্রতিটি {| চ | প্রয়োজন চ

শুরুর পদ্ধতি:

  • TheService শুরু করার জন্য প্রয়োজনীয় কনফিগারেশন তথ্য পড়ে Read এই তথ্য বিকাশকারী থেকে বিকাশকারী হিসাবে পৃথক হতে পারে এবং তাই গিট থেকে বাদ দেওয়া হয়। কনফিগারেশনটিতে প্রোগ্রামটি শুরু করার জন্য প্রয়োজনীয় সেটিংস রয়েছে। এই সমস্ত বিভিন্ন কনফিগারেশন এক জায়গায় তাই আপনাকে অপ্রয়োজনীয় ফাইল তৈরি করতে হবে না।
  • সংকলিত হয় এবং যেতে যেতে যেতে
  • প্রতি সেকেন্ডে বাছাই করে এবং অনুরোধগুলি গ্রহণের জন্য প্রস্তুত হওয়ার জন্য থি সার্ভিসারের জন্য অপেক্ষা করে।
  • প্রতিটি প্রক্রিয়াটির আইডি রেকর্ড করে যাতে কোনও কিছুই পুনরাবৃত্তি না হয় এবং একটি প্রক্রিয়া বন্ধ করা যায়।

কনফিগারেশন নিজেই:

স্টপ পদ্ধতিটি কেবল প্রক্রিয়াটি থামিয়ে দেয়। তবে একটা গোটচা আছে! রুবি একটি "গো রান" কমান্ড কার্যকর করে যা থস সার্ভিসকে সংকলন করে এবং অজানা আইডি সহ একটি শিশু প্রক্রিয়াতে একটি বাইনারি ফাইল শুরু করে। আমরা যদি কেবল রুবিতে চলমান প্রক্রিয়াটি বন্ধ করি, শিশু প্রক্রিয়াটি স্বয়ংক্রিয়ভাবে থামবে না এবং বন্দরটি ব্যবহার করা অবিরত থাকবে। থস সার্ভিস বন্ধ করতে, প্রক্রিয়া গ্রুপের আইডি অবশ্যই চালানো উচিত:

এরপরে আমরা স্ট্যান্ডার্ড ভেরিয়েবলগুলি সংজ্ঞায়িত করে, "সার্ভিসটি শুরু করে", যদি এটি ইতিমধ্যে শুরু না করা থাকে এবং অস্থায়ীভাবে ভিডিও রেকর্ডারটি বন্ধ করে দেয় তবে "রেকর্ডকন্টেক্সটেক্স" প্রস্তুত করি কারণ ভিডিও রেকর্ডারটি দেখবে যে আমরা বাহ্যিক পরিষেবা অনুরোধ হিসাবে কী করছি, তবে আমরা চাই না ভিসিআর এই সময়ে জিজ্ঞাসাবাদগুলি উপহাস করবেন:

এবং এখন আমরা চশমাগুলি কীভাবে নিজেরাই লিখেছেন তা দেখতে পারি:

বাহ্যিক পরিষেবাগুলিতে এই পরিষেবাটি HTTP অনুরোধ করতে পারে। অনুরোধগুলি স্থানীয় ইউটিলিটিগুলিতে যা সেগুলি লগ করে তা পুনর্নির্দেশ করতে আমরা এটি কনফিগার করতে পারি। এই ইউটিলিটির জন্য একটি স্টার্ট ও স্টপ র‌্যাপারও রয়েছে যা থস সার্ভিস কন্ট্রোলের অনুরূপ, এই ইউটিলিটিটি কেবল সংকলন ছাড়াই বাইনারি ফাইল হিসাবে শুরু করা যেতে পারে।

অন্যান্য হাইলাইটস

গো অ্যাপ্লিকেশনটি সমস্ত লগ এবং ডিবাগিংয়ের তথ্য এসটিডিউটিতে প্রেরণের জন্য লেখা হয়েছিল। উত্পাদনের সময়, এই আউটপুট একটি ফাইলে প্রেরণ করা হয়। আরএসপেক শুরু করার সময় লগটি কনসোলে প্রদর্শিত হয় যা ডিবাগ করার সময় খুব কার্যকর useful

বিশেষত, আপনি যদি স্পেসিফিকেশনগুলি চালনা করেন যার জন্য থিসোসভারের প্রয়োজন হয় না, এটি শুরু হবে না।

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

উপসংহার

আমরা প্রায় এক বছর ধরে এই সেটআপটি ব্যবহার করে আসছি এবং এর সাথে কোনও ত্রুটিও দেখিনি। ইউনিট পরীক্ষাগুলির চেয়ে স্পষ্টকরণগুলি Go এ আরও বেশি পঠনযোগ্য এবং সেবার অভ্যন্তরীণ কাঠামো জানার উপর নির্ভর করে না। যদি কোনও কারণে আমাদের পরিষেবাটি অন্য ভাষায় পুনর্লিখনের প্রয়োজন হয় তবে আমাদের বিশেষ উল্লেখগুলি পরিবর্তন করার দরকার নেই। অন্য কমান্ডের সাহায্যে পরীক্ষা পরিষেবা শুরু করতে ব্যবহৃত কেবল র‍্যাপারগুলিকেই আবার লিখতে হবে।