कमांड लाइन से जांच करना

इस दस्तावेज़ में, कमांड लाइन से सीधे टेस्ट रन करने का तरीका बताया गया है. इस दस्तावेज़ में यह माना गया है कि आपको Android ऐप्लिकेशन बनाने और अपने ऐप्लिकेशन के लिए टेस्ट लिखने का तरीका पहले से पता है. अपने ऐप्लिकेशन के लिए टेस्ट बनाने के बारे में ज़्यादा जानने के लिए, Android पर ऐप्लिकेशन की जांच करनालेख पढ़ें.

इस पेज पर बताई गई कमांड-लाइन टूल और Gradle टास्क, यूज़र इंटरफ़ेस (यूआई) टूलकिट से अलग हैं. अगर आपको Compose के लिए यूज़र इंटरफ़ेस (यूआई) टेस्ट लिखने हैं, तो Compose के लेआउट की जांच करना लेख पढ़ें. टेस्ट लिखने के बाद, उन्हें अपने टर्मिनल या रिमोट कंटीन्यूअस इंटिग्रेशन एनवायरमेंट से रन करने के लिए, इस गाइड को पढ़ें.

Gradle बिल्ड सिस्टम का इस्तेमाल करके अपना ऐप्लिकेशन बनाने पर, Android Gradle प्लगिन की मदद से, कमांड लाइन का इस्तेमाल करके अपने Gradle प्रोजेक्ट से टेस्ट रन किए जा सकते हैं. ज़्यादा बेहतर तरीके से कंट्रोल करने के लिए, आप अपने टेस्ट Android डीबग ब्रिज (एडीबी) शेल के ज़रिए रन कर सकते हैं. कंटीन्यूअस इंटिग्रेशन एनवायरमेंट में टेस्ट रन करते समय, यह तरीका काम आ सकता है.

वर्चुअल डिवाइसों का इस्तेमाल करके, कमांड लाइन से ऑटोमेटेड इंस्ट्रुमेंटेड टेस्ट रन करने का तरीका जानने के लिए, Gradle मैनेज किए जाने वाले डिवाइसों की मदद से अपने टेस्ट को स्केल करना लेख पढ़ें. Gradle, इन डिवाइसों को मैनेज करता है.

Gradle की मदद से टेस्ट रन करना

Android Gradle प्लगिन की मदद से, कमांड लाइन का इस्तेमाल करके अपने Gradle प्रोजेक्ट से टेस्ट रन किए जा सकते हैं.

यहां दी गई टेबल में, Gradle की मदद से टेस्ट रन करने के तरीके के बारे में बताया गया है:

टेबल 1. Gradle की मदद से टेस्ट रन करने के अलग-अलग तरीके

यूनिट टेस्ट का टाइप रन करने का निर्देश टेस्ट के नतीजों की जगह
लोकल यूनिट टेस्ट test टास्क रन करें:

./gradlew test
एचटीएमएल फ़ॉर्मैट में टेस्ट के नतीजों वाली फ़ाइलें:
path_to_your_project/module_name/build/reports/tests/ डायरेक्ट्री.

एक्सएमएल फ़ॉर्मैट में टेस्ट के नतीजों वाली फ़ाइलें:
path_to_your_project/module_name/build/test-results/ डायरेक्ट्री.

इंस्ट्रुमेंटेड यूनिट टेस्ट connectedAndroidTest टास्क रन करें:

./gradlew connectedAndroidTest
एचटीएमएल फ़ॉर्मैट में टेस्ट के नतीजों वाली फ़ाइलें:
path_to_your_project/module_name/build/reports/androidTests/connected/ डायरेक्ट्री.

एक्सएमएल फ़ॉर्मैट में टेस्ट के नतीजों वाली फ़ाइलें:
path_to_your_project/module_name/build/outputs/androidTest-results/connected/ डायरेक्ट्री.

Gradle में, टास्क के नाम के शॉर्ट फ़ॉर्म इस्तेमाल किए जा सकते हैं. उदाहरण के लिए, connectedAndroidTest टास्क शुरू करने के लिए, यह निर्देश डाला जा सकता है:

