इंस्ट्रुमेंटेशन टेस्ट करना शुरू करें

इस गाइड में Firebase टेस्ट लैब का इस्तेमाल करके इंस्ट्रुमेंटेशन टेस्ट तैयार करने और उसे चलाने का तरीका बताया गया है. इस गाइड का इस्तेमाल करने के लिए, आपको एक इंस्ट्रुमेंटेशन टेस्ट (आपने या आपकी टीम ने लिखा है) की ज़रूरत होगी, जिसमें Espresso या यूआई ऑटोमेशन Android टेस्ट फ़्रेमवर्क का इस्तेमाल किया जाता हो. इंस्ट्रुमेंटेशन टेस्ट, फ़िज़िकल डिवाइसों पर 45 मिनट तक और वर्चुअल डिवाइसों पर 60 मिनट तक चल सकते हैं.

बाद के चरणों में, आप अपने ऐप्लिकेशन के APK और अपने परीक्षण के APK को Firebase पर अपलोड करेंगे.

(ज़रूरी नहीं) अपने ऐप्लिकेशन में स्क्रीनशॉट लाइब्रेरी जोड़ें

Firebase टेस्ट लैब में एक लाइब्रेरी (testlab-instr-lib) शामिल है जिसका इस्तेमाल करके AndroidX के Screen Capture से लिए गए किसी भी स्क्रीनशॉट को प्रोसेस किया जा सकता है. उदाहरण के लिए, Espresso टेस्ट फ़्रेमवर्क का इस्तेमाल करके लिखे गए टेस्ट. इस सेक्शन में बताया गया है कि AndroidX लाइब्रेरी की मदद से ScreenCapture ऑब्जेक्ट कैसे बनाए जाते हैं. साथ ही, testlab-instr-lib का इस्तेमाल करके उन्हें प्रोसेस करने का तरीका भी बताया गया है.

इंस्ट्रुमेंटेशन टेस्ट पूरा होने के बाद, कैप्चर किए गए स्क्रीनशॉट Firebase कंसोल में देखे जा सकते हैं.

ऐप्लिकेशन का नमूना आज़माएं

इस सुविधा को आज़माने के लिए, Notepad सैंपल ऐप्लिकेशन को डाउनलोड करें. स्क्रीनशॉट लेने की सुविधा Notepad प्रोजेक्ट में पहले से ही मौजूद है.

पहला चरण. अपने प्रोजेक्ट में स्क्रीनशॉट लाइब्रेरी जोड़ें

  1. अपने टेस्ट प्रोजेक्ट की रूट-लेवल सेटिंग 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()
        }
    }
    // ...
    
  2. अपने मॉड्यूल (ऐप्लिकेशन-लेवल) की 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")
      // ...
    
  3. अपनी जांच की AndroidManifest.xml फ़ाइल में, <instrumentation> एलिमेंट में मौजूद मेटा-डेटा टैग में FirebaseScreenCaptureProcessor को रजिस्टर करें. इसके बजाय, 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>
    ...
    
  4. अपने ऐप्लिकेशन की AndroidManifest.xml फ़ाइल में, <manifest> एलिमेंट में ये लाइनें जोड़ें:

     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    
  5. अपनी 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 ऑब्जेक्ट जनरेट होता है. जब process() को ScreenCapture ऑब्जेक्ट पर कॉल किया जाता है, तो वह आपके AndroidManifest.xml में रजिस्टर किए गए Screen वेबपेजप्रोसेसर की मदद से प्रोसेस हो जाता है. ध्यान दें कि अगर कोई प्रोसेसर रजिस्टर नहीं है, तो BasicScreenCaptureProcessor का इस्तेमाल किया जाता है. आपने FirebaseScreenCaptureProcessor रजिस्टर किया है. इसलिए, आपके स्क्रीनशॉट FirebaseScreenCaptureProcessor की मदद से प्रोसेस किए जाएंगे. Firebase टेस्ट लैब से टेस्ट चलाने पर, ये स्क्रीनशॉट आपके नतीजों के साथ उपलब्ध होंगे.

ScreenCapture बनाने के लिए, इस्तेमाल के उदाहरण:

  • एपीआई बिल्ड पर फ़ुल स्क्रीनकैप्चर करें.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());
    ...
    

Screenकैप्चर को प्रोसेस करने के लिए, इस्तेमाल के उदाहरण

  • 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();
    

तीसरा चरण. टेस्ट बनाएं और चलाएं

  1. अपना ऐप्लिकेशन बनाएं और APK टेस्ट करें (निर्देशों के लिए अपने ऐप्लिकेशन की जांच करना देखें).

  2. APK फ़ाइलों को Firebase कंसोल के टेस्ट लैब डैशबोर्ड पर अपलोड करें.

  3. आखिर में, अपना टेस्ट चलाएं.

चौथा चरण. टेस्ट के स्क्रीनशॉट देखना

जांच पूरी होने के बाद, Firebase कंसोल में लिए गए स्क्रीनशॉट देखे जा सकते हैं.

  1. टेस्ट टैब में, पूरा टेस्ट चुनें और फिर नतीजे टैब पर क्लिक करें.

  2. जांच को फिर से चुनें. इसके बाद, दिखने वाले स्क्रीनशॉट टैब पर क्लिक करें.

