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

इस गाइड में, 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 प्रोजेक्ट में पहले से ही मौजूद है.

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

  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 फ़ाइल में, 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>
    ...
    
  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 CaptureProcessor का इस्तेमाल करके प्रोसेस किया जाता है. ध्यान दें कि अगर कोई प्रोसेसर रजिस्टर नहीं किया गया है, तो BasicScreenCaptureProcessor का इस्तेमाल किया जाता है. आपने FirebaseScreenCaptureProcessor रजिस्टर किया है, इसलिए आपके स्क्रीनशॉट को FirebaseScreenCaptureProcessor के ज़रिए प्रोसेस किया जाएगा. साथ ही, Firebase Test Lab के साथ टेस्ट चलाने पर, ये नतीजों के साथ आपके लिए उपलब्ध होंगे.

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

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

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

चरण 3. अपना टेस्ट बनाना और चलाना

  1. अपना ऐप्लिकेशन बनाएं और APKs की जांच करें. निर्देशों के लिए, अपने ऐप्लिकेशन की जांच करें देखें.

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

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

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

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

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

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

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

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

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

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

Test Lab के लिए Orchestrator को चालू करने के लिए, इंस्ट्रुमेंटेशन टेस्ट सेटअप में जाएं. इसके बाद,अन्य विकल्प > Run with Orchestrator पर क्लिक करें.

Orchestrator का इस्तेमाल करने पर, आपको ये फ़ायदे मिलते हैं:

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

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

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

--environment-variables clearPackageData=true

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

टेस्ट को अलग-अलग ग्रुप (शर्ड) में बांटने की सुविधा, टेस्ट के सेट को अलग-अलग ग्रुप (शर्ड) में बांटती है. ये ग्रुप अलग-अलग तरीके से काम करते हैं. Test Lab, कई डिवाइसों का इस्तेमाल करके हर शर्ड को एक साथ अपने-आप चलाता है. साथ ही, कम समय में टेस्ट का पूरा सेट पूरा करता है.

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

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

  1. इंस्ट्रूमेंटेशन टेस्ट सेटअप में,अतिरिक्त विकल्प पर क्लिक करें.

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

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

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

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