./gradlew cAT

check और connectedCheck Gradle टास्क भी रन किए जा सकते हैं. इन टास्क से, क्रमशः लोकल या इंस्ट्रुमेंटेड टेस्ट रन किए जाते हैं. हालांकि, इनमें अन्य Gradle प्लगिन से जोड़ी गई अन्य जांचें भी शामिल होती हैं.

किसी मॉड्यूल पर टेस्ट रन करना

test और connectedAndroidTest टास्क, आपके प्रोजेक्ट के हर मॉड्यूल पर टेस्ट रन करते हैं. किसी खास मॉड्यूल पर टेस्ट रन करने के लिए, test या connectedAndroidTest टास्क के आगे मॉड्यूल का नाम और कॉलन (:) जोड़ें. उदाहरण के लिए, यहां दिया गया निर्देश सिर्फ़ mylibrary मॉड्यूल के लिए इंस्ट्रुमेंटेड टेस्ट रन करता है:

./gradlew mylibrary:connectedAndroidTest

किसी बिल्ड वैरिएंट पर टेस्ट रन करना

test और connectedAndroidTest टास्क, आपके प्रोजेक्ट के हर बिल्ड वैरिएंट पर टेस्ट रन करते हैं. किसी खास बिल्ड वैरिएंट को टारगेट करने के लिए, यह सिंटैक्स इस्तेमाल करें:

  • लोकल यूनिट टेस्ट के लिए:
    ./gradlew testVariantNameUnitTest
  • इंस्ट्रुमेंटेड टेस्ट के लिए:
    ./gradlew connectedVariantNameAndroidTest

टेस्ट के खास तरीके या क्लास रन करना

लोकल यूनिट टेस्ट रन करते समय, Gradle की मदद से --tests फ़्लैग का इस्तेमाल करके, खास टेस्ट को टारगेट किया जा सकता है. उदाहरण के लिए, यहां दिया गया निर्देश, तय किए गए बिल्ड के वैरिएंट के लिए सिर्फ़ sampleTestMethod टेस्ट रन करता है. --tests फ़्लैग के इस्तेमाल के बारे में ज़्यादा जानने के लिए, टेस्ट फ़िल्टर करने के बारे में Gradle का दस्तावेज़ पढ़ें.


./gradlew testVariantNameUnitTest --tests '*.sampleTestMethod'

adb की मदद से टेस्ट रन करना

Android डीबग ब्रिज (एडीबी) की मदद से, कमांड लाइन से टेस्ट रन करते समय, टेस्ट चुनने के लिए अन्य तरीकों के मुकाबले ज़्यादा विकल्प मिलते हैं. टेस्ट के अलग-अलग तरीके चुने जा सकते हैं, कस्टम एनोटेशन के हिसाब से टेस्ट फ़िल्टर किए जा सकते हैं या टेस्ट के विकल्प तय किए जा सकते हैं. कमांड लाइन से टेस्ट रन को पूरी तरह कंट्रोल किया जा सकता है. इसलिए, शेल स्क्रिप्ट की मदद से, टेस्ट को अलग-अलग तरीकों से पसंद के मुताबिक बनाया जा सकता है.

कमांड लाइन से टेस्ट रन करने के लिए, अपने डिवाइस या एम्युलेटर पर कमांड-लाइन शेल शुरू करने के लिए, adb shell रन करें. उस शेल में, am कमांड का इस्तेमाल करके, ऐक्टिविटी मैनेजर के साथ इंटरैक्ट किया जा सकता है. साथ ही, अपने टेस्ट रन करने के लिए, इसकी instrument सब-कमांड का इस्तेमाल किया जा सकता है.

शॉर्टकट के तौर पर, एक ही इनपुट लाइन पर adb शेल शुरू किया जा सकता है, am instrument को कॉल किया जा सकता है, और कमांड-लाइन फ़्लैग तय किए जा सकते हैं. शेल, डिवाइस या एम्युलेटर पर खुलता है, आपके टेस्ट रन करता है, आउटपुट जनरेट करता है, और फिर आपके कंप्यूटर पर कमांड लाइन पर वापस आ जाता है.

