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

इस गाइड में, 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 ऑब्जेक्ट बनता है. ScreenCapture ऑब्जेक्ट पर process() को कॉल करने पर, उसे AndroidManifest.xml में रजिस्टर किए गए ScreenCaptureProcessor का इस्तेमाल करके प्रोसेस किया जाता है. ध्यान दें कि अगर कोई प्रोसेसर रजिस्टर नहीं किया गया है, तो 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());
    ...
    

स्क्रीनशॉट प्रोसेस करने के उदाहरण

  • 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 को चालू करने के लिए, इंस्ट्रुमेंटेशन टेस्ट के सेटअप में,अतिरिक्त विकल्प > Orchestrator के साथ चलाएं पर क्लिक करें.

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

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

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

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

--environment-variables clearPackageData=true

sharding की सुविधा चालू करना

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

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

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

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

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

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

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

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