इंस्ट्रुमेंटेशन टेस्ट

सबसे पहले, developer.android.com पर जाकर अपने ऐप्लिकेशन की जांच करना लेख पढ़ें. ध्यान दें कि प्लैटफ़ॉर्म की टेस्टिंग में इंस्ट्रुमेंटेशन टेस्ट का इस्तेमाल करने के तरीके में कुछ अंतर होते हैं.

संक्षेप में, इंस्ट्रुमेंटेशन टेस्ट, टेस्ट को एक्ज़ीक्यूट करने के लिए खास एनवायरमेंट उपलब्ध कराता है. इसे am instrument कमांड के ज़रिए लॉन्च किया जाता है. इसमें टारगेट किए गए ऐप्लिकेशन की प्रोसेस को रीस्टार्ट किया जाता है और ऐप्लिकेशन के बुनियादी कॉन्टेक्स्ट के साथ शुरू किया जाता है. साथ ही, ऐप्लिकेशन की प्रोसेस वाली वीएम के अंदर इंस्ट्रुमेंटेशन थ्रेड शुरू की जाती है. आपका टेस्ट कोड, इस इंस्ट्रुमेंटेशन थ्रेड पर काम करना शुरू करता है. साथ ही, इसे Instrumentation इंस्टेंस दिया जाता है. यह इंस्टेंस, ऐप्लिकेशन के कॉन्टेक्स्ट और एपीआई का ऐक्सेस देता है. इससे, टेस्ट किए जा रहे ऐप्लिकेशन की प्रोसेस में बदलाव किया जा सकता है.

वीडियो के विषय से जुड़े मुख्य कॉन्सेप्ट

  • इंस्ट्रूमेंटेशन को ऐप्लिकेशन पैकेज में एलान करना होगा. साथ ही, <instrumentation> टैग को ऐप्लिकेशन पैकेज मेनिफ़ेस्ट के <manifest> टैग में नेस्ट करना होगा.
  • तकनीकी तौर पर, ऐप्लिकेशन पैकेज मेनिफ़ेस्ट में कई <instrumentation> टैग हो सकते हैं. हालांकि, आम तौर पर इस तरह से इनका इस्तेमाल नहीं किया जाता.
  • हर <instrumentation> में यह जानकारी होनी चाहिए:
    • android:name एट्रिब्यूट: यह Instrumentation की किसी सबक्लास का नाम होना चाहिए. यह टेस्ट ऐप्लिकेशन में शामिल होना चाहिए. आम तौर पर, यह इस्तेमाल किया जा रहा टेस्ट रनर होता है. उदाहरण के लिए: android.support.test.runner.AndroidJUnitRunner
    • android:targetPackage एट्रिब्यूट की वैल्यू तय होनी चाहिए. इसकी वैल्यू, टेस्ट किए जा रहे ऐप्लिकेशन पैकेज पर सेट होनी चाहिए.

चरणों की खास जानकारी

  1. फ़्रेमवर्क सेवाओं के ख़िलाफ़ हर्मेटिक टेस्ट के लिए, यहां कुछ सामान्य डेस्टिनेशन दिए गए हैं:

    frameworks/base/core/tests/coretests
    frameworks/base/services/tests/servicestests
    

    अगर आपको अपने कॉम्पोनेंट के लिए नया इंस्ट्रूमेंटेशन मॉड्यूल जोड़ना है, तो

  2. अगर ऊपर दी गई किसी जगह पर टेस्ट जोड़े जा रहे हैं, तो मौजूदा कन्वेंशन का पालन करें. अगर आपको नया टेस्ट मॉड्यूल सेट अप करना है, तो कृपया ऊपर दी गई किसी एक जगह पर AndroidManifest.xml और Android.mk को सेट अप करने का तरीका अपनाएं

  3. उदाहरण के लिए, frameworks/base/core/tests/coretests/ देखें. ध्यान दें कि इन लाइनों से अतिरिक्त ऐप्लिकेशन इंस्टॉल होते हैं:

    <option name="test-file-name" value="FrameworksCoreTests.apk" />
    <option name="test-file-name" value="BstatsTestApp.apk" />
    
  4. अपने टेस्ट को @SmallTest, @MediumTest या @LargeTest के तौर पर मार्क करना न भूलें

  5. m की मदद से टेस्ट मॉड्यूल बनाएं. उदाहरण के लिए:

    m FrameworksCoreTests
    
  6. जांच करें:

    • सबसे आसान तरीका यह है कि Atest का इस्तेमाल इस तरह किया जाए:

      atest FrameworksCoreTests
      
    • इसके अलावा, ज़्यादा जटिल टेस्ट के लिए, Trade Federation test Harness का इस्तेमाल करें:

    m tradefed-all
    tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
    
  7. अगर Tradefed का इस्तेमाल नहीं किया जा रहा है, तो मैन्युअल तरीके से टेस्ट इंस्टॉल करें और उन्हें चलाएं:

    1. जनरेट किया गया APK इंस्टॉल करें:
    adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
    
    1. अलग-अलग विकल्पों के साथ टेस्ट चलाएं:

      1. APK में मौजूद सभी टेस्ट

        adb shell am instrument -w com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      2. किसी खास Java पैकेज के तहत सभी टेस्ट

        adb shell am instrument -w -e package android.animation \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      3. किसी क्लास में मौजूद सभी टेस्ट

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        
      4. टेस्ट करने का कोई खास तरीका

        adb shell am instrument -w -e class \
          android.animation.AnimatorSetEventsTest#testCancel \
          com.android.frameworks.coretests\
          /android.support.test.runner.AndroidJUnitRunner
        

JUnit एपीआई का इस्तेमाल करके, टेस्ट में पास या फ़ेल होने के बारे में साफ़ तौर पर बताया जा सकता है. इसके अलावा, पकड़े न गए किसी भी अपवाद की वजह से भी फ़ंक्शन काम नहीं करेगा.

परफ़ॉर्मेंस मेट्रिक भेजने के लिए, आपका टेस्ट कोड Instrumentation#sendStatus को कॉल कर सकता है, ताकि की-वैल्यू पेयर की सूची भेजी जा सके. यह ध्यान रखना ज़रूरी है कि:

  1. मेट्रिक पूर्णांक या फ़्लोटिंग पॉइंट हो सकती हैं
  2. गैर-संख्यात्मक वैल्यू को खारिज कर दिया जाएगा
  3. आपके टेस्ट APK में फ़ंक्शनल टेस्ट या मेट्रिक टेस्ट में से कोई एक हो सकता है. हालांकि, फ़िलहाल दोनों को एक साथ इस्तेमाल नहीं किया जा सकता