যখন পরীক্ষার কর্পাস বড় হয় বা সম্পাদনের সময় দীর্ঘ হয়ে যায়, তখন আমরা বিভিন্ন ডিভাইসে পরীক্ষাগুলিকে বিভক্ত করার সম্ভাবনা অফার করি: শার্ডিং ।
শার্ডিং সমর্থন করার জন্য টেস্ট রানারের পূর্বশর্ত রয়েছে।
বেশিরভাগ প্রধান পরীক্ষার দৌড়বিদ ইতিমধ্যেই শার্ডিং সমর্থন করে তাই কোনও অতিরিক্ত কাজের প্রয়োজন নেই। এগুলি ইতিমধ্যেই শার্ডিং সমর্থন করে: ইন্সট্রুমেন্টেশন পরীক্ষা, হোস্ট-সাইড চালিত পরীক্ষা, GTest।
ট্রেডফেডে আমরা দুই ধরনের শার্ডিং সমর্থন করি: স্থানীয় এবং বিতরণ। তারা কিছু মিল ভাগ করে, তাই এই পৃষ্ঠাটি সাধারণ বৈশিষ্ট্য এবং তারপর প্রতিটির সুনির্দিষ্ট বর্ণনা দেয়।
সাধারণ বৈশিষ্ট্য
শার্ডিংয়ের উভয় রূপই পরীক্ষার রানারদের থেকে একই বৈশিষ্ট্য গ্রহণ করে: শার্ডগুলিকে স্বাধীন এবং নির্ধারক হতে হবে। উভয় শার্ডিংয়ের প্রথম ধাপ হল পরীক্ষার সম্পূর্ণ অর্ডার করা তালিকা তৈরি করা এবং তারপর সেগুলিকে বিভিন্ন গ্রুপ/শার্ডে বিভক্ত করা।
শার্ডিং ফর্মগুলির প্রধান পার্থক্য হল যেভাবে তারা পরীক্ষাগুলি চালায়। নীচের বিভাগে আরো বিস্তারিত.
স্থানীয় শার্ডিং
লোকাল শার্ডিং মানে শার্ডড ইনভোকেশন কার্যকর করার সাথে জড়িত সমস্ত ডিভাইস একই ফিজিক্যাল হোস্টের সাথে সংযুক্ত।
মৃত্যুদন্ড
স্থানীয় শার্ডিং সমস্ত ডিভাইসকে একই হোস্টের সাথে সংযুক্ত করার সুবিধা নেয় যেগুলি পরীক্ষা করার জন্য একটি পুল তৈরি করে এবং প্রতিটি ডিভাইসের পোলিং পরীক্ষা যখন এটি বিনামূল্যে থাকে (অর্থাৎ, পূর্বের পরীক্ষা দিয়ে করা হয়)। এটি একটি অপ্টিমাইজড ডিভাইস ব্যবহার ফলাফল. আমরা একে ডাইনামিক শার্ডিংও বলি।
অপশন
--shard-count XX
বিতরণ করা শার্ডিং
ডিস্ট্রিবিউটেড শার্ডিং মানে শার্ডেড ইনভোকেশন কার্যকর করার সাথে জড়িত সমস্ত ডিভাইস যে কোনো জায়গায় থাকতে পারে এবং বিভিন্ন ফিজিক্যাল হোস্টের সাথে সংযুক্ত থাকতে পারে।
মৃত্যুদন্ড
ডিস্ট্রিবিউটেড শার্ডিং পরীক্ষার তালিকা তৈরি করার সময় ঘটে এবং প্রতিটি শার্ডের বিষয়বস্তু শুধুমাত্র বর্তমানে অনুরোধ করা শার্ডটি কার্যকর করে। তাই সমস্ত বিতরণ করা শার্ডগুলি প্রথমে একই তালিকা তৈরি করে এবং তারপরে এটির একটি পারস্পরিক একচেটিয়া উপসেট কার্যকর করে, যার ফলে সমস্ত পরীক্ষা চালানো হয়।
এই ফর্মের প্রধান সম্পত্তি হল শার্ডগুলি একে অপরের সম্পর্কে সম্পূর্ণরূপে অজানা এবং স্বাধীনভাবে ব্যর্থ হতে পারে।
প্রধান ত্রুটি হল যে শার্ডের দৈর্ঘ্য অগত্যা ভারসাম্যপূর্ণ নয় কারণ আমরা প্রতিটি শার্ডে প্রতিটি পরীক্ষার রানটাইম আগে থেকে ভবিষ্যদ্বাণী করতে পারি না। প্রতিটি শার্ডে প্রায় একই সংখ্যক টেস্ট কেস থাকার জন্য বিতরণ করা হয়।
অপশন
--shard-count XX --shard-index XX
টোকেন শার্ডিং
টোকেন শার্ডিং শুধুমাত্র স্থানীয় শার্ডিংয়ের সাথে ব্যবহার করা যেতে পারে। অ-স্থানীয় শার্ডিং ব্যবহারের ক্ষেত্রে পতাকাটি অকার্যকর। কখনও কখনও শার্ডিংয়ের সাথে জড়িত ডিভাইসগুলির মধ্যে একটি বিশেষ সংস্থান ধারণ করে যা অন্যরা করে না, যেমন একটি সিম কার্ড৷ কিছু পরীক্ষা কেবল তখনই কাজ করতে পারে যখন সেই বিশেষ সংস্থানটি উপলব্ধ থাকে এবং অন্যথায় ব্যর্থ হবে।
টোকেন শার্ডিং এই ধরনের ব্যবহারের ক্ষেত্রে আমাদের সমাধান। টেস্ট মডিউলগুলি তাদের AndroidTest.xml
এ কোন বিশেষ সংস্থান প্রয়োজন তা ঘোষণা করতে সক্ষম হয় এবং ট্রেডফেড সেই রিসোর্স আছে এমন ডিভাইসে পরীক্ষাগুলি রুট করে৷
XML কনফিগারেশন
<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />
টোকেনের value
ট্রেডফেডের TokenProperty
সাথে মেলে এবং TokenProviderHelper
এর একজন হ্যান্ডলারের সাথে যুক্ত।
এটি পরীক্ষা মডিউলগুলিকে এমন ডিভাইসগুলির বিরুদ্ধে চালানোর অনুমতি দেয় যা পরীক্ষাগুলি সঠিকভাবে সম্পাদন করতে পারে।
কোন ডিভাইস পরীক্ষা চালাতে না পারলে কি হবে?
যদি কোনো ডিভাইসে টেস্ট মডিউলের সাথে মেলে রিসোর্স না থাকে, তাহলে টেস্ট মডিউল ব্যর্থ হয় এবং বাদ দেওয়া হয় কারণ এটি সঠিকভাবে চালাতে পারে না।
উদাহরণস্বরূপ, যদি একটি পরীক্ষা মডিউল একটি সিম কার্ড চালানোর জন্য অনুরোধ করে কিন্তু কোনো ডিভাইসে একটি সিম কার্ড না থাকে, তাহলে পরীক্ষা মডিউল ব্যর্থ হয়।
বাস্তবায়ন
প্রধান Tradefed কমান্ড লাইনে এই বৈশিষ্ট্য পতাকা পাস করুন:
--enable-token-sharding