অবশেষে সামঞ্জস্যপূর্ণ পরিষেবার বিরুদ্ধে আমি কীভাবে পরীক্ষাগুলি লিখব?


17

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

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

আপনি কীভাবে শেষ পর্যন্ত সামঞ্জস্যপূর্ণ পরিষেবাটি পরীক্ষা করেন?


2
আপনি কেন প্রথম স্থানে একটি বাহ্যিক পরিষেবার বিরুদ্ধে প্রজননযোগ্যতা প্রত্যাশা করছেন?

... এবং আপনি আসলে কি পরীক্ষা করার চেষ্টা করছেন? তোমার গোপন সংকেত? নাকি গুগলের?

5
আমি পুরো সিস্টেমটি পরীক্ষা করছি। অর্থাৎ, তারা একীকরণের পরীক্ষা নয়, একীকরণের পরীক্ষা।
ডগ রিচার্ডসন

3
How can I reproducibly test an eventually consistent service? - আপনি পারবেন না। আপনাকে "পুনরুত্পাদনযোগ্য" শব্দটি বা "অবশেষে" শব্দটি সরিয়ে ফেলতে হবে; আপনার দুটোই থাকতে পারে না
রবার্ট হার্ভে

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

উত্তর:


16

আপনার কার্যকরী পরীক্ষাগুলি ডিজাইনের সময় অ-কার্যকরী প্রয়োজনীয়তাগুলি বিবেচনা করুন - যদি আপনার পরিষেবায় "এক্স (সেকেন্ড / মিনিট / ইত্যাদি) এর মধ্যে সামঞ্জস্যপূর্ণ" এর একটি অ-কার্যকারী প্রয়োজন হয়, কেবল পুট অনুরোধগুলি চালান, এক্স অপেক্ষা করুন, তারপরে জিইটি অনুরোধগুলি চালান run

এই মুহুর্তে, যদি ডেটাটি এখনও 'আগত না' হয়, আপনি PUT অনুরোধটিকে আপনার প্রয়োজনীয়তার সাথে সম্মতিহীন বলে বিবেচনা করতে পারেন।


7

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

একটি নকল পরিষেবা তৈরি করুন যা পুট এবং জিইটি অনুরোধগুলি পরিচালনা করে, তবে এটি ধারাবাহিক করার জন্য অতিরিক্ত অপারেশন রয়েছে। আপনার পরীক্ষাটি তখন:

datastore.do_put(myobj);
datastore.make_consistent();
validate(datastore.do_get(), myobj);

GET সাফল্যের সাথে PUT অবজেক্টটি পুনরুদ্ধার করে এটি আপনাকে আপনার সফ্টওয়্যারটির আচরণ পরীক্ষা করার অনুমতি দেয়। পরিষেবাটি ধারাবাহিক না হওয়ার কারণে যখন জিইটি বস্তুটি (বা সঠিক বস্তু) খুঁজে না পায় তখন এটি আপনাকে আপনার সফ্টওয়্যারটির আচরণ পরীক্ষা করার অনুমতি দেয়। শুধু কলটি ছেড়ে দিন make_consistent()

এটি সত্যিকারের পরিষেবার সাথে ইন্টারঅ্যাক্ট করে এমন পরীক্ষাগুলি রাখা এখনও উপযুক্ত তবে এগুলি আপনার সাধারণ বিকাশের কর্মপ্রবাহের বাইরে চলে যাওয়া উচিত, কারণ এগুলি কখনই 100% নির্ভরযোগ্য হবে না (যেমন পরিষেবাটি নিচে থাকলে)। এই পরীক্ষাগুলি ব্যবহার করতে হবে:

  1. PUT এবং পরবর্তী GET এর মধ্যে সামঞ্জস্যপূর্ণ হয়ে ওঠার মধ্যে গড় এবং সবচেয়ে খারাপ ক্ষেত্রে সময় মেট্রিক সরবরাহ করে; এবং
  2. আপনার জাল পরিষেবা প্রকৃত পরিষেবার সাথে একই রকম আচরণ করে তা যাচাই করুন। Https://codewithoutrules.com/2016/07/31/ যাচাই করা হয়েছে- দেখুন / দেখুন

