इस पेज पर बताया गया है कि शार्डिंग की मदद से, सुइट मॉड्यूल (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 होने पर यह पक्का किया जा सकेगा कि खाली शार्ड नहीं बनाए जा रहे हैं.