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