am instrument की मदद से टेस्ट रन करने के लिए:

  1. अपना मुख्य ऐप्लिकेशन और टेस्ट पैकेज बनाएं या फिर से बनाएं.
  2. इंस्टॉल करें अपने मौजूदा Android डिवाइस या एम्युलेटर पर, टेस्ट पैकेज और मुख्य ऐप्लिकेशन की Android पैकेज फ़ाइलें (एपीके फ़ाइलें).
  3. कमांड लाइन पर, यह डालें:

    adb shell am instrument -w <test_package_name>/<runner_class>

    यहां <test_package_name> आपके टेस्ट ऐप्लिकेशन का Android पैकेज का नाम है. वहीं, <runner_class> उस Android टेस्ट रनर क्लास का नाम है जिसका इस्तेमाल किया जा रहा है. Android पैकेज का नाम, आपके टेस्ट पैकेज की मेनिफ़ेस्ट फ़ाइल (AndroidManifest.xml) में, मेनिफ़ेस्ट एलिमेंट के पैकेज एट्रिब्यूट की वैल्यू होती है.

    Android टेस्ट रनर क्लास आम तौर पर AndroidJUnitRunner होती है:

    adb shell am instrument -w com.android.example/androidx.test.runner.AndroidJUnitRunner

आपके टेस्ट के नतीजे, STDOUT में दिखते हैं.

`am instrument` फ़्लैग

am instrument कमांड के साथ इस्तेमाल किए जाने वाले सभी फ़्लैग की सूची देखने के लिए, adb shell am help रन करें. कुछ अहम फ़्लैग के बारे में यहां दी गई टेबल में बताया गया है:

टेबल 2. am instrument के अहम फ़्लैग

फ़्लैग वैल्यू ब्यौरा
-w (कोई नहीं) am instrument को तब तक इंतज़ार करने के लिए मजबूर करता है, जब तक कि इंस्ट्रुमेंटेशन खत्म न हो जाए. इससे शेल तब तक खुला रहता है, जब तक टेस्ट पूरे नहीं हो जाते. अपने टेस्ट के नतीजे देखने के लिए, यह फ़्लैग ज़रूरी है.
-r (कोई नहीं) नतीजों को रॉ फ़ॉर्मैट में दिखाता है. इस फ़्लैग का इस्तेमाल तब करें, जब आपको परफ़ॉर्मेंस मेज़रमेंट इकट्ठा करने हों, ताकि उन्हें टेस्ट के नतीजों के तौर पर फ़ॉर्मैट न किया जाए. इस फ़्लैग को -e perf true फ़्लैग के साथ इस्तेमाल करने के लिए डिज़ाइन किया गया है. इसकी जानकारी, am instrument options के विकल्पों वाले सेक्शन में दी गई है.
-e <test_options> की-वैल्यू पेयर के तौर पर, टेस्ट के विकल्प उपलब्ध कराता है. The am instrument टूल, इन विकल्पों को तय की गई इंस्ट्रुमेंटेशन क्लास को उसके onCreate() तरीके का इस्तेमाल करके पास करता है. -e <test_options> के एक से ज़्यादा इंस्टेंस तय किए जा सकते हैं. कुंजियों और वैल्यू के बारे में, am instrument के विकल्पों वाले सेक्शन में बताया गया है. इन की-वैल्यू पेयर का इस्तेमाल सिर्फ़ AndroidJUnitRunner के साथ किया जा सकता है. किसी अन्य क्लास के साथ इनका इस्तेमाल करने से कोई फ़र्क़ नहीं पड़ता.
--no-hidden-api-checks (कोई नहीं) छिपे हुए एपीआई के इस्तेमाल पर लगी पाबंदियां हटाता है. छिपे हुए एपीआई क्या होते हैं और इससे आपके ऐप्लिकेशन पर क्या असर पड़ सकता है, इस बारे में ज़्यादा जानने के लिए, गैर-एसडीके इंटरफ़ेस पर लगी पाबंदियां लेख पढ़ें.

am instrument के विकल्प

