इस गाइड में, Firebase Test Lab का इस्तेमाल करके इंस्ट्रुमेंटेशन टेस्ट को तैयार करने और उसे चलाने का तरीका बताया गया है. इस गाइड का इस्तेमाल करने के लिए, आपको एक इंस्ट्रुमेंटेशन टेस्ट की ज़रूरत होगी. इसे आपने या आपकी टीम ने लिखा हो. साथ ही, इसमें Espresso या UI Automator Android टेस्ट फ़्रेमवर्क का इस्तेमाल किया गया हो. इंस्ट्रुमेंटेशन टेस्ट, फ़िज़िकल डिवाइसों पर 45 मिनट और वर्चुअल डिवाइसों पर 60 मिनट तक चल सकते हैं.
इसके बाद, आपको अपने ऐप्लिकेशन का APK और टेस्ट का APK, Firebase पर अपलोड करना होगा.
(ज़रूरी नहीं) अपने ऐप्लिकेशन में स्क्रीनशॉट लाइब्रेरी जोड़ना
Firebase Test Lab में एक लाइब्रेरी (testlab-instr-lib) शामिल है. इसका इस्तेमाल, AndroidX के ScreenCapture की मदद से लिए गए किसी भी स्क्रीनशॉट को प्रोसेस करने के लिए किया जा सकता है. ऐसा तब किया जा सकता है, जब इंस्ट्रुमेंटेशन टेस्ट चलाए जा रहे हों. जैसे, Espresso टेस्ट फ़्रेमवर्क का इस्तेमाल करके लिखे गए टेस्ट.
इस सेक्शन में, AndroidX लाइब्रेरी की मदद से ScreenCapture ऑब्जेक्ट बनाने का तरीका बताया गया है. साथ ही, testlab-instr-lib का इस्तेमाल करके उन्हें प्रोसेस करने का तरीका भी बताया गया है.
इंस्ट्रुमेंटेशन टेस्ट पूरा होने के बाद, कैप्चर किए गए स्क्रीनशॉट Firebase कंसोल में देखे जा सकते हैं.
सैंपल के तौर पर मिला ऐप्लिकेशन आज़माना
इस सुविधा को आज़माने के लिए, NotePad सैंपल ऐप्लिकेशन डाउनलोड करें. स्क्रीनशॉट लेने की सुविधा, NotePad प्रोजेक्ट में पहले से ही शामिल है.
पहला चरण. अपने प्रोजेक्ट में स्क्रीनशॉट लाइब्रेरी जोड़ना
अपने टेस्ट प्रोजेक्ट की रूट-लेवल सेटिंग वाली Gradle फ़ाइल (
settings.gradle.ktsयाsettings.gradle) में, हरrepositoriesसेक्शन में Google की Maven रिपॉज़िटरी जोड़ें:pluginManagement { repositories { // Add the following line: google() // Google's Maven repository mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { // Add the following line: google() // Google's Maven repository mavenCentral() } } // ...
अपनी मॉड्यूल (ऐप्लिकेशन-लेवल) Gradle फ़ाइल (आम तौर पर,
<project>/<app-module>/build.gradle.ktsया<project>/<app-module>/build.gradle) में, Test Lab स्क्रीनशॉट लाइब्रेरी के लिए डिपेंडेंसी जोड़ें.dependencies { // ... // Add Test Lab's instrumentation test screenshot library: androidTestImplementation("com.google.firebase:testlab-instr-lib:0.2") // ...
अपने टेस्ट की
AndroidManifest.xmlफ़ाइल में,FirebaseScreenCaptureProcessorको<instrumentation>एलिमेंट के अंदर मेटा-डेटा टैग में रजिस्टर करें. इसके अलावा, AndroidJUnitRunner में प्रोसेसर को आर्ग्युमेंट के तौर पर भी तय किया जा सकता है. ऐसा करने का तरीका जानने के लिए, AndroidJUnitRunner का रेफ़रंस दस्तावेज़ देखें.<instrumentation // Check that you have the following line (if not, add it): android:name="androidx.test.runner.AndroidJUnitRunner" // Specifies AndroidJUnitRunner as the test runner android:targetPackage="com.your.package.name"> // Add the following: <meta-data android:name="screenCaptureProcessors" android:value="com.google.firebase.testlab.screenshot.FirebaseScreenCaptureProcessor" /> </instrumentation> ...अपने ऐप्लिकेशन की
AndroidManifest.xmlफ़ाइल में,<manifest>एलिमेंट में ये लाइनें जोड़ें:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>अपनी
AndroidManifest.xmlफ़ाइल में,<manifest>टैग में ये लाइनें जोड़कर, अपने ऐप्लिकेशन के लिए सिस्टम अनुमतियां तय करें. अगर Android 10 (एपीआई लेवल 29) या इसके बाद के वर्शन पर टेस्ट किया जा रहा है, तोWRITE_EXTERNAL_STORAGEअनुमति को हटा दें. आपके ऐप्लिकेशन को डिवाइस पर स्क्रीनशॉट पढ़ने और लिखने के लिए, इस अनुमति की ज़रूरत नहीं होती.<manifest ... > <!-- WRITE_EXTERNAL_STORAGE is not needed on Android 10 (API level 29) or higher. --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.INTERNET"/> ... </manifest>
दूसरा चरण. टेस्ट के दौरान स्क्रीनशॉट लेना
टेस्ट के दौरान किसी भी समय स्क्रीनशॉट लेने के लिए, AndroidX लाइब्रेरी से Screenshot.capture() तरीके को कॉल करें. इससे एक ScreenCapture ऑब्जेक्ट बनता है.
ScreenCapture ऑब्जेक्ट पर process() को कॉल करने पर, इसे ScreenCaptureProcessor का इस्तेमाल करके प्रोसेस किया जाता है. यह आपके AndroidManifest.xml में रजिस्टर होता है. ध्यान दें कि अगर कोई प्रोसेसर रजिस्टर नहीं किया गया है, तो BasicScreenCaptureProcessor का इस्तेमाल किया जाता है.
आपने FirebaseScreenCaptureProcessor को रजिस्टर किया है. इसलिए, आपके स्क्रीनशॉट FirebaseScreenCaptureProcessor की मदद से प्रोसेस किए जाएंगे. साथ ही, Firebase Test Lab की मदद से टेस्ट चलाने पर, ये स्क्रीनशॉट आपके नतीजों के साथ उपलब्ध होंगे.
ScreenCapture बनाने के लिए, इस्तेमाल के उदाहरण:
एपीआई Build.VERSION_CODES.JELLY_BEAN_MR2 और इसके बाद के वर्शन पर, फ़ुल स्क्रीन कैप्चर करने के लिए:
Screenshot.capture()किसी भी एपीआई लेवल पर, गतिविधि का
ScreenCaptureलें. ध्यान दें कि Build.VERSION_CODES.JELLY_BEAN_MR2 से पहले के वर्शन वाले डिवाइसों के लिए, सिर्फ़ यही विकल्प उपलब्ध है.@Rule public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class); ... Screenshot.capture(activityRule.getActivity()); ...
स्क्रीन कैप्चर को प्रोसेस करने के उदाहरण
FirebaseScreenCaptureProcessorसेScreenCaptureको प्रोसेस करें:Screenshot.capture().process();किसी खास
ScreenCaptureProcessorके ज़रिएScreenCaptureको प्रोसेस करना (इससे आपको प्रोसेसर को रजिस्टर करने की ज़रूरत नहीं पड़ती):Set<ScreenCaptureProcessor> processors = new HashSet<>(); processors.add(new FirebaseScreenCaptureProcessor()); Screenshot.capture().process(processors);ScreenCaptureका नाम और फ़ॉर्मैट सेट करें. इसके बाद, रजिस्टर किए गए प्रोसेसर का इस्तेमाल करके इसे प्रोसेस करें:Screenshot.capture().setName("myscreenshot").setFormat(CompressFormat.JPEG).process();
चरण 3. टेस्ट बनाना और चलाना
अपना ऐप्लिकेशन बनाएं और APKs की जांच करें. निर्देश पाने के लिए, अपने ऐप्लिकेशन की जांच करना लेख पढ़ें.
Firebase कंसोल में, DevOps और यूज़र ऐक्टिविटी > Test Lab पर जाएं. इसके बाद, APK फ़ाइलें अपलोड करें.
आखिर में, टेस्ट चलाएं.
चौथा चरण. टेस्ट के स्क्रीनशॉट देखना
टेस्ट पूरा होने के बाद, लिए गए स्क्रीनशॉट देखे जा सकते हैं:
Firebase कंसोल में, DevOps और यूज़र ऐक्टिविटी > Test Lab पर जाएं.
टेस्ट टैब में, पूरा हो चुका टेस्ट चुनें. इसके बाद, नतीजे टैब पर क्लिक करें.
अपना टेस्ट फिर से चुनें. इसके बाद, दिखने वाले स्क्रीनशॉट टैब पर क्लिक करें.
(ज़रूरी नहीं) जांच करने की अतिरिक्त सुविधाएं चालू करना
Test Lab के साथ टेस्ट चलाने से पहले, उसमें ये सुविधाएं चालू की जा सकती हैं:
Orchestrator को चालू करें
Android का जांच करने वाला टूल एक ऐसा टूल है जो आपके ऐप्लिकेशन के हर इंस्ट्रुमेंटेशन टेस्ट को अलग-अलग चलाता है. Test Lab हमेशा Orchestrator के नए वर्शन का इस्तेमाल करता है.
Test Lab के लिए Orchestrator को चालू करने के लिए, इंस्ट्रुमेंटेशन टेस्ट सेटअप में जाकर,ज़्यादा विकल्प > Orchestrator के साथ चलाएं पर क्लिक करें.
Orchestrator का इस्तेमाल करने पर, आपको ये फ़ायदे मिलते हैं:
- कोई शेयर की गई स्थिति नहीं है. हर टेस्ट अपने इंस्ट्रुमेंटेशन इंस्टेंस में चलता है. इसलिए, शेयर की गई स्थिति सभी टेस्ट में इकट्ठा नहीं होती.
- कुछ ही डिवाइसों पर क्रैश होना. अगर कोई टेस्ट क्रैश हो जाता है, तो सिर्फ़ वह इंस्ट्रुमेंटेशन बंद हो जाता है. हालांकि, आपके सुइट में मौजूद अन्य टेस्ट अब भी चल सकते हैं.
ध्यान रखें कि Orchestrator का इस्तेमाल करने पर, हर टेस्ट अपना इंस्ट्रुमेंटेशन इंस्टेंस चलाता है. इसका मतलब है कि हर टेस्ट केस के बाद, ऐप्लिकेशन की प्रोसेस रीस्टार्ट हो जाती है. रन टाइम बढ़ने से, आपके कोटा के इस्तेमाल या बिल किए गए समय पर असर पड़ सकता है. साथ ही, ऐसा हो सकता है कि आपके डिवाइसों की टाइम आउट की सीमाएं पार हो जाएं. अगर ऐप्लिकेशन के स्टार्टअप टाइम को कम किया जाता है, तो इस ओवरहेड को कम किया जा सकता है.
Orchestrator के लिए अतिरिक्त विकल्प सेट करने के लिए, उन्हें environmentVariables फ़ील्ड में जाकर तय करें. उदाहरण के लिए, clearPackageData का इस्तेमाल करने के लिए, gcloud में इस विकल्प का इस्तेमाल करें:
--environment-variables clearPackageData=true
शार्डिंग की सुविधा चालू करना
टेस्ट शार्डिंग, टेस्ट के सेट को सब-ग्रुप (शार्ड) में बांटती है. ये सब-ग्रुप, अलग-अलग चलते हैं. Test Lab, कई डिवाइसों का इस्तेमाल करके हर शार्ड को अपने-आप एक साथ चलाता है. साथ ही, टेस्ट के पूरे सेट को कम समय में पूरा करता है.
उदाहरण के लिए, अगर आपने N शार्ड बनाए हैं, तो आपके चुने गए हर डिवाइस के लिए, Test Lab एक जैसे N डिवाइसों को स्पिन अप करता है. साथ ही, हर डिवाइस पर टेस्ट का सबसेट चलाता है. इसका मतलब है कि अलग-अलग हिस्सों में बांटे गए टेस्ट केस की वजह से, हर डिवाइस पर कई बार जांच की जा सकती है. हालांकि, नॉन-शार्डेड टेस्ट केस के लिए, हर डिवाइस पर एक बार जांच की जाती है. Test Lab के कॉन्सेप्ट के बारे में जानने के लिए, मुख्य कॉन्सेप्ट देखें.
Firebase कंसोल में टेस्ट शार्डिंग की सुविधा चालू करने के लिए, यह तरीका अपनाएं:
इंस्ट्रुमेंटेशन टेस्ट सेटअप में,अन्य विकल्प पर क्लिक करें.
शार्डिंग सेक्शन में, उन शार्ड की संख्या डालें जिन्हें आपको चलाना है.
टेस्ट शार्ड की बिलिंग
Test Lab, AndroidJUnitRunner के पहले से मौजूद शार्डिंग मैकेनिज़्म का इस्तेमाल करके, आपके शार्ड लागू करता है. खाली शार्ड (ऐसे शार्ड जिन्हें कोई टेस्ट केस असाइन नहीं किया गया है) को स्पिन करने के लिए शुल्क देने से बचने के लिए, आपको जितने शार्ड बनाने हैं उनकी संख्या, टेस्ट केस की कुल संख्या से कम होनी चाहिए. हर टेस्ट केस को चलाने में लगने वाले समय के हिसाब से, हर शार्ड को दो से दस टेस्ट केस असाइन करना आम तौर पर सही रहता है.
बिलिंग के बारे में ज़्यादा जानकारी के लिए, इस्तेमाल, कोटा, और बिलिंग लेख पढ़ें.