स्केलेबल स्वचालित परीक्षण में नया क्या है


एंड्रॉइड स्टूडियो इंजीनियरिंग मैनेजर आरिफ सुकोको द्वारा पोस्ट किया गया (गूगआरिफ) और जोलांडा वेरहॉफ, डेवलपर संबंध इंजीनियर (लोजांडा)

एक ही स्क्रीन दिखाने वाले तीन अलग-अलग उपकरणों के साथ गहरे नीले रंग की पृष्ठभूमि: फोन, टैबलेट और घड़ी

हम जानते हैं कि बड़े पैमाने पर एंड्रॉइड इंस्ट्रूमेंटल टेस्ट चलाना चुनौतीपूर्ण हो सकता है, खासकर जब आपके पास एक बड़ा टेस्ट सूट हो जिसे आप विभिन्न एंड्रॉइड डिवाइस प्रोफाइल के खिलाफ चलाना चाहते हैं।

आई / ओ 2021 . पर हमने पहली बार पेश किया एकीकृत परीक्षण मंच या यूटीपी। यूटीपी हमें एंड्रॉइड इंस्ट्रुमेंटल टेस्ट के लिए परीक्षण सुविधाएं बनाने की अनुमति देता है, जैसे एंड्रॉइड स्टूडियो से ग्रैडल और ग्रैडल मैनेज्ड डिवाइसेस (जीएमडी) के माध्यम से इंस्ट्रुमेंटल टेस्ट चलाना। GMD आपको आभासी उपकरणों के एक सेट को परिभाषित करने की अनुमति देता है build.gradle, और प्रत्येक वाद्य परीक्षण के चलने से पहले और फिर इसे तोड़कर ग्रेडेल को इसे घुमाकर प्रबंधित करने दें। के नवीनतम संस्करण में एंड्रॉइड ग्रैडल प्लगइन 7.2.0, हम समानांतर में कई एंड्रॉइड वर्चुअल डिवाइस पर स्केल टेस्टिंग में मदद करने के लिए जीएमडी के शीर्ष पर और अधिक सुविधाएं पेश कर रहे हैं।

शेयरिंग

पहली विशेषता जो हम पेश कर रहे हैं, वह GMD के शीर्ष पर शार्डिंग है। शेयरिंग टेस्ट रनर में उपयोग की जाने वाली एक सामान्य तकनीक है जहां टेस्ट रनर टेस्ट को कई समूहों या शार्क में विभाजित करता है और इसे समानांतर में चलाता है। GMD में कई एमुलेटर पैटर्न को स्पिन करने की क्षमता होने के साथ, GMD को बड़े टेस्ट सूट के लिए अधिक स्केलेबल समाधान बनाने के लिए शार्पिंग एक स्पष्ट कदम है।

जब आप GMD के लिए शार्डिंग सक्षम करते हैं और वांछित संख्या में शार्क निर्दिष्ट करते हैं, तो यह स्वचालित रूप से आपके लिए संचालित उपकरणों की संख्या को स्पिन कर देगा। उदाहरण के लिए, निम्न टेम्पलेट ग्रेडेल प्रबंधित उपकरणों को कॉन्फ़िगर करता है जिन्हें कहा जाता है pixel2 तुम्हारे में build.gradle:

android {
  testOptions {
    devices {
      pixel2 (com.android.build.api.dsl.ManagedVirtualDevice) {
        device = "Pixel 2"
        apiLevel = 30
        systemImageSource = "google"
        abi = "x86"
      }
    }
  }
}

मान लीजिए कि आपके परीक्षण सूट में 4 यंत्रीकृत परीक्षण हैं। आप अपने परीक्षणों को विभाजित करने के लिए कितने शार्क को निर्दिष्ट करने के लिए प्रायोगिक गुणों को ग्रेडल में पास कर सकते हैं। निम्न आदेश परीक्षण को दो भागों में विभाजित करता है:

कक्षा com.example.myapplicationExampleInstrumentedTests
 ./gradlew -Pandroid.experimental.androidTest.numManagedDeviceShards=2 pixel2DebugAndroidTest