6

তাহলে ঠিক আছে. "হোয়াট ইউ ইউ টেস্টিং" হ'ল মূল প্রশ্ন।

  • গুগল স্টাফগুলি কাজ করে ধরে কী হয় তা নিয়ে আমি আমার অভ্যন্তরীণ যুক্তি পরীক্ষা করছি

এই ক্ষেত্রে আপনার গুগল পরিষেবাগুলি উপহাস করা উচিত এবং সর্বদা একটি প্রতিক্রিয়া ফিরিয়ে দেওয়া উচিত।

  • আমি আমার যুক্তিটি পরীক্ষা করছি যা গুগল উত্পাদন করবে জানি আমি ক্ষণস্থায়ী ত্রুটিগুলির সাথে মানিয়ে নিতে পারি

এই ক্ষেত্রে আপনার গুগল পরিষেবাগুলি উপহাস করা উচিত এবং সঠিক প্রতিক্রিয়ার আগে সর্বদা ক্ষণস্থায়ী ত্রুটি ফিরিয়ে দেওয়া উচিত

  • আমি পরীক্ষা করছি যে আমার পণ্যটি আসল গুগল পরিষেবাটির সাথে কাজ করবে

আপনার আসল গুগল পরিষেবাগুলি ইনজেক্ট করা উচিত এবং পরীক্ষা চালানো উচিত। কিন্ত! আপনি যে কোডটি পরীক্ষা করছেন এটিতে ট্রান্সিয়েন্ট ত্রুটি হ্যান্ডলিং (পুনরায় চেষ্টা করা) হওয়া উচিত। সুতরাং আপনার একটি ধারাবাহিক প্রতিক্রিয়া পাওয়া উচিত। (যদি না গুগল খুব খারাপ ব্যবহার করা হয়)


মক পরামর্শের জন্য +1 - আমি চাইলে অতিরিক্ত বিকল্পগুলির জন্য আরও বেশি ভোট দিতাম।
এমকোটেল

6

নিম্নলিখিতগুলির মধ্যে একটি ব্যবহার করুন:

  • পুট করার পরে, সাফল্য পাওয়া পর্যন্ত এনটি পুনরায় চেষ্টা করুন। এন চেষ্টা করার পরে যদি সাফল্য না পায় ব্যর্থ ail
  • PUT এবং GET এর মধ্যে ঘুমান

দুর্ভাগ্যক্রমে, এই দুটি কৌশলই আপনাকে যাদু মান (এন বা ঘুমের সময়কাল) নিতে হবে।


1
আপনি কি পরিষ্কার করতে পারেন: এই বিকল্পগুলি, বা পরিপূরক? আমি মনে করি আপনি বলতে চাইছেন যে তারা বিকল্পগুলি - এবং আমি তাদের সম্পর্কে এইভাবেই ভাবি। তবে আমি ভুল হতে পারি।
রবিন গ্রিন

1
সঠিক, আমি তাদের বিকল্প হতে চেয়েছিলাম।
ডগ রিচার্ডসন

2

আমি এটি যেমন বুঝতে পারি, গুগল ক্লাউড ডেটাস্টোর দৃ strongly ়ভাবে সামঞ্জস্যপূর্ণ এবং শেষ পর্যন্ত সুসংগত অনুসন্ধানগুলি উভয়েরই মঞ্জুরি দেয়

বাণিজ্য বন্ধ হ'ল দৃ strongly়ভাবে সামঞ্জস্যপূর্ণ প্রশ্নগুলি বেশ মারাত্মক হার-সীমাবদ্ধ (পরীক্ষার সময় আপনি যার সাথে বাঁচতে পারেন)।

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

উদাহরণস্বরূপ, আপনি কল start_debug_strong_consistency()এবং পদ্ধতি কল করতে পারে end_debug_strong_consistency()

প্রারম্ভিক পদ্ধতিটি এমন একটি কী তৈরি করবে যা পরবর্তী সমস্ত প্রশ্নের জন্য পূর্বপুরুষ কী হিসাবে ব্যবহৃত হতে পারে এবং শেষ পদ্ধতিটি কীটি মুছে ফেলবে।

