जब टेस्ट कॉर्पस बड़ा होता है या उसे पूरा करने में ज़्यादा समय लगता है, तो हम टेस्ट को कई डिवाइसों पर बांटने का विकल्प देते हैं: शर्डिंग.
शार्डिंग के लिए ज़रूरी शर्तें हैं का इस्तेमाल करके शार्डिंग का इस्तेमाल किया जा सकता है.
जांच करने वाले ज़्यादातर मुख्य रनर पहले से ही शार्डिंग का इस्तेमाल करते हैं. इसलिए, काम की ज़रूरत है. ये पहले से शार्डिंग का समर्थन करते हैं: इंस्ट्रुमेंटेशन परीक्षण, होस्ट-साइड ड्रिवन टेस्ट, GTest.
व्यापारी/कंपनी/कारोबारी, दो तरह से शार्डिंग का इस्तेमाल करने की सुविधा देते हैं: लोकल और डिस्ट्रिब्यूटेड. दोनों में कुछ समानताएं हैं. इसलिए, इस पेज पर सामान्य प्रॉपर्टी और हर चीज़ के बारे में जानकारी साफ़ तौर पर दी जाती है.
सामान्य प्रॉपर्टी
टेस्ट चलाने वाले लोगों के लिए, टास्क को अलग-अलग हिस्सों में बांटने के दोनों तरीकों में एक जैसी प्रॉपर्टी होती हैं: टास्क के हिस्सों को अलग-अलग और तय करना ज़रूरी है. दोनों तरह की sharding का पहला चरण, टेस्ट की पूरी सूची बनाना है. इसके बाद, उन्हें अलग-अलग ग्रुप/शर्ड में बांटना है.
शार्डिंग फ़ॉर्म में मुख्य अंतर, उनके परीक्षण करने के तरीके में है. ज़्यादा जानकारी के लिए, नीचे दिए गए सेक्शन देखें.
लोकल शर्डिंग
लोकल शार्डिंग का मतलब शार्ड किए गए को निष्पादित करने में शामिल सभी डिवाइस से है शुरू करने की सुविधा एक ही होस्ट से जुड़ी होती है.
प्लान लागू करना
लोकल शार्डिंग एक ही नेटवर्क से जुड़े सभी डिवाइसों का फ़ायदा लेती है उन टेस्ट का एक पूल बनाकर होस्ट करें, जिन्हें पूरा करना ज़रूरी है और हर टेस्ट बिना किसी शुल्क के उपलब्ध होने पर, डिवाइस पर पोलिंग टेस्ट करा सकता है (यानी पिछले टेस्ट का इस्तेमाल करके ऐसा किया जा सकता है). इससे डिवाइस का इस्तेमाल ऑप्टिमाइज़ होता है. हम इसे यह भी कहते हैं डाइनैमिक शार्डिंग.
विकल्प
--shard-count XX
डिस्ट्रिब्यूटेड शर्डिंग
डिस्ट्रिब्यूटेड शर्डिंग का मतलब है कि शर्ड किए गए इनवोकेशन को लागू करने में शामिल सभी डिवाइस, कहीं भी हो सकते हैं और अलग-अलग फ़िज़िकल होस्ट से कनेक्ट हो सकते हैं.
प्लान लागू करना
टेस्ट की सूची बनाने के बाद, डिस्ट्रिब्यूटेड शर्डिंग की जाती है. साथ ही, हर शर्ड का कॉन्टेंट सिर्फ़ उस शर्ड को लागू करता है जिसके लिए फ़िलहाल अनुरोध किया गया है. इसलिए, डिस्ट्रिब्यूट किए गए सभी शार्ड, सबसे पहले एक ही सूची बनाते हैं. इसके बाद, एक-दूसरे से अलग-अलग सबसेट को एक साथ चलाते हैं. इससे सभी टेस्ट एक साथ चल पाते हैं.
इस फ़ॉर्म की मुख्य विशेषता शार्ड हैं, जिन्हें हर स्थिति के बारे में पूरी जानकारी नहीं है और वे स्वतंत्र रूप से विफल हो सकते हैं.
इसकी मुख्य समस्या यह है कि शर्ड की लंबाई ज़रूरी नहीं है कि वह आसानी से संतुलित हो, क्योंकि हम हर शर्ड में हर टेस्ट के रनटाइम का अनुमान पहले से नहीं लगा सकते. डिस्ट्रिब्यूशन इसलिए किया जाता है, ताकि टेस्ट केस की संख्या करीब-करीब बराबर हो शामिल हैं.
विकल्प
--shard-count XX --shard-index XX
टोकन का बंटवारा
टोकन का बंटवारा सिर्फ़ लोकल sharding के साथ किया जा सकता है. यह फ़्लैग, 'नॉन-लोकल' शेर्डिंग के इस्तेमाल के उदाहरणों में काम नहीं करता. कभी-कभी कोई एक डिवाइस शेयर करने के दौरान कुछ ऐसे खास संसाधन होते हैं जो दूसरों के पास नहीं होते, जैसे कि सिम कार्ड. ऐसा हो सकता है कि कुछ जांच सिर्फ़ तब काम करें, जब आपके पास खास संसाधन उपलब्ध हो और अगर ऐसा नहीं होता है, तो वह असफल हो जाएगा.
टोकन का बंटवारा, इस तरह के इस्तेमाल के उदाहरणों के लिए हमारा समाधान है. टेस्ट मॉड्यूल ये काम कर सकते हैं
यह बताएं कि उन्हें अपने AndroidTest.xml
में किस खास संसाधन की ज़रूरत है, और
ट्रेड किया गया, जांचों को ऐसे डिवाइस पर रूट करता है जिसमें संसाधन मौजूद है.
एक्सएमएल कॉन्फ़िगरेशन
<option name="config-descriptor:metadata" key="token" value="SIM_CARD" />
टोकन का value
, Trefed के प्रॉडक्ट से मेल खाता है
TokenProperty
और यह
TokenProviderHelper
.
इससे मॉड्यूल को उन डिवाइसों पर चलाया जा सकता है जो सही तरीके से काम कर सकते हैं अलग-अलग तरीकों से टेस्ट किए जा सकते हैं.
अगर कोई भी डिवाइस जांच नहीं कर सकता, तो क्या होगा?
अगर किसी भी डिवाइस में टेस्ट मॉड्यूल से मैच करने वाला रिसॉर्स नहीं है, तो टेस्ट मॉड्यूल काम नहीं करता और उसे स्किप कर दिया जाता है, क्योंकि वह ठीक से लागू नहीं हो पाता.
उदाहरण के लिए, अगर कोई टेस्ट मॉड्यूल सिम कार्ड का इस्तेमाल करने का अनुरोध करता है, लेकिन किसी भी डिवाइस में सिम कार्ड नहीं है, तो टेस्ट मॉड्यूल काम नहीं करता.
लागू करना
इस सुविधा के फ़्लैग को Tradefed की मुख्य कमांड लाइन पर पास करें:
--enable-token-sharding