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