टेस्ट के लिए जटिल कॉन्फ़िगरेशन

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

  • अन्य apks इंस्टॉल करें (टेस्ट apk के अलावा)
  • डिवाइस पर कुछ फ़ाइलें पुश करें
  • निर्देश चलाना (उदाहरण के लिए, adb shell pm ...)

पहले, कॉम्पोनेंट टीमें आम तौर पर ऐसे टास्क को पूरा करने के लिए, होस्ट साइड टेस्ट लिखती थीं. इसके लिए, Trade Federation harness को समझना ज़रूरी होता है. साथ ही, आम तौर पर टेस्ट मॉड्यूल की जटिलता बढ़ जाती है.

CTS से प्रेरणा लेकर, हमने टेस्ट मॉड्यूल कॉन्फ़िगरेशन का कॉन्सेप्ट पेश किया है, ताकि ऐसे टास्क पूरे किए जा सकें. ऊपर दी गई सामान्य टास्क की सूची को, कॉन्फ़िगरेशन की कुछ लाइनों से पूरा किया जा सकता है. ज़्यादा सुविधाओं के लिए, ITargetPreparer या ITargetCleaner के मुताबिक, अपना टारगेट तैयार करने वाला टूल भी लागू किया जा सकता है. साथ ही, अपने टेस्ट मॉड्यूल कॉन्फ़िगरेशन में इस्तेमाल करने के लिए, उन्हें कॉन्फ़िगर किया जा सकता है.

टेस्ट मॉड्यूल के लिए टेस्ट मॉड्यूल कॉन्फ़िगरेशन, एक ज़रूरी एक्सएमएल फ़ाइल होती है. इसे टॉप लेवल मॉड्यूल सोर्स फ़ोल्डर में जोड़ा जाता है. इसका नाम ‘AndroidTest.xml’ होता है. यह एक्सएमएल, कॉन्फ़िगरेशन फ़ाइल के फ़ॉर्मैट का पालन करता है. इसका इस्तेमाल, Trade Federation के टेस्ट ऑटोमेशन हार्नेस करते हैं. फ़िलहाल, टेस्ट मॉड्यूल कॉन्फ़िगरेशन की मदद से मैनेज किए जाने वाले मुख्य टैग, “target_preparer” और "test" टैग हैं.

टारगेट तैयार करने वाले लोग

जैसा कि नाम से पता चलता है, “target_preparer” टैग, टारगेट तैयार करने वाले टूल (ITargetPreparer देखें) के बारे में बताता है. यह टूल, सेटअप करने का एक तरीका उपलब्ध कराता है. यह तरीका, टेस्ट के लिए टेस्ट मॉड्यूल को लागू करने से पहले कॉल किया जाता है. अगर “target_preparer” टैग में रेफ़र की गई क्लास, ITargetCleaner को भी लागू करती है, तो टेस्ट मॉड्यूल के खत्म होने के बाद, इसका teardown तरीका लागू किया जाएगा.

पहले से मौजूद सामान्य मॉड्यूल कॉन्फ़िगरेशन का इस्तेमाल करने के लिए, अपने टेस्ट मॉड्यूल के टॉप लेवल फ़ोल्डर में नई फ़ाइल ‘AndroidTest.xml’ जोड़ें और उसमें यह कॉन्टेंट डालें:

<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>

उदाहरण के लिए, ऊपर दी गई “शामिल करें” टिप्पणी पर, ये विकल्प टैग जोड़े जा सकते हैं:

    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put secure accessibility_enabled 1" />
        <option name="teardown-command" value="settings put secure accessibility_enabled 0" />
    </target_preparer>

इन विकल्पों की मदद से, टेस्ट हार्नेस को इनके लिए कॉन्फ़िगर किया जा सकता है:

  1. टेस्ट मॉड्यूल को शुरू करने से पहले, डिवाइस पर शेल कमांड “settings put secure accessibility_enabled 1” चलाएं
  2. टेस्ट मॉड्यूल पूरा होने के बाद, शेल कमांड “settings put secure accessibility_enabled 0” को लागू करें

इस उदाहरण में, टेस्ट मॉड्यूल के चालू होने से पहले/बाद, सुलभता मोड को चालू/बंद किया गया है. एक आसान उदाहरण के साथ दिखाया गया है कि “option” टैग का इस्तेमाल कैसे किया जाता है. इस बारे में ज़्यादा जानकारी देना ज़रूरी है. जैसा कि ऊपर दिखाया गया है, टैग में दो एट्रिब्यूट हो सकते हैं: नाम, वैल्यू. name एट्रिब्यूट में, प्रॉडक्ट की जानकारी देने वाले व्यक्ति या कंपनी के दिए गए विकल्पों में से किसी एक का नाम होना चाहिए.

