ماژول های چند دستگاهی

این سند دستورالعمل‌های گام به گام در مورد نحوه ایجاد ماژول‌های چند دستگاهی را ارائه می‌کند و محدودیت‌های فعلی را زمانی که مشخص باشد، فراخوانی می‌کند.

مثال

یک ماژول چند دستگاهی CTS وای فای آگاه ارائه شده است. این پیام از یک دستگاه از طریق وای فای ارسال می کند و تأیید می کند که دستگاه دیگر آن را دریافت کرده است.

منبع ماژول در بسته‌ها/ماژول‌ها/Wifi/tests/hostsidetests/multidevices/test/aware/ است.

ما مثال را با نظراتی که فکر می کنیم مفید است، حاشیه نویسی کرده ایم.

مرحله 1: پوشه ماژول را ایجاد کنید

توصیه می شود در پروژه مجموعه ای که متعلق به آن است، یک پوشه برای ماژول چند دستگاه خود ایجاد کنید. به عنوان مثال: cts/hostsidetests/multidevices/ . ما این را توصیه می‌کنیم تا همه ماژول‌های چند دستگاه حداقل در ابتدا در کنار هم قرار گیرند که کشف نمونه‌ها را آسان‌تر می‌کند.

همه فایل های این ماژول باید در پوشه ماژول خودشان قرار بگیرند. به عنوان مثال: wifi_aware .

مرحله 2: تست را ایجاد کنید

اینجا جایی است که شما منطق تست خود را پیاده سازی می کنید. بستگی زیادی به آنچه در حال آزمایش است دارد.

منبع تست Mobly را ایجاد کنید، مانند: wifi_aware_test.py .

مرحله 3: فایل ساخت را ایجاد کنید: Android.bp

یک فایل Android.bp مانند packages/modules/Wifi/tests/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 یا در اجرای Continuous در تست قرار گرفته و نصب شوند.

Mobly Bundled Snippets در Android به آدرس external/mobly-bundled-snippets/ موجود است.

اختیاری: قطعه های سفارشی ایجاد کنید

برخی از ماژول‌های چند دستگاهی ممکن است به قطعه‌های سفارشی Mobly نیاز داشته باشند. آزمایش نمونه شامل یک قطعه از wifi-aware در packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java است که با Mobly Snippet Lib، موجود در Android در: خارجی ساخته شده است. /mobly-snippet-lib/ .

این قطعه باید با قانون android_test در Android.bp مانند ابزار دقیق استاندارد تعریف شود:

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

یک فایل AndroidTest.xml مانند packages/modules/Wifi/tests/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 مشخص کرد و با pip نصب می شود.
  • mobly-par-file-name برای MoblyBinaryHostTest باید مانند Android.bp با نام ماژول مطابقت داشته باشد.
  • برای آزمون یک mobly-test-timeout مشخص کنید. این در میلی ثانیه است و برای اجرای کامل باینری پایتون (همه موارد تست با هم) اعمال می شود. این برای جلوگیری از معلق ماندن کیس های آزمایشی برای همیشه در صورت بروز برخی مشکلات ضروری است.
  • هر تگ device می‌تواند شامل یک تنظیم مجزا در هر دستگاه باشد، پیکربندی Mobly آنها را به همان ترتیبی که در XML مشخص شده دریافت می‌کند.

مربوط به نصب اسنیپت apk:

  • به دلیل مکالمه با تیم Coverage، POC اولیه برای نصب apk های قطعه از طریق target_preparer به روز شده است: برای اطمینان از اینکه اندازه گیری های پوشش خیلی زود حذف نمی شوند، حذف نصب توسط Harness به جای کد آزمایشی در باینری های پایتون تضمین های بهتری از نظر زمان بندی ارائه می دهد.

مرحله 5: تست را به صورت محلی اجرا کنید: atest

در حال حاضر، آزمایش‌های چند دستگاهی فقط روی دستگاه‌های فیزیکی اجرا می‌شوند. قبل از اجرای آزمایش، بررسی کنید که دستگاه های آزمایشی شما در وضعیت مناسبی قرار دارند. دستور adb devices باید لیست دستگاه‌های متصل شما را گزارش کند. اگر لیست شامل دستگاه‌هایی است که برای آزمایش در نظر گرفته نشده‌اند، دستگاه‌های آزمایش را با استفاده از پرچم -s مشخص کنید.

برای تست های فای، مطمئن شوید که وای فای برای دستگاه ها فعال است (پس از تنظیم مجدد کارخانه).

شما می توانید تست را به صورت محلی با atest اجرا کنید:

$ atest CtsWifiAwareTestCases

شما باید تعداد دستگاه‌های استفاده شده در عنوان خلاصه را در خروجی atest ببینید، چیزی شبیه Test executed with 2 device(s) .

عیب یابی

اگر تست هنگام اجرای محلی به دلیل موارد زیر با شکست مواجه شود:

خطای Virtualenv

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

لطفاً مطمئن شوید virtualenv در مسیر شما قرار دارد. افزودن "~/.local/bin" به PATH باید آن را برطرف کند. اگر virtualenv نصب نشده است، دنبال کنید: 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 .