কেন ইন্টিগ্রেশন পরীক্ষার জন্য মেমরি ডাটাবেস ব্যবহার করবেন?


18

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

আমি এখানে কি মিস করছি?


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

কোনও দেবতার পক্ষে আগেই কোনও বাহ্যিক ডাটাবেস সেটআপ না করে সমস্ত কোডের সর্বশেষতম কোড পেতে এবং পরীক্ষা চালানো সক্ষম হয়ে যায় nice
জেসন ইভান্স

1
উত্পাদনের পরিবেশটিকে ঘনিষ্ঠভাবে সাদৃশ্যপূর্ণ দিকগুলি লোড টেস্টিং এবং স্ট্রেস টেস্টিংয়ের অন্তর্ভুক্ত, যা আমার মতে ইউনিট টেস্টিং (যা কোড কমিট গেটের মানদণ্ড হিসাবে) থেকে আলাদাভাবে সম্পাদন করা উচিত।
rwong

উত্তর:


19

একটি সাধারণ সফ্টওয়্যার বিকাশের পরিস্থিতিতে পরীক্ষাগুলি দুটি পয়েন্টে ব্যবহৃত হয়: বিকাশের সময় এবং বিকাশ শৃঙ্খলে বরাবর পণ্যটি সরানোর আগে।

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

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


6

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

ইন্টিগ্রেশন টেস্টগুলি ধীর গতিতে চলবে তবে এগুলি দ্রুত হলে আপনি এগুলি আরও প্রায়ই চালাতে পারবেন। উদাহরণস্বরূপ, প্রতিটি প্রতিশ্রুতিবদ্ধ করার আগে। অবশ্যই এটি সম্পূর্ণ পরিবেশের মতো সম্পূর্ণ নয়, তবে কমপক্ষে আপনি ম্যাপিং স্তরটি, জেনারেল এসকিউএল, অংশটি একে অপরের সাথে কীভাবে কথা বলছেন তা পরীক্ষা করছেন etc. সবার জন্য লাইসেন্স কেনার দরকার নেই। আপনি পরীক্ষায় 90% কোডটি coveringেকে দেওয়ার ক্ষেত্রে আরও ত্রুটি পেতে পারেন যা প্রতি সপ্তাহে বা খারাপতম, সপ্তাহে একবার 100% কোড টেস্টিংয়ের আওতার তুলনায় প্রতি ঘন্টা একবার দৌড়েছিল।

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


3

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

যুক্তি কিছুটা জটিল হয়ে উঠলে বিষয়গুলি আরও কিছুটা হয়ে যায়। আপনার যদি কোনও পদ্ধতি "createOrUpdateUser (...)" থাকে তবে কী হবে। আপনি যদি ডাটাবেসটিকে উপহাস করেছেন তবে আপনি যাচাই করতে পারবেন যে কোনও নির্দিষ্ট প্যারামিটার দিয়ে কোনও নির্দিষ্ট পদ্ধতি একবার কল করা হয়েছিল যখন মোক কোন বস্তু না ফেরায় এবং যখন কোনও বিদ্যমান অবজেক্ট ফিরিয়ে দেয় তখন ডাটাবেসে আলাদা পদ্ধতি চালু করা হয়। এটি সেই অস্পষ্ট লাইনে পৌঁছতে শুরু করে যেখানে মেমরির ডেটাবেসে একটি বিশেষজ্ঞের স্পিন আপ করতে এবং পূর্বনির্ধারিত ডেটা সহ সেই কোডটি পরীক্ষা করা সহজ হতে পারে (বিশেষত এটি ইতিমধ্যে সেখানে থাকলে)।

কিছু প্রকৃত কোডে আমি (বিক্রয় বিন্দুতে) কাজ করেছি, আমাদের একটি resumeSuspededTransaction(...)পদ্ধতি ছিল । এটি ডাটাবেস থেকে কোনও বস্তুতে (এবং এর উপাদানগুলি) লেনদেনকে টেনে আনবে এবং ডাটাবেস আপডেট করবে। আমরা এটি উপহাস করেছিলাম এবং কোথাও কোডে একটি বাগ লুকিয়ে রেখেছিল ডাটাবেসে ডেটা সিরিয়ালাইজেশন এবং ডেসরিয়ালাইজেশন সহ (আমরা একটি টাইপ পরিবর্তন করেছি যা ডাটাবেসে আলাদাভাবে সিরিয়ালযুক্ত হয়েছিল)।

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

পরে, আমরা সেখানে একটি ডাটাবেস রেখেছিলাম এবং বুঝতে পেরেছিলাম যে আমরা যদি পরিবর্তে মেমরির ডাটাবেজে একটি পরীক্ষা করে চলে যাই তবে বাগটি সেই জুনিট পরীক্ষার মাধ্যমে কখনই অর্জন করতে পারত না।


মেমোরিতে ডাটাবেসের সুবিধাগুলি রয়েছে:

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

1

এটি আপনি যে ডাটাবেস সিস্টেমটি ব্যবহার করছেন তার উপর অনেক বেশি নির্ভর করে। যখন আপনার ডিবি সিস্টেম আপনাকে একটি ইন-মেমরি বিকল্প সরবরাহ করে যা প্রায় 100% এপিআই এবং একটি ডিস্ক-ভিত্তিক ডাটাবেস কনফিগারেশনের সাথে সামঞ্জস্যপূর্ণ আচরণ (গতি এবং মৌমাছি ফেইলসেফ বা কোর্স ব্যতীত) তখন ইন-মেমরি ভেরিয়েন্টটি স্পষ্টতই ভাল ।

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


1

সাধারণ মানুষের কথায়:

ইউনিট পরীক্ষার জন্য আর্কিটেকচারের গুরুত্বপূর্ণ অংশগুলির উপহাস করা ঠিক আছে (এবং অবশ্যই) ।

তবে ইন্টিগ্রেশন পরীক্ষার জন্য, আমি দৃ strongly়ভাবে আপনার সাথে একমত। উপহাস করা উচিত নয় এবং যতটা সম্ভব বাস্তব পরিবেশ সরবরাহ করা উচিত similar

সর্বোপরি, ইন্টিগ্রেশন টেস্টগুলি আর্কিটেকচারের বিভিন্ন অংশগুলি কীভাবে এক সাথে আচরণ করে তা পরীক্ষা করার বিষয়ে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.