सबसे पहले, developer.android.com पर अपने ऐप्लिकेशन की जांच करें लेख पढ़ें. ध्यान दें कि प्लैटफ़ॉर्म टेस्टिंग में, इंस्ट्रूमेंटेशन टेस्ट का इस्तेमाल करने के तरीके में कुछ अंतर हैं.
खास तौर पर, इंस्ट्रूमेंटेशन टेस्ट, am instrument
कमांड के ज़रिए लॉन्च किए गए टेस्ट को चलाने के लिए एक खास एनवायरमेंट उपलब्ध कराता है. इसमें, टारगेट की गई ऐप्लिकेशन प्रोसेस को फिर से शुरू किया जाता है और ऐप्लिकेशन के बुनियादी कॉन्टेक्स्ट के साथ शुरू किया जाता है. साथ ही, ऐप्लिकेशन प्रोसेस VM में इंस्ट्रूमेंटेशन थ्रेड शुरू की जाती है. आपका टेस्ट कोड, इस इंस्ट्रूमेंटेशन थ्रेड पर चलना शुरू करता है. साथ ही, इसे एक Instrumentation
इंस्टेंस दिया जाता है. इससे, टेस्ट के तहत आने वाली ऐप्लिकेशन प्रोसेस में बदलाव करने के लिए, ऐप्लिकेशन कॉन्टेक्स्ट और एपीआई का ऐक्सेस मिलता है.
खास कॉन्सेप्ट
- किसी ऐप्लिकेशन पैकेज में, इंस्ट्रूमेंटेशन के बारे में एलान करना ज़रूरी है. इसके लिए, ऐप्लिकेशन पैकेज मेनिफ़ेस्ट के
<manifest>
टैग के नीचे,<instrumentation>
टैग का इस्तेमाल करें. - तकनीकी तौर पर, ऐप्लिकेशन पैकेज मेनिफ़ेस्ट में एक से ज़्यादा
<instrumentation>
टैग हो सकते हैं. हालांकि, आम तौर पर इसका इस्तेमाल इस तरह नहीं किया जाता. - हर
<instrumentation>
में ये शामिल होने चाहिए:android:name
एट्रिब्यूट: यहInstrumentation
के किसी ऐसे सबक्लास का नाम होना चाहिए जो टेस्ट ऐप्लिकेशन में शामिल है.आम तौर पर, यह इस्तेमाल किया जा रहा टेस्ट रननर होता है. उदाहरण के लिए:android.support.test.runner.AndroidJUnitRunner
android:targetPackage
एट्रिब्यूट की वैल्यू देना ज़रूरी है. इसकी वैल्यू, जांचे जा रहे ऐप्लिकेशन पैकेज पर सेट होनी चाहिए.
चरणों की खास जानकारी
फ़्रेमवर्क सेवाओं के लिए, पूरी तरह से सुरक्षित टेस्ट के सामान्य डेस्टिनेशन यहां दिए गए हैं:
frameworks/base/core/tests/coretests frameworks/base/services/tests/servicestests
अगर आपको अपने कॉम्पोनेंट के लिए एक नया इंस्ट्रूमेंटेशन मॉड्यूल जोड़ना है, तो
अगर ऊपर बताई गई किसी जगह पर टेस्ट जोड़े जा रहे हैं, तो मौजूदा समझौते का पालन करें. अगर आपको नया टेस्ट मॉड्यूल सेट अप करना है, तो कृपया ऊपर बताई गई किसी एक जगह पर,
AndroidManifest.xml
औरAndroid.mk
के सेटअप का पालन करेंउदाहरण के लिए, frameworks/base/core/tests/coretests/ देखें. ध्यान दें कि ये लाइनें अतिरिक्त ऐप्लिकेशन इंस्टॉल करती हैं:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
अपने टेस्ट को
@SmallTest
,@MediumTest
या@LargeTest
के तौर पर मार्क करना न भूलेंm की मदद से टेस्ट मॉड्यूल बनाएं, जैसे:
m FrameworksCoreTests
टेस्ट चलाएं:
इसका सबसे आसान तरीका यह है कि Atest का इस्तेमाल इस तरह किया जाए:
atest FrameworksCoreTests
इसके अलावा, ज़्यादा जटिल टेस्ट के लिए, Trade Federation के टेस्ट हार्नेस का इस्तेमाल करें:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
अगर Tradefed का इस्तेमाल नहीं किया जा रहा है, तो टेस्ट को मैन्युअल तरीके से इंस्टॉल और चलाएं:
- जनरेट किया गया APK इंस्टॉल करें:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
अलग-अलग विकल्पों के साथ टेस्ट चलाएं:
APK में मौजूद सभी टेस्ट
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
किसी खास Java पैकेज के तहत सभी टेस्ट
adb shell am instrument -w -e package android.animation \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
किसी क्लास में मौजूद सभी टेस्ट
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
टेस्ट करने का कोई खास तरीका
adb shell am instrument -w -e class \ android.animation.AnimatorSetEventsTest#testCancel \ com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
आपका टेस्ट, JUnit
एपीआई का इस्तेमाल करके, पास या फ़ेल होने के बारे में साफ़ तौर पर बता सकता है. इसके अलावा, बिना पकड़ में आए किसी भी अपवाद की वजह से भी फ़ंक्शन काम नहीं करेगा.
परफ़ॉर्मेंस मेट्रिक को एमिट करने के लिए, आपका टेस्ट कोड, की-वैल्यू पेयर की सूची भेजने के लिए Instrumentation#sendStatus
को कॉल कर सकता है. यह ध्यान रखना ज़रूरी है कि:
- मेट्रिक, पूर्णांक या फ़्लोटिंग पॉइंट हो सकती हैं
- ऐसी कोई भी वैल्यू खारिज कर दी जाएगी जो संख्याओं वाली न हो
- आपके टेस्ट APK में, फ़ंक्शन टेस्ट या मेट्रिक टेस्ट में से कोई एक हो सकता है. हालांकि, फ़िलहाल दोनों को एक साथ इस्तेमाल नहीं किया जा सकता