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

इस दस्तावेज़ में, मल्टी-डिवाइस बनाने के बारे में सिलसिलेवार निर्देश दिए गए हैं मॉड्यूल और मौजूदा सीमाओं की जानकारी होने पर उन्हें कॉल करता है.

सैंपल

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

मॉड्यूल का स्रोत यहां है पैकेज/मॉड्यूल/वाई-फ़ाई/टेस्ट/होस्टसाइडटेस्ट/मल्टीडिवाइस/टेस्ट/वेयर/.

हमने उदाहरण पर ज़्यादा से ज़्यादा टिप्पणियां दी हैं.

पहला चरण: मॉड्यूल फ़ोल्डर बनाना

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

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

दूसरा चरण: टेस्ट तैयार करना

यहां पर अपने टेस्ट लॉजिक को लागू किया जाता है. यह इस बात पर निर्भर करता है कि जांच की जा रही है.

Mobly टेस्ट सोर्स बनाएं, जैसे: wifi_aware_test.py.

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

एक Android.bp फ़ाइल जोड़ें पैकेज/मॉड्यूल/वाई-फ़ाई/टेस्ट/hostsidetests/multidevices/test/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",
    ],
}

डेटा फ़ील्ड के साथ टेस्ट के लिए स्निपेट तय करें. डेटा फ़ील्ड में बाइनरी का पता लगाया जा सकता है और उसे ATest या लगातार एक्ज़ीक्यूशन करें.

Mobly बंडल किए गए स्निपेट, Android में यहां उपलब्ध हैं: External/mobly-bundled-स्निपेट/.

ज़रूरी नहीं: कस्टम स्निपेट बनाना

कई तरह के डिवाइस वाले कुछ मॉड्यूल के लिए, कस्टम Mobly स्निपेट की ज़रूरत हो सकती है. सैंपल टेस्ट इसमें वाई-फ़ाई-अवेयर स्निपेट शामिल है पैकेज/मॉड्यूल/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java, जिसे Mobly Snippet Lib की मदद से बनाया गया है. यह Android में इस प्लैटफ़ॉर्म पर उपलब्ध है: external/mobly-snippet-lib/ भी शामिल है.

स्निपेट को 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",
    ],
}

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

एक AndroidTest.xml फ़ाइल जोड़ें: पैकेज/मॉड्यूल/वाई-फ़ाई/टेस्ट/hostsidetests/multidevices/test/aware/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 तय करें. यह मिलीसेकंड में है और पूरे Python बाइनरी एक्ज़ीक्यूशन पर लागू होता है (सभी टेस्ट केस एक साथ). यह इसलिए ज़रूरी है, ताकि कुछ मामलों में टेस्ट केस हमेशा के लिए न रहें.
  • हर device टैग में, हर डिवाइस पर एक अलग सेटअप हो सकता है, जिसे Mobly कहते हैं कॉन्फ़िगरेशन में वे एक्सएमएल में बताए गए क्रम में ही मिलेंगे.

स्निपेट apk से मिलता-जुलता इंस्टॉल करना:

  • शुरुआती POC को अपडेट कर दिया गया है, ताकि इसकी मदद से स्निपेट apks इंस्टॉल किए जा सकें कवरेज टीम से बातचीत की वजह से target_तैयार होने का मतलब: यह पक्का करने के लिए कि कवरेज के मेज़रमेंट को बहुत जल्दी नहीं मिटाया जाता. इन्हें Harness की मदद से अनइंस्टॉल किया जाता है Python बाइनरी में टेस्ट कोड इस्तेमाल करने से बेहतर गारंटी मिलती है समय का.

पांचवां चरण: स्थानीय तौर पर टेस्ट करें: atest

फ़िलहाल, मल्टी-डिवाइस टेस्ट सिर्फ़ फ़िज़िकल डिवाइसों पर किए जाते हैं. दौड़ने से पहले के लिए, पुष्टि करें कि आपके टेस्ट डिवाइस ठीक से काम कर रहे हैं. adb devices निर्देश से, कनेक्ट किए गए डिवाइसों की सूची मिलेगी. अगर सूची में टेस्ट करने के लिए नहीं बनाए गए डिवाइस, -s का इस्तेमाल करके टेस्ट करने के लिए डिवाइसों की जानकारी दें फ़्लैग करें.

वाई-फ़ाई टेस्ट करने के लिए, पक्का करें कि फ़ैक्ट्री रीसेट करने के बाद, डिवाइसों के लिए वाई-फ़ाई चालू हो.

इस टेस्ट का इस्तेमाल करके, स्थानीय तौर पर टेस्ट किया जा सकता है:

$ atest CtsWifiAwareTestCases

आपको टेस्ट में खास जानकारी वाले हेडिंग में इस्तेमाल किए गए डिवाइसों की संख्या देखनी चाहिए आउटपुट, जैसे कि Test executed with 2 device(s).

समस्या का हल

अगर ऐप्लिकेशन को इन वजहों से टेस्ट नहीं हो पाता है:

Virtualenv गड़बड़ी

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

कृपया पक्का करें कि virtualenv आपके PATH में है. "~/.local/bin" जोड़ना PATH को होना चाहिए इसे ठीक करें. अगर Virtualenv इंस्टॉल नहीं है, तो यहां जाएं: https://virtualenv.pypa.io/en/latest/installation.html

कम से कम 2 कंट्रोलर ऑब्जेक्ट मिलने की उम्मीद है, एक मिला है

टेस्ट मॉड्यूल कई डिवाइसों पर काम करते हैं या सिर्फ़ एक डिवाइस पर. इस तरह के मॉड्यूल में मिले-जुले-मॉड्यूल. अगर एक से ज़्यादा डिवाइसों के मॉड्यूल को तो आपको यह गड़बड़ी दिखाई देगी:

Expected to get at least 2 controller objects, got 1

मॉड्यूल को मल्टी-डिवाइस मोड में चलाने से समस्या हल हो जाएगी.

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