ग्रैडल को इस तरह से कॉल करना GMD को 2 बार स्पिन करने के लिए कहेगा pixel2, और अपने 4 वाद्य परीक्षणों के चलने को उन 2 एमुलेटेड डिवाइसों के बीच विभाजित करें। ग्रेडेल आउटपुट में, आप देखेंगे"Starting 2 tests on pixel2_0", और "Starting 2 tests on pixel2_1".

जैसा कि इस उदाहरण में देखा गया है, GMD द्वारा शार्डिंग कई समान आभासी उपकरणों को स्पिन करती है। यदि आप छायांकन लागू करते हैं और आपके पास एक से अधिक उपकरण परिभाषित हैं build.gradle, GMD प्रत्येक वर्चुअल डिवाइस के कई उदाहरणों को स्पिन करेगा।

आपकी टेस्ट रन रिपोर्ट का HTML प्रारूप आउटपुट जेनरेट किया जाएगा app/build/reports/androidTests/managedDevice/pixel2. इस रिपोर्ट में सभी शार्क के संयुक्त परीक्षा परिणाम होंगे।

आप एंड्रॉइड स्टूडियो में प्रत्येक शार्ड से परीक्षण के परिणाम भी चुन सकते हैं और लोड कर सकते हैं चलाएँ> फ़ाइल से परीक्षण आयात करें मेनू से प्रोटोबफ़ आउटपुट फ़ाइलें लोड हो रही हैं app/build/outputs/androidTest-results/managedDevice/pixel2/shard_1/test-result.pb और app/build/outputs/androidTest-results/managedDevice/pixel2/shard_2/test-result.pb.

यह याद रखने योग्य है कि जब आपके परीक्षण साझा किए जाते हैं, तो अतिरिक्त एमुलेटर पैटर्न को स्पिन करने के लिए आवश्यक अतिरिक्त संसाधनों और समय और परीक्षण चलाने के दौरान बचाए गए समय के बीच हमेशा एक ट्रेडऑफ़ होता है। जैसे, यह तब अधिक उपयोगी होता है जब आपके पास चलाने के लिए बड़े परीक्षण सूट हों।

कृपया यह भी ध्यान दें कि GMD वर्तमान में केवल-परीक्षण मॉड्यूल के लिए चल रहे परीक्षणों का समर्थन नहीं करता है, और क्लाउड-होस्टेड CI सर्वर पर चलते समय अस्थिरता के मुद्दों को जाना जाता है।

स्लिमर एमुलेटर सिस्टम इमेज

एक साथ कई एमुलेटर इंस्टेंस चलाते समय, आपके सीमित सर्वर के कंप्यूटिंग संसाधन एक समस्या बन सकते हैं।

इसे सुधारने का एक तरीका यह है कि एंड्रॉइड एमुलेटर सिस्टम की छवि को कम करके और स्वचालित परीक्षण चलाने के लिए इसे अनुकूलित करके एक नए प्रकार का उपकरण बनाया जाए। ऑटोमेटेड टेस्ट डिवाइस (एटीडी) सिस्टम इमेज को ऐसे घटकों को हटाकर कम सीपीयू और मेमोरी का उपभोग करने के लिए डिज़ाइन किया गया है जो आमतौर पर आपके ऐप के इंस्ट्रुमेंटल टेस्ट को प्रभावित नहीं करते हैं, जैसे कि सिस्टमयूआई, सेटिंग्स ऐप, जीमेल, गूगल मैप्स आदि जैसे बंडल ऐप। ., और कुछ अन्य सामग्री। कृपया पढ़ें नोट्स प्रकाशित करें एटीडी सिस्टम छवि के बारे में अधिक जानकारी के लिए।

