इस पेज पर बताया गया है कि शार्डिंग की मदद से, किसी सुइट मॉड्यूल (AndroidTest.xml
) को कैसे ट्यून किया जा सकता है. साथ ही, यह भी बताया गया है कि लैब में लगातार प्रोसेस करते समय, सबसे अच्छी स्पीड परफ़ॉर्मेंस कैसे हासिल की जा सकती है. हम इन विकल्पों के बारे में सामान्य तरीके से बताने की कोशिश करेंगे. साथ ही, हर विकल्प का इस्तेमाल करने की वजह भी बताएंगे.
लैब में किसी सुइट को लगातार चलाने पर, आम तौर पर सुइट को कई डिवाइसों पर बांटा जाता है, ताकि पूरा होने में लगने वाला कुल समय कम हो. आम तौर पर, हर स्HARD को पूरा करने में लगने वाले समय को कम करने के लिए, हर स्HARD को पूरा करने में लगने वाले समय को बैलेंस करने की कोशिश की जाती है. इससे, आखिरी स्HARD के पूरा होने में लगने वाला कुल समय कम हो जाता है. हालांकि, कुछ टेस्ट की प्रकृति की वजह से, हमारे पास हमेशा ज़रूरत के मुताबिक जानकारी नहीं होती. इसलिए, मॉड्यूल के मालिक को कुछ व्यवहार को ट्यून करना पड़ता है.
क्या डेटा को अलग-अलग हिस्सों में बांटा जा सकता है या नहीं?
किसी मॉड्यूल (AndroidTest.xml
) को <option name="not-shardable" value="true" />
से टैग किया जा सकता है, ताकि हार्नेस को यह सूचना दी जा सके कि उसे शेयर नहीं किया जाना चाहिए.
एक सामान्य मॉड्यूल में, अपने मॉड्यूल को हार्नेस को शार्ड करने देना (डिफ़ॉल्ट व्यवहार) सही काम है. लेकिन कुछ मामलों में, हो सकता है कि आप उस व्यवहार को ओवरराइड करना चाहें:
- जब आपके मॉड्यूल का सेटअप महंगा हो, तो:
किसी मॉड्यूल को अलग-अलग हिस्सों में बांटने पर, तैयारी (APK इंस्टॉल करना, फ़ाइल पुश करना वगैरह) की प्रोसेस, शायद हर डिवाइस के लिए एक बार चलाई जाए. अगर आपके मॉड्यूल का सेटअप लंबा और महंगा है और टेस्ट के रनटाइम की तुलना में, उसे दोहराने की ज़रूरत नहीं है, तो आपको अपने मॉड्यूल को 'शर्ड नहीं किया जा सकता' के तौर पर टैग करना चाहिए.
- जब आपके मॉड्यूल में टेस्ट की संख्या कम हो, तो:
किसी मॉड्यूल को अलग-अलग हिस्सों में बांटने पर, हो सकता है कि सभी टेस्ट केस अलग-अलग डिवाइसों पर अलग-अलग तरीके से काम करें. यह पहले पॉइंट से जुड़ा है; अगर जांच की संख्या कम है, तो हो सकता है कि कुछ शर्ड में एक ही जांच हो या कोई जांच न हो. इससे, तैयारी के किसी भी चरण को पूरा करना काफ़ी महंगा हो जाएगा. उदाहरण के लिए, आम तौर पर किसी एक टेस्ट केस के लिए APK इंस्टॉल करना फ़ायदेमंद नहीं होता.
इंस्ट्रुमेंटेशन टेस्ट: ज़्यादा से ज़्यादा शार्ड हैं?
AndroidJUnitTest के ज़रिए चलने वाली इंस्ट्रूमेंटेशन टेस्ट, हार्नेस को यह नहीं बताती कि इंस्ट्रूमेंटेशन में कितनी जांच शामिल हैं. ऐसा तब तक होता है, जब तक हम APK को इंस्टॉल और चला नहीं लेते. ये ऑपरेशन बहुत महंगे होते हैं. और सुइट के सभी मॉड्यूल के लिए, शार्डिंग समय पर इन्हें पूरा नहीं किया जा सकता.
हो सकता है कि हार्नेस, इंस्ट्रूमेंटेशन टेस्ट को ज़्यादा शर्ड में बांट दे और कुछ शर्ड खाली रह जाएं. अगर इंस्ट्रूमेंटेशन टेस्ट को छह शर्ड में बांटा जाता है और उसमें पांच टेस्ट होते हैं, तो पांच शर्ड में एक टेस्ट और एक शर्ड में कोई टेस्ट नहीं होगा. इनमें से हर स्hard के लिए, APK इंस्टॉल करने की ज़रूरत होगी.
इसलिए, जब इंस्ट्रूमेंटेशन टेस्ट APK में टेस्ट की संख्या कम होती है, तो मॉड्यूल को <option name="not-shardable" value="true" />
के साथ टैग करने से, हार्नेस को यह पता चलता है कि उस मॉड्यूल को शर्ड करने की ज़रूरत नहीं है.
AndroidJUnitTest
रनर में एक खास विकल्प होता है, जिसकी मदद से यह तय किया जा सकता है कि डेटा को कितने शर्ड में बांटा जाए:<option name="ajur-max-shard" value="5" />
.
इससे, यह तय किया जा सकता है कि इंस्ट्रूमेंटेशन को ज़्यादा से ज़्यादा कितनी बार टारगेट किया जा सकता है. भले ही, इंवोकेशन लेवल पर कितने शर्ड का अनुरोध किया गया हो. डिफ़ॉल्ट रूप से, इंस्ट्रूमेंटेशन को उन शर्ड में बांटा जाएगा जिनका अनुरोध, कॉल करने के लिए किया गया है.
उदाहरण के लिए, अगर आपके इंस्ट्रूमेंटेशन टेस्ट APK में सिर्फ़ दो टेस्ट केस हैं, लेकिन आपको अब भी इसे शेयर करना है, तो ajur-max-shard
की वैल्यू 2
होने पर यह पक्का किया जा सकता है कि आप खाली शर्ड नहीं बना रहे हैं.