वैल्यू फ़ील्ड का असल मकसद, इस बात पर निर्भर करता है कि डेटा तैयार करने वाले व्यक्ति ने विकल्प को कैसे तय किया है: यह स्ट्रिंग, संख्या, बूलियन या फ़ाइल पाथ हो सकता है. यहां तीन सामान्य टारगेट तैयार करने वालों की खास जानकारी दी गई है:

  • क्लास का नाम: PushFilePreparer

    • छोटा नाम: push-file
    • फ़ंक्शन: डिवाइस पर मौजूद डेस्टिनेशन में, टेस्ट केस फ़ोल्डर में मौजूद किसी भी फ़ाइल को पुश करता है
    • अहम जानकारी:
      • यह प्रिपरर, फ़ोल्डर से फ़ोल्डर या फ़ाइल से फ़ाइल में पुश कर सकता है. इसका मतलब है कि डिवाइस पर किसी फ़ोल्डर में मौजूद फ़ाइल को पुश नहीं किया जा सकता: आपको उस फ़ोल्डर में डेस्टिनेशन फ़ाइल का नाम भी बताना होगा
    • विकल्प:
      • push-file: यह एक पुश-स्पेसिफ़िकेशन है, जिसमें लोकल फ़ाइल के उस पाथ की जानकारी दी जाती है जहां उसे डिवाइस पर पुश किया जाना चाहिए. दोहराया जा सकता है. अगर एक ही रिमोट पाथ पर कई फ़ाइलों को पुश करने के लिए कॉन्फ़िगर किया गया है, तो सबसे नई फ़ाइल को पुश किया जाएगा.
      • push: (अब काम नहीं करता) यह एक पुश-स्पेसिफ़िकेशन है, जिसे '/path/to/srcfile.txt->/path/to/destfile.txt' या '/path/to/srcfile.txt->/path/to/destdir/' के तौर पर फ़ॉर्मैट किया गया है. इसे दोहराया जा सकता है. यह पाथ, टेस्ट मॉड्यूल डायरेक्ट्री या खुद out डायरेक्ट्री से जुड़ा हो सकता है.
      • post-push: सभी पुश की कोशिश करने के बाद, डिवाइस पर चलाने के लिए एक निर्देश (`adb shell <your command>` के साथ). आम तौर पर, अनुमतियों के लिए chmod का इस्तेमाल किया जाता है
  • क्लास का नाम: InstallApkSetup

    • छोटा नाम:install-apk
    • फ़ंक्शन: आर्बिट्रेरी apk फ़ाइलों को डिवाइस पर गंतव्य में पुश करता है
    • विकल्प:
      • test-file-name: डिवाइस पर इंस्टॉल किए जाने वाले APK का नाम.
      • install-arg: pm install कमांड में पास किए जाने वाले अतिरिक्त आर्ग्युमेंट. इनमें शुरुआत में डैश भी शामिल है, जैसे कि “-d". दोहराया जा सकता है
  • क्लास का नाम: RunCommandTargetPreparer

    • छोटा नाम: रन-कमांड
    • फ़ंक्शन: टेस्ट मॉड्यूल के चालू होने से पहले या बाद में, मनमुताबिक शेल निर्देशों को लागू करता है
    • विकल्प:
      • run-command:adb शेल कमांड चलाने के लिए. दोहराया जा सकता है
      • teardown-command:डिवाइस हटाने के दौरान चलाया जाने वाला adb shell कमांड. दोहराया जा सकता है

टेस्ट क्लास

टेस्ट क्लास, Trade Federation क्लास होती है. इसका इस्तेमाल टेस्ट को लागू करने के लिए किया जाता है.

<test class="com.android.tradefed.testtype.AndroidJUnitTest">
  <option name="package" value="android.test.example.helloworld"/>
  <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>

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

  • क्लास का नाम: GTest

    • छोटा नाम: gtest
    • फ़ंक्शन: यह एक ऐसा टेस्ट है जो दिए गए डिवाइस पर नेटिव टेस्ट पैकेज चलाता है.
    • विकल्प:
      • native-test-device-path:डिवाइस पर मौजूद वह पाथ जहां नेटिव टेस्ट मौजूद हैं.
  • क्लास का नाम: InstrumentationTest

    • छोटा नाम: इंस्ट्रुमेंटेशन
    • फ़ंक्शन: ऐसा टेस्ट जो दिए गए डिवाइस पर इंस्ट्रुमेंटेशन टेस्ट पैकेज चलाता है
    • विकल्प:
      • package:Android टेस्ट ऐप्लिकेशन के मेनिफ़ेस्ट पैकेज का नाम, जिसे चलाना है.
      • class:चालू की जाने वाली टेस्ट क्लास का नाम.
      • method:टेस्ट करने के लिए इस्तेमाल किए जाने वाले तरीके का नाम.
  • क्लास का नाम: AndroidJUnitTest

    • फ़ंक्शन: यह एक ऐसा टेस्ट है जो दिए गए डिवाइस पर, android.support.test.runner.AndroidJUnitRunner का इस्तेमाल करके, इंस्ट्रूमेंटेशन टेस्ट पैकेज चलाता है. यह इंस्ट्रूमेंटेशन टेस्ट को चलाने का मुख्य तरीका है.