(ज़रूरी नहीं) टेस्ट की अन्य सुविधाएं चालू करना

टेस्ट लैब के साथ टेस्ट करने से पहले, उसमें इन सुविधाओं को चालू किया जा सकता है:

ऑर्केस्ट्रेटर चालू करें

Android Test Orchestrator ऐसा टूल है जो आपके ऐप्लिकेशन के हर इंस्ट्रुमेंटेशन टेस्ट को अलग-अलग चलाता है. Test Lab हमेशा ऑर्केस्ट्रेटर के सबसे नए वर्शन का इस्तेमाल करता है.

टेस्ट लैब के लिए ऑर्केस्ट्रेटर की सुविधा चालू करने के लिए, इंस्ट्रुमेंटेशन टेस्ट सेटअप में जाएं. इसके बाद,अन्य विकल्प > ऑरकेस्ट्रेटर के साथ चलाएं पर क्लिक करें.

ऑर्केस्ट्रेटर का इस्तेमाल करने पर आपको इन सुविधाओं से फ़ायदा मिलता है:

  • शेयर की गई कोई स्थिति नहीं है. हर टेस्ट अपने-अपने इंस्ट्रुमेंट इंस्टेंस में चलता है. इसलिए, टेस्ट में एक जैसी स्थिति को इकट्ठा नहीं किया जाता.
  • ऐप्लिकेशन के अलग-अलग बंद होने की जानकारी. अगर कोई टेस्ट क्रैश होता है, तो सिर्फ़ उस इंस्ट्रुमेंट को बंद किया जाता है. साथ ही, आपके सुइट में मौजूद अन्य टेस्ट अब भी चल सकते हैं.

ध्यान रखें कि जब आप ऑर्केस्ट्रेटर का इस्तेमाल करते हैं, तो हर टेस्ट अपना खुद का इंस्ट्रुमेंटेशन इंस्टेंस चलाता है. इसका मतलब है कि हर टेस्ट केस के बाद ऐप्लिकेशन प्रोसेस रीस्टार्ट हो जाती है. इस वजह से, आपके कोटे के इस्तेमाल या बिल किए जाने के समय पर असर पड़ सकता है. इस वजह से, डिवाइस का टाइम आउट सेट करना भी मुश्किल हो सकता है. अगर ऐप्लिकेशन के शुरू होने में लगने वाला समय कम किया जाता है, तो यह ओवरहेड कम हो जाएगा.

ऑर्केस्ट्रेटर के लिए अन्य विकल्प सेट करने के लिए, environmentVariables फ़ील्ड का इस्तेमाल करके उनकी जानकारी दें. उदाहरण के लिए, clearPackageData का इस्तेमाल करने के लिए, gcloud में इस विकल्प का इस्तेमाल करें:

--environment-variables clearPackageData=true

शेयर करने की सुविधा चालू करें

परीक्षण शार्डिंग, परीक्षणों के एक सेट को उप-समूह (शार्ड) में विभाजित करती है जो अलग-अलग अलग-अलग चलते हैं. परीक्षण लैब कई डिवाइस का उपयोग करके एक साथ हर शार्ड को अपने आप चलाता है और परीक्षणों का पूरा सेट कम समय में पूरा करता है.

उदाहरण के लिए, अगर आपने N शार्ड बनाए हैं, तो आपके चुने गए हर डिवाइस के लिए टेस्ट लैब, N मिलते-जुलते डिवाइसों को स्पिन करता है. साथ ही, हर डिवाइस पर टेस्ट का सबसेट चलाता है. इसका मतलब है कि शार्ड टेस्ट केस की वजह से, हर डिवाइस के लिए कई टेस्ट केस लागू हो सकते हैं. हालांकि, बिना शार्ड वाले टेस्ट केस से, हर डिवाइस के लिए एक टेस्ट टेस्ट किया जाता है. टेस्ट लैब के सिद्धांत सीखने के लिए, मुख्य सिद्धांत देखें.

Firebase कंसोल में टेस्ट शार्डिंग चालू करने के लिए, यह तरीका अपनाएं:

  1. इंस्ट्रुमेंट टेस्ट सेटअप में,अन्य विकल्प पर क्लिक करें.

  2. शार्डिंग सेक्शन में, उन शार्ड की संख्या डालें जिन्हें आपको चलाना है.

टेस्ट शार्ड के लिए बिलिंग

Test Lab, AndroidJUnitRunner के पहले से मौजूद शार्डिंग मैकेनिज़्म का इस्तेमाल करके आपके शार्ड लागू करता है. खाली शार्ड (जिन शार्ड को टेस्ट केस असाइन नहीं किए गए हैं) को स्पिनिंग से देने से बचने के लिए, आपके बनाए गए शार्ड की संख्या, टेस्ट केस की कुल संख्या से कम होनी चाहिए. हर टेस्ट केस को चलने में लगने वाले समय के हिसाब से, आम तौर पर हर शार्ड के लिए 2-10 टेस्ट केस असाइन करना बेहतर होता है.

बिलिंग के बारे में ज़्यादा जानकारी पाने के लिए, इस्तेमाल, कोटा, और बिलिंग लेख पढ़ें.