हार्डवेयर प्रतिपादन एटीडी सिस्टम छवियों में डिफ़ॉल्ट रूप से अक्षम है। यह धीमी गति से चलने वाले परीक्षण सूट के अन्य सामान्य स्रोतों में मदद करता है। अक्सर, एमुलेटर पर इंस्ट्रुमेंटल टेस्ट चलाते समय, ग्राफिक्स हार्डवेयर एक्सेलेरेशन के लिए होस्ट के GPU तक पहुंच उपलब्ध नहीं होती है। इस मामले में, एम्यूलेटर उपयोग करना चुनेगा सॉफ्टवेयर ग्राफिक्स त्वरक, जो अधिक CPU गहन है। स्क्रीनशॉट के उल्लेखनीय अपवाद के साथ, हार्डवेयर रेंडरिंग के साथ लगभग सभी कार्यक्षमता अभी भी अपेक्षा के अनुरूप काम करती है। यदि आपको अपने परीक्षण में स्क्रीनशॉट लेने की आवश्यकता है, तो हम नए AndroidX टेस्ट स्क्रीनशॉट API को देखने की सलाह देते हैं जो स्क्रीनशॉट लेने के लिए हार्डवेयर रेंडरिंग को गतिशील रूप से सक्षम करेगा। कृपया देख लीजिये उदाहरण इस एपीआई का उपयोग कैसे करें।

एटीडी का उपयोग करने के लिए, पहले सुनिश्चित करें कि आपने कैनरी चैनल (संस्करण 30.9.2 या नया) से एंड्रॉइड एमुलेटर का नवीनतम संस्करण डाउनलोड किया है। इस एमुलेटर को डाउनलोड करने के लिए, यहां जाएं प्रकटन और व्यवहार> सिस्टम सेटिंग्स> अपडेट और आईडीई अपडेट ड्रॉपडाउन को “कैनरी चैनल” पर सेट करें।

इसके बाद, आपको अपने GMD कॉन्फ़िगरेशन में ATD सिस्टम छवि निर्दिष्ट करने की आवश्यकता है:

android {
  testOptions {
    devices {
      pixel2 (com.android.build.api.dsl.ManagedVirtualDevice) {
        device = "Pixel 2"
        apiLevel = 30
        systemImageSource = "aosp-atd" // Or "google-atd" if you need
                                       // access to Google APIs
        abi = "x86" // Or "arm64-v8a" if you are on an Apple M1 machine
      }
    }
  }
}

GMD के साथ अब आप पहले की तरह उसी ग्रेडिएंट कमांड लाइन से परीक्षण चला सकते हैं, जिसमें शार्डिंग सक्षम है। केवल एक चीज जो आपको जोड़ने की जरूरत है वह है ग्रेडेल को बताना कि आप कैनरी चैनल में सिस्टम छवि का जिक्र कर रहे हैं।

./gradlew -Pandroid.sdk.channel=3
-Pandroid.experimental.androidTest.numManagedDeviceShards=2
pixel2DebugAndroidTest

आपके मशीन कॉन्फ़िगरेशन के आधार पर, एटीडी का उपयोग करके परीक्षण चलने का समय सुधार भिन्न हो सकता है। हमारे परीक्षणों में, इंटेल ज़ीऑन सीपीयू और 64 जीबी रैम के साथ लिनक्स मशीनों पर चलने वाली एटीडी और गैर-एटीडी सिस्टम छवियों की तुलना करते हुए, हमने एटीडी का उपयोग करते समय 33% कम परीक्षण चलने का समय देखा, जबकि 2020 मैकबुक प्रो इंटेल आई 9 प्रोसेसर और 32 जीबी रैम के साथ। हमने 55% सुधार देखा है।

हम इन नई सुविधाओं के बारे में वास्तव में उत्साहित हैं, और हमें आशा है कि वे आपको अपने वाद्य परीक्षणों को बेहतर ढंग से मापने की अनुमति देंगे। कृपया उन्हें एक कोशिश दें मुझे बताओ कि आप क्या सोचते हो! हमें फॉलो करें – एंड्रॉइड स्टूडियो डेवलपमेंट टीम – जारी ट्विटर और मध्यम.

Dev

Leave a Reply

Your email address will not be published.