टारगेट किए गए डेटा को अलग-अलग हिस्सों में बांटने की सुविधा कॉन्फ़िगर करना

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