আপনি যে প্রকৃত ক্যোয়ারীগুলি পরীক্ষা করছেন তার মধ্যে কেবলমাত্র setAncestor(your_debug_key)সেই চাবিটি উপস্থিত থাকলে কল করা হবে ।


1

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

তারপরে লেখার ক্রিয়াকলাপগুলির পূর্বশর্তগুলি পরীক্ষা করার জন্য আপনাকে বিরক্ত করার দরকার নেই, কারণ লেখার ক্রিয়াকলাপগুলি ইতিমধ্যে আপনার জন্য সেগুলি পরীক্ষা করে দেখবে এবং তারা সফল না হওয়া পর্যন্ত আপনি কেবল এগুলি আবার চেষ্টা করুন!

যথাসম্ভব একই "ডিফল্ট" টাইমআউটগুলি ব্যবহার করুন, পুরো সিস্টেমটি ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে ধীরে পার্টিশন।।।।।।।।।


1

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

প্রদত্ত প্ল্যাটফর্মের মাধ্যমে কোনও অবজেক্টের প্রতিলিপি কার্যকরভাবে পরীক্ষা করার জন্য আপনাকে পরিষেবাটির প্রতিটি পিওপি থেকে বিশেষত একই স্থানে রাখা বস্তুর অনুরোধ করার জন্য পরীক্ষাটি নির্ধারণ করতে হবে। আমি পিওপিগুলির তালিকাটি এক থেকে পাঁচ বার পরীক্ষার পরামর্শ দিচ্ছি বা আপনার পিওপিগুলির তালিকায় থাকা সমস্ত পিওপিগুলি অবজেক্টের প্রতিবেদন রয়েছে। এই ব্যবস্থাগুলির একটি সেট এখানে পরীক্ষাটি সম্পাদন করতে হবে যা আপনি সামঞ্জস্য করতে মুক্ত: 1, 5, 60 মিনিট, 12 ঘন্টা, 25 ঘন্টা এটি ডাটাস্টোরে রাখার পরে। বিশ্বব্যাপী বস্তুগুলি প্রতিলিপি দেওয়ার কোনও প্রদত্ত পরিষেবার দক্ষতার জন্য অনুভূতি অর্জনের জন্য কীটি পরের পর্যালোচনা এবং বিশ্লেষণের জন্য প্রতিটি বিরতিতে ফলাফলগুলি লগিং করছে। স্থানীয়ভাবে অনুরোধ করা হলে প্রায়শই ডেটাস্টোর পরিষেবাগুলি কেবল একটি পিওপি-তে স্থানীয় কপিটি টান দেয় [বিজিপি প্রোটোকলের মাধ্যমে রাউটিংটি করা হয় যার কারণে আপনার পরীক্ষার প্রতিটি নির্দিষ্ট পিওপি থেকে কোনও নির্দিষ্ট প্ল্যাটফর্মের জন্য বিশ্বব্যাপী বৈধ হওয়ার জন্য অনুরোধ করতে হবে] । গুগলের ডেটাস্টোরের ক্ষেত্রে আপনি "33 টি দেশের জুড়ে 70 টিরও বেশি উপস্থিতি" থেকে প্রদত্ত কোনও অবজেক্ট জিজ্ঞাসা করার জন্য আপনার পরীক্ষা স্থাপনের দিকে তাকিয়ে আছেন; আপনাকে সম্ভবত গুগল সহায়তা থেকে পিওপি নির্দিষ্ট ঠিকানা url তালিকা পেতে হবে [রেফারেন্স:https://cloud.google.com/about/locations/ ] বা গুগল অনুলিপি করার জন্য দ্রুত ব্যবহার করছে, দ্রুত সমর্থন করুন [ https://www.fastly.com / উত্স ]।

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


0

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

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

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


এটি সুবিধাজনক হলেও এটি একীকরণের জন্য একাধিক অ্যাপ্লিকেশন সার্ভারের সাথে জড়িত সূক্ষ্ম বিরতি সৃষ্টি করতে পারে e আমি অনুমান করি যে তারা স্থানীয় সার্ভারটি একটি ভাল কারণে অবশেষে সামঞ্জস্য করেছে!
রবিন সবুজ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.