सबसे पहले development.android.com पर अपने ऐप का परीक्षण करें पढ़ें। ध्यान दें कि प्लेटफ़ॉर्म परीक्षण में उपकरण परीक्षण का उपयोग कैसे किया जाता है, इसमें कुछ अंतर हैं।
संक्षेप में, एक इंस्ट्रूमेंटेशन परीक्षण एक विशेष परीक्षण निष्पादन वातावरण प्रदान करता है जैसा कि am instrument
कमांड के माध्यम से लॉन्च किया जाता है, जहां लक्षित एप्लिकेशन प्रक्रिया को फिर से शुरू किया जाता है और बुनियादी एप्लिकेशन संदर्भ के साथ आरंभ किया जाता है, और एप्लिकेशन प्रक्रिया वीएम के अंदर एक इंस्ट्रूमेंटेशन थ्रेड शुरू किया जाता है। आपका परीक्षण कोड इस इंस्ट्रूमेंटेशन थ्रेड पर निष्पादन शुरू करता है और एक 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
के सेटअप का पालन करें।उदाहरण के लिए फ्रेमवर्क/बेस/कोर/टेस्ट/कोरटेस्ट/ देखें। ध्यान दें कि ये पंक्तियाँ अतिरिक्त ऐप्स इंस्टॉल करती हैं:
<option name="test-file-name" value="FrameworksCoreTests.apk" /> <option name="test-file-name" value="BstatsTestApp.apk" />
अपने परीक्षण को
@SmallTest
,@MediumTest
या@LargeTest
के रूप में चिह्नित करना न भूलेंएम के साथ परीक्षण मॉड्यूल बनाएं, उदाहरण के लिए:
m FrameworksCoreTests
परीक्षण चलाएँ:
सबसे सरल समाधान एटेस्ट का इस प्रकार उपयोग करना है:
atest FrameworksCoreTests
या अधिक जटिल परीक्षणों के लिए, ट्रेड फेडरेशन परीक्षण हार्नेस का उपयोग करें:
m tradefed-all tradefed.sh run template/local_min --template:map test=FrameworksCoreTests
यदि ट्रेडफेड का उपयोग नहीं कर रहे हैं, तो मैन्युअल रूप से परीक्षण स्थापित करें और चलाएं:
- जनरेट किया गया एपीके इंस्टॉल करें:
adb install -r ${OUT}/data/app/FrameworksCoreTests/FrameworksCoreTests.apk
विभिन्न विकल्पों के साथ परीक्षण चलाएँ:
एपीके में सभी परीक्षण
adb shell am instrument -w com.android.frameworks.coretests\ /android.support.test.runner.AndroidJUnitRunner
सभी परीक्षण एक विशिष्ट जावा पैकेज के अंतर्गत
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
API का उपयोग करके पास या असफल होने पर स्पष्ट दावा कर सकता है; इसके अलावा, कोई भी न पकड़ा गया अपवाद भी कार्यात्मक विफलता का कारण बनेगा।
प्रदर्शन मेट्रिक्स उत्सर्जित करने के लिए, आपका परीक्षण कोड कुंजी-मूल्य जोड़े की सूची भेजने के लिए Instrumentation#sendStatus
कॉल कर सकता है। यह ध्यान रखना महत्वपूर्ण है कि:
- मेट्रिक्स पूर्णांक या फ़्लोटिंग पॉइंट हो सकते हैं
- किसी भी गैर-संख्यात्मक मान को हटा दिया जाएगा
- आपका परीक्षण एपीके या तो कार्यात्मक परीक्षण या मेट्रिक्स परीक्षण हो सकता है, हालांकि दोनों का मिश्रण वर्तमान में समर्थित नहीं है