am instrument टूल, टेस्ट के विकल्पों को की-वैल्यू पेयर के तौर पर, -e फ़्लैग का इस्तेमाल करके AndroidJUnitRunner या InstrumentationTestRunner को पास करता है. इसके लिए, यह सिंटैक्स इस्तेमाल किया जाता है:

-e <key> <value>

कुछ कुंजियां, एक से ज़्यादा वैल्यू स्वीकार करती हैं. कॉमा लगाकर अलग की गई सूची में, एक से ज़्यादा वैल्यू तय की जा सकती हैं. उदाहरण के लिए, AndroidJUnitRunner का यह इनवोकेशन, package कुंजी के लिए एक से ज़्यादा वैल्यू उपलब्ध कराता है:

adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
> com.android.test/androidx.test.runner.AndroidJUnitRunner

यहां दी गई टेबल में, की-वैल्यू पेयर की जानकारी दी गई है. इनका इस्तेमाल, टेस्ट रनर के साथ किया जा सकता है:

टेबल 3. टेस्ट रनर के साथ इस्तेमाल करने के लिए, -e फ़्लैग की की-वैल्यू पेयर

कुंजी वैल्यू ब्यौरा
package <Java_package_name> टेस्ट ऐप्लिकेशन में मौजूद किसी एक पैकेज के लिए, पूरी तरह क्वालिफ़ाइड Java पैकेज का नाम. इस पैकेज के नाम का इस्तेमाल करने वाली, टेस्ट केस की सभी क्लास को एक्ज़ीक्यूट किया जाता है. ध्यान दें कि यह Android पैकेज का नाम नहीं है. किसी टेस्ट पैकेज का एक Android पैकेज का नाम होता है, लेकिन इसमें कई Java पैकेज हो सकते हैं.
class <class_name> टेस्ट केस की किसी एक क्लास के लिए, पूरी तरह क्वालिफ़ाइड Java क्लास का नाम. सिर्फ़ इस टेस्ट केस क्लास को एक्ज़ीक्यूट किया जाता है.
<class_name>#method name टेस्ट केस की किसी एक क्लास का पूरी तरह क्वालिफ़ाइड नाम और उसके किसी एक तरीके का नाम. सिर्फ़ इस तरीके को एक्ज़ीक्यूट किया जाता है. ध्यान दें कि क्लास के नाम और तरीके के नाम के बीच हैश मार्क (#) है.
size [small | medium | large] साइज़ के हिसाब से एनोटेट किए गए टेस्ट के तरीके को रन करता है. एनोटेशन @SmallTest, @MediumTest, और @LargeTest हैं.
debug true डीबग मोड में टेस्ट रन करता है.
log true तय किए गए सभी टेस्ट लोड और लॉग करता है, लेकिन उन्हें रन नहीं करता. टेस्ट की जानकारी, STDOUT में दिखती है. इसका इस्तेमाल, अन्य फ़िल्टर और टेस्ट की खास जानकारी के कॉम्बिनेशन की पुष्टि करने के लिए करें.
emma true ईएमएमए कोड कवरेज का विश्लेषण करता है और आउटपुट को डिवाइस पर /data/<app_package>/coverage.ec में लिखता है. फ़ाइल की जगह की जानकारी को बदलने के लिए, coverageFile कुंजी का इस्तेमाल करें. इसकी जानकारी, अगली एंट्री में दी गई है.

ध्यान दें: इस विकल्प के लिए, टेस्ट ऐप्लिकेशन का ईएमएमए-इंस्ट्रुमेंटेड बिल्ड ज़रूरी है. इसे coverage टारगेट की मदद से जनरेट किया जा सकता है.

coverageFile <filename> डिवाइस पर, ईएमएमए कवरेज फ़ाइल की डिफ़ॉल्ट जगह की जानकारी को बदलता है. इस वैल्यू को, यूनीक्स फ़ॉर्मैट में पाथ और फ़ाइल नाम के तौर पर तय करें. emmaकुंजी की एंट्री में, डिफ़ॉल्ट फ़ाइल नाम की जानकारी दी गई है.

