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

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

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

खास कॉन्सेप्ट

  • किसी ऐप्लिकेशन पैकेज में, इंस्ट्रुमेंटेशन के बारे में एलान करना ज़रूरी है. इसके लिए, ऐप्लिकेशन पैकेज मेनिफ़ेस्ट के <manifest> टैग के नीचे, <instrumentation> टैग का इस्तेमाल करें.
  • तकनीकी तौर पर, ऐप्लिकेशन पैकेज मेनिफ़ेस्ट में एक से ज़्यादा <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 के टेस्ट हार्नेस का इस्तेमाल करें:

    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 में, फ़ंक्शन टेस्ट या मेट्रिक टेस्ट में से कोई एक हो सकता है. हालांकि, फ़िलहाल दोनों को एक साथ इस्तेमाल नहीं किया जा सकता