मल्टी-डिवाइस मॉड्यूल

यह दस्तावेज़ मल्टी-डिवाइस मॉड्यूल बनाने के बारे में चरण-दर-चरण निर्देश प्रदान करता है और ज्ञात होने पर वर्तमान सीमाओं का उल्लेख करता है।

नमूना

एक सीटीएस वाईफाई-अवेयर मल्टी-डिवाइस मॉड्यूल प्रदान किया गया है। यह एक डिवाइस से वाईफाई पर एक संदेश भेजता है और सत्यापित करता है कि दूसरा डिवाइस इसे प्राप्त करता है।

मॉड्यूल का स्रोत packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/ पर है।

हमने उदाहरण को उतनी ही टिप्पणियों के साथ एनोटेट किया है जितना हमें लगता है कि यह उपयोगी है।

चरण 1: मॉड्यूल फ़ोल्डर बनाएं

आपके मल्टी-डिवाइसेस मॉड्यूल के लिए उस सुइट प्रोजेक्ट में एक फ़ोल्डर बनाने की अनुशंसा की जाती है जिससे वह संबंधित है। उदाहरण के लिए: cts/hostsidetests/multidevices/ । हम इसकी अनुशंसा करते हैं ताकि सभी मल्टी-डिवाइस मॉड्यूल कम से कम शुरुआत में व्यवस्थित रहें जिससे उदाहरण खोजना आसान हो जाएगा।

इस मॉड्यूल की सभी फ़ाइलें उनके अपने मॉड्यूल फ़ोल्डर के अंतर्गत रखी जानी चाहिए। उदाहरण के लिए: wifi_aware

चरण 2: परीक्षण बनाएं

यहीं पर आप अपना परीक्षण तर्क लागू करते हैं। यह अत्यधिक इस बात पर निर्भर है कि क्या परीक्षण किया जा रहा है।

Mobly परीक्षण स्रोत बनाएं, जैसे: wifi_aware_test.py

चरण 3: बिल्ड फ़ाइल बनाएं: Android.bp

packages/modules/Wifi/tests/hostsidetests/multidevices/test/Android.bp जैसी एक Android.bp फ़ाइल जोड़ें। एक Python_test_host मॉड्यूल को परिभाषित करें, जैसे:

python_test_host {
    name: "CtsWifiAwareTestCases",
    main: "wifi_aware_test.py",
    srcs: ["wifi_aware_test.py"],
    test_suites: [
        "cts",
        "general-tests",
    ],
    test_options: {
        unit_test: false,
    },
    data: [
          // Package the snippet with the mobly test
        ":wifi_aware_snippet",
    ],
}

डेटा फ़ील्ड के साथ परीक्षण के लिए स्निपेट निर्दिष्ट करें, जो बाइनरी के साथ पैक किया जाएगा और एटेस्ट द्वारा या सतत निष्पादन में परीक्षण में स्थित और स्थापित किया जा सकता है।

मोबली बंडल स्निपेट एंड्रॉइड में external/mobly-bundled-snippets/ पर उपलब्ध हैं।

वैकल्पिक: कस्टम स्निपेट बनाएं

कुछ मल्टी-डिवाइस मॉड्यूल को कस्टम मोबली स्निपेट की आवश्यकता हो सकती है। नमूना परीक्षण में packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java पर एक वाईफाई-अवेयर स्निपेट शामिल है, जो मोबली स्निपेट लिब के साथ बनाया गया है, जो एंड्रॉइड में उपलब्ध है: बाहरी /मोब्ली-स्निपेट-लिब/

स्निपेट को मानक इंस्ट्रूमेंटेशन की तरह Android.bp में android_test नियम के साथ परिभाषित किया जाना चाहिए:

android_test {
    name: "wifi_aware_snippet",
    sdk_version: "current",
    srcs: [
        "CallbackUtils.java",
        "WifiAwareSnippet.java",
    ],
    manifest: "AndroidManifest.xml",
    static_libs: [
        "androidx.test.runner",
        "guava",
        "mobly-snippet-lib",
    ],
}

चरण 4: मॉड्यूल कॉन्फ़िगरेशन बनाएं: AndroidTest.xml

packages/modules/Wifi/tests/hostsidetests/multidevices/test/aware/AndroidTest.xml जैसी AndroidTest.xml फ़ाइल जोड़ें। इस परीक्षण कॉन्फ़िगरेशन में, आपको परीक्षण के लिए दो डिवाइस निर्दिष्ट करने की आवश्यकता है, जैसे:

<configuration description="Config for CTS Wifi Aware test cases">
    <option name="test-suite-tag" value="cts" />
    <option name="config-descriptor:metadata" key="component" value="wifi" />
    <option name="config-descriptor:metadata" key="parameter" value="not_instant_app" />
    <option name="config-descriptor:metadata" key="parameter" value="not_multi_abi" />
    <option name="config-descriptor:metadata" key="parameter" value="not_secondary_user" />

    <device name="device1">
        <!-- For coverage to work, the APK should not be uninstalled until after coverage is pulled.
             So it's a lot easier to install APKs outside the python code.
        -->
        <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
            <option name="test-file-name" value="wifi_aware_snippet.apk" />
        </target_preparer>
        <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
            <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
            <option name="run-command" value="wm dismiss-keyguard" />
        </target_preparer>
        <target_preparer class="com.android.tradefed.targetprep.PythonVirtualenvPreparer">
          <!-- Any python dependencies can be specified and will be installed with pip -->
          <option name="dep-module" value="mobly" />
        </target_preparer>
    </device>
    <device name="device2">
        <target_preparer class="com.android.tradefed.targetprep.suite.SuiteApkInstaller">
            <option name="test-file-name" value="wifi_aware_snippet.apk" />
        </target_preparer>
        <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
            <option name="run-command" value="input keyevent KEYCODE_WAKEUP" />
            <option name="run-command" value="wm dismiss-keyguard" />
        </target_preparer>
    </device>

    <test class="com.android.tradefed.testtype.mobly.MoblyBinaryHostTest">
      <!-- The mobly-par-file-name should match the module name -->
      <option name="mobly-par-file-name" value="CtsWifiAwareTestCases" />
      <!-- Timeout limit in milliseconds for all test cases of the python binary -->
      <option name="mobly-test-timeout" value="60000" />
    </test>
</configuration>

ध्यान दें कि:

  • इस नमूना परीक्षण की निर्भरता Mobly पर है। PythonVirtualenvPreparer के लिए कोई भी निर्भरता निर्दिष्ट की जा सकती है और इसे पाइप के साथ स्थापित किया जाएगा।
  • MoblyBinaryHostTest के लिए mobly-par-file-name Android.bp की तरह मॉड्यूल नाम से मेल खाना चाहिए।
  • परीक्षण के लिए mobly-test-timeout निर्दिष्ट करें। यह मिलीसेकंड में है और संपूर्ण पायथन बाइनरी निष्पादन (सभी परीक्षण मामलों को एक साथ) पर लागू होता है। कुछ मुद्दों की स्थिति में परीक्षण मामलों को हमेशा के लिए लटकने से बचाने के लिए इसकी आवश्यकता है।
  • प्रत्येक device टैग में प्रत्येक डिवाइस पर एक अलग सेटअप हो सकता है, Mobly कॉन्फिगरेशन उन्हें उसी क्रम में प्राप्त करेगा जैसा कि XML में निर्दिष्ट है।

स्निपेट एपीके इंस्टॉलेशन से संबंधित:

  • कवरेज टीम के साथ बातचीत के कारण प्रारंभिक पीओसी को target_preparer के माध्यम से स्निपेट एपीके इंस्टॉल करने के लिए अद्यतन किया गया है: यह सुनिश्चित करने के लिए कि कवरेज माप बहुत जल्दी हटा नहीं दिए जाते हैं, पायथन बायनेरिज़ में परीक्षण कोड के बजाय हार्नेस द्वारा अनइंस्टॉल करना समय के संदर्भ में बेहतर गारंटी प्रदान करता है।

चरण 5: स्थानीय स्तर पर परीक्षण चलाएँ: atest

वर्तमान में, मल्टी-डिवाइस परीक्षण केवल भौतिक उपकरणों पर चलते हैं। परीक्षण चलाने से पहले, सत्यापित करें कि आपके परीक्षण उपकरण उचित स्थिति में हैं। कमांड adb devices आपके कनेक्टेड डिवाइसों की सूची रिपोर्ट करनी चाहिए। यदि सूची में ऐसे उपकरण शामिल हैं जो परीक्षण के लिए नहीं हैं, तो -s ध्वज का उपयोग करके परीक्षण के लिए उपकरण निर्दिष्ट करें।

वाईफ़ाई परीक्षणों के लिए, सुनिश्चित करें कि डिवाइस के लिए वाईफ़ाई सक्षम है (फ़ैक्टरी रीसेट के बाद)।

आप परीक्षण को स्थानीय स्तर पर atest के साथ चला सकते हैं:

$ atest CtsWifiAwareTestCases

आपको अटेस्ट आउटपुट में सारांश शीर्षक में उपयोग किए गए उपकरणों की संख्या देखनी चाहिए, Test executed with 2 device(s) जैसा कुछ।

समस्या निवारण

यदि स्थानीय स्तर पर चलते समय परीक्षण विफल हो जाता है:

वर्चुअलएन्व त्रुटि

java.io.IOException: Cannot run program
"virtualenv": error=2, No such file or directory

कृपया सुनिश्चित करें कि virtualenv आपके PATH में है। PATH में "~/.local/bin" जोड़ने से यह ठीक हो जाएगा। यदि वर्चुअलएन्व स्थापित नहीं है तो अनुसरण करें: https://virtualenv.pypa.io/en/latest/installation.html

कम से कम 2 नियंत्रक वस्तुएँ मिलने की उम्मीद थी, 1 मिली

परीक्षण मॉड्यूल या तो मल्टी-डिवाइस या एकल-डिवाइस हैं, कोई मिश्रित-मॉड्यूल नहीं हैं। यदि आप एकाधिक डिवाइस के बिना मल्टी-डिवाइस मॉड्यूल चलाने का प्रयास करते हैं तो आपको यह त्रुटि दिखाई देगी:

Expected to get at least 2 controller objects, got 1

मॉड्यूल को मल्टी-डिवाइस मोड में निष्पादित करने से समस्या हल हो जाएगी।

CTS के लिए: आप इसे ट्रिगर करने के लिए शार्डिंग का उपयोग कर सकते हैं (उदाहरण के लिए: --shard-count 2) या run cts-multidevces