-e फ़्लैग का इस्तेमाल करते समय, इन बातों का ध्यान रखें:

  • am instrument इनवोक करता है onCreate(Bundle) की-वैल्यू पेयर वाले Bundle के साथ.
  • package कुंजी को class कुंजी के मुकाबले ज़्यादा प्राथमिकता दी जाती है. अगर कोई पैकेज तय किया जाता है और फिर उस पैकेज में कोई क्लास अलग से तय की जाती है, तो Android उस पैकेज में मौजूद सभी टेस्ट रन करता है और क्लास कुंजी को अनदेखा कर देता है.
  • func कुंजी और unit कुंजी, एक-दूसरे के साथ इस्तेमाल नहीं की जा सकतीं.

इस्तेमाल करने के उदाहरण

इन सेक्शन में, टेस्ट रन करने के लिए am instrument का इस्तेमाल करने के उदाहरण दिए गए हैं. ये उदाहरण, इस स्ट्रक्चर पर आधारित हैं:

  • टेस्ट पैकेज का Android पैकेज का नाम com.android.demo.app.tests है.
  • इंस्ट्रुमेंटेड टेस्ट की दो क्लास:
    • TestClass1, जिसमें टेस्ट का तरीका testMethod1 शामिल है.
    • TestClass2, जिसमें टेस्ट के तरीके testMethod2 और testMethod3 शामिल हैं.
  • टेस्ट रनर है AndroidJUnitRunner.

पूरा टेस्ट पैकेज रन करना

टेस्ट पैकेज में मौजूद टेस्ट की सभी क्लास रन करने के लिए, यह डालें:

adb shell am instrument -w com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

टेस्ट केस की किसी एक क्लास में मौजूद सभी टेस्ट रन करना

TestClass1 क्लास में मौजूद सभी टेस्ट रन करने के लिए, यह डालें:

adb shell am instrument -w  \
> -e class com.android.demo.app.tests.TestClass1 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

टेस्ट का सबसेट चुनना

TestClass1 क्लास में मौजूद सभी टेस्ट और TestClass2 में testMethod3 तरीका रन करने के लिए, यह डालें:

adb shell am instrument -w \
> -e class com.android.demo.app.tests.TestClass1,com.android.demo.app.tests.TestClass2#testMethod3 \
> com.android.demo.app.tests/androidx.test.runner.AndroidJUnitRunner

AndroidJUnitRunner एपीआई रेफ़रंस में, इस्तेमाल के अन्य उदाहरण देखे जा सकते हैं.

एक साथ कई टेस्ट की रिपोर्ट देखना

Android Gradle प्लगिन, एक साथ कई टेस्ट के टास्क उपलब्ध कराता है. इनसे एचटीएमएल डैशबोर्ड जनरेट होते हैं. इनमें यूनिट और इंस्ट्रुमेंटेड टेस्ट के अलग-अलग डेटा एक साथ नतीजे को मर्ज किया जाता है.

ज़रूरी शर्तें

  • Android Gradle प्लगिन 9.5.0-alpha05 या इसके बाद का वर्शन.

टेस्ट के सभी सुइट की जांच करने के लिए, इनमें से कोई एक टास्क रन करें:

रिपोर्ट का दायरा कमांड ब्यौरा रिपोर्ट की जगह
मौजूदा मॉड्यूल ./gradlew :module_name:testAllSuites --continue मौजूदा मॉड्यूल के लिए, एक साथ कई टेस्ट की रिपोर्ट जनरेट करता है. इसमें यूनिट और इंस्ट्रुमेंटेड टेस्ट के नतीजों को मर्ज किया जाता है. path_to_your_project/module_name/build/reports/testAllSuites/test-report/
मौजूदा मॉड्यूल और डिपेंडेंसी ./gradlew :module_name:testAllSuitesWithDependencies --continue मौजूदा मॉड्यूल और उसकी लाइब्रेरी डिपेंडेंसी के लिए, एक साथ कई टेस्ट की रिपोर्ट जनरेट करता है. इसमें यूनिट और इंस्ट्रुमेंटेड टेस्ट के नतीजों को मर्ज किया जाता है. path_to_your_project/module_name/build/reports/testAllSuitesWithDependencies/test-report/