এই পৃষ্ঠায় বর্ণনা করা হয়েছে যে, শার্ডিং-এর মাধ্যমে একটি স্যুট মডিউল ( AndroidTest.xml )-কে কীভাবে টিউন করা সম্ভব এবং ল্যাবে অবিচ্ছিন্নভাবে চলার সময় কীভাবে সেরা গতি ও পারফরম্যান্স পাওয়া যায়। আমরা প্রতিটি বিকল্প ব্যবহারের যৌক্তিকতা সহ সেগুলোকে সাধারণভাবে বর্ণনা করার চেষ্টা করব।
ল্যাবে কোনো স্যুট একটানা চালানোর সময়, সামগ্রিক সমাপ্তির সময় কমানোর জন্য স্যুটটিকে সাধারণত একাধিক ডিভাইসে শার্ড করা হয়। হারনেসটি সাধারণত প্রতিটি শার্ডের এক্সিকিউশন টাইমের মধ্যে ভারসাম্য বজায় রাখার চেষ্টা করে যাতে সামগ্রিক সমাপ্তির সময় (যখন শেষ শার্ডটি শেষ হয়) সর্বনিম্ন হয়; কিন্তু কিছু টেস্টের প্রকৃতির কারণে, আমাদের কাছে সবসময় পর্যাপ্ত ইন্ট্রোস্পেকশন থাকে না এবং মডিউলের মালিককে কিছু আচরণ টিউন করার প্রয়োজন হয়।
শেয়ার করা যাবে নাকি যাবে না?
কোনো মডিউলকে ( AndroidTest.xml ) <option name="not-shardable" value="true" /> দিয়ে ট্যাগ করে হারনেসকে জানানো যায় যে এটিকে শার্ড করা উচিত নয়।
সাধারণত একটি মডিউলে, হারনেসকে আপনার মডিউলটি শার্ড করতে দেওয়াটাই (যা ডিফল্ট আচরণ) সঠিক কাজ। কিন্তু কিছু ক্ষেত্রে, আপনি সেই আচরণটি অগ্রাহ্য করতে চাইতে পারেন:
- যখন আপনার মডিউলটি স্থাপন করা ব্যয়বহুল হয়:
একটি মডিউল শার্ডিং করার ফলে প্রস্তুতিমূলক কাজগুলো (যেমন APK ইনস্টল করা, ফাইল পুশ করা ইত্যাদি) সম্ভবত সংশ্লিষ্ট প্রতিটি ডিভাইসের জন্য একবার করে চালানো হয়। যদি আপনার মডিউল সেটআপ দীর্ঘ ও ব্যয়বহুল হয় এবং পরীক্ষার রানটাইমের তুলনায় এর পুনরাবৃত্তি করা লাভজনক না হয়, তবে আপনার মডিউলটিকে 'নট-শার্ডেবল' হিসেবে ট্যাগ করা উচিত।
- যখন আপনার মডিউলে পরীক্ষার সংখ্যা কম থাকে:
একটি মডিউল শার্ডিং করার ফলে সমস্ত টেস্ট কেস বিভিন্ন ডিভাইসে স্বাধীনভাবে চলতে পারে। এটি প্রথম পয়েন্টের সাথে সম্পর্কিত; যদি আপনার টেস্টের সংখ্যা কম হয়, তাহলে কিছু শার্ডে একটিমাত্র টেস্ট বা কোনো টেস্টই নাও থাকতে পারে, যা যেকোনো প্রস্তুতিমূলক পদক্ষেপকে বেশ ব্যয়বহুল করে তুলবে। উদাহরণস্বরূপ, শুধুমাত্র একটি টেস্ট কেসের জন্য একটি APK ইনস্টল করা সাধারণত লাভজনক নয়।
ইনস্ট্রুমেন্টেশন পরীক্ষা: শার্ডের সর্বোচ্চ সংখ্যা কত?
AndroidJUnitTest-এর মাধ্যমে চালিত একটি ইন্সট্রুমেন্টেশন টেস্ট, যতক্ষণ না আমরা APK-টি ইনস্টল ও রান করছি, ততক্ষণ পর্যন্ত হারনেসকে জানায় না যে ইন্সট্রুমেন্টেশনের অংশ হিসেবে কতগুলো টেস্ট রয়েছে। এই অপারেশনগুলো ব্যয়বহুল এবং স্যুটের অন্তর্ভুক্ত সমস্ত মডিউলের জন্য শার্ডিং-এর সময়ে এগুলো সম্পাদন করা সম্ভব নয়।
হারনেসটি ইন্সট্রুমেন্টেশন টেস্টটিকে অতিরিক্ত শার্ড করতে পারে এবং এর ফলে কিছু শার্ড খালি থেকে যেতে পারে; পাঁচটি টেস্ট সহ একটি ইন্সট্রুমেন্টেশন টেস্টকে ছয়টি শার্ডে ভাগ করলে, পাঁচটি শার্ডে একটি করে টেস্ট এবং একটি শার্ডে কোনো টেস্ট থাকবে না। এই শার্ডগুলোর প্রতিটির জন্য একটি ব্যয়বহুল APK ইনস্টলেশনের প্রয়োজন হবে।
সুতরাং, যখন ইন্সট্রুমেন্টেশন টেস্ট APK-তে টেস্টের সংখ্যা কম থাকে, তখন মডিউলটিকে <option name="not-shardable" value="true" /> দিয়ে ট্যাগ করলে হারনেসটি বুঝতে পারবে যে ওই মডিউলটিকে শার্ডিং করা লাভজনক নয়।
AndroidJUnitTest রানারে একটি বিশেষ অপশন আছে, যার মাধ্যমে এটি সর্বোচ্চ কতগুলো শার্ডে বিভক্ত হতে পারবে তা নির্দিষ্ট করা যায়: <option name="ajur-max-shard" value="5" /> ।
এর মাধ্যমে আপনি ইনভোকেশন লেভেলে অনুরোধ করা শার্ডের সংখ্যা নির্বিশেষে, ইন্সট্রুমেন্টেশনটি সর্বোচ্চ কতবার শার্ড করা যাবে তা নির্দিষ্ট করতে পারেন। ডিফল্টরূপে, ইনভোকেশনের জন্য অনুরোধ করা শার্ডের সংখ্যা অনুযায়ী ইন্সট্রুমেন্টেশনটি শার্ড করা হবে।
উদাহরণস্বরূপ, যদি আপনার ইন্সট্রুমেন্টেশন টেস্ট APK-তে মাত্র দুটি টেস্ট কেস থাকে কিন্তু আপনি তারপরও এটিকে শার্ড করতে চান, তাহলে ajur-max-shard এর মান 2 রাখলে তা নিশ্চিত করবে যে আপনি কোনো খালি শার্ড তৈরি করছেন না।