وحدات متعددة الأجهزة

يوفر هذا المستند إرشادات خطوة بخطوة حول كيفية إنشاء وحدات متعددة الأجهزة ويستدعي القيود الحالية عند معرفتها.

العينة

يتم توفير وحدة متعددة الأجهزة CTS متوافقة مع wifi. يرسل رسالة من جهاز واحد عبر شبكة wifi ويتحقق من استلام الجهاز الآخر لها.

مصدر الوحدة موجود في packages/modules/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 أو في التنفيذ المستمر.

تتوفر مقتطفات Mobly Bundled Snippets في Android على External/mobly-bundled-snippets/ .

اختياري: قم بإنشاء مقتطفات مخصصة

قد تتطلب بعض الوحدات متعددة الأجهزة مقتطفات Mobly مخصصة. يتضمن نموذج الاختبار مقتطفًا مدركًا لشبكة wifi في 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 وسيتم تثبيتها باستخدام النقطة.
  • يجب أن يتطابق mobly-par-file-name لـ MoblyBinaryHostTest مع اسم الوحدة كما في Android.bp.
  • قم بتحديد mobly-test-timeout للاختبار. يتم ذلك بالمللي ثانية وينطبق على التنفيذ الثنائي الكامل لبيثون (جميع حالات الاختبار معًا). يعد هذا ضروريًا لتجنب تعليق حالات الاختبار إلى الأبد في حالة حدوث بعض المشكلات.
  • يمكن أن تحتوي كل علامة device على إعداد مميز على كل جهاز، وسيستقبلها تكوين Mobly بنفس الترتيب المحدد في ملف XML.

ذات صلة بتثبيت snippet apk:

  • تم تحديث إثبات المفهوم (POC) الأولي لتثبيت مقتطفات APK عبر target_preparer بسبب المحادثة مع فريق التغطية: من أجل ضمان عدم حذف قياسات التغطية في وقت مبكر جدًا، فإن إلغاء التثبيت بواسطة Harness بدلاً من كود الاختبار في ثنائيات Python يقدم ضمانات أفضل من حيث التوقيت.

الخطوة 5: تشغيل الاختبار محليًا: atest

في الوقت الحالي، يتم تشغيل اختبارات الأجهزة المتعددة فقط على الأجهزة المادية. قبل إجراء الاختبار، تأكد من أن أجهزة الاختبار الخاصة بك في حالة مناسبة. يجب أن يقوم الأمر adb devices بالإبلاغ عن قائمة أجهزتك المتصلة. إذا كانت القائمة تحتوي على أجهزة غير مخصصة للاختبار، فحدد الأجهزة للاختبار باستخدام العلامة -s.

بالنسبة لاختبارات wifi، تأكد من تمكين wifi للأجهزة (بعد إعادة ضبط المصنع).

يمكنك إجراء الاختبار محليًا باستخدام atest:

$ atest CtsWifiAwareTestCases

يجب أن تشاهد عدد الأجهزة المستخدمة في عنوان الملخص في اختبار الإخراج، وهو ما يشبه 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

من المتوقع الحصول على عنصري تحكم على الأقل، حصلت على 1

وحدات الاختبار إما أن تكون متعددة الأجهزة أو جهاز واحد، ولا توجد وحدات مختلطة. إذا حاولت تشغيل وحدة متعددة الأجهزة بدون أجهزة متعددة، فسوف ترى هذا الخطأ:

Expected to get at least 2 controller objects, got 1

سيؤدي تنفيذ الوحدة في وضع الأجهزة المتعددة إلى حل المشكلة.

بالنسبة إلى CTS: يمكنك استخدام التجزئة لتشغيله (على سبيل المثال: --shard-count 2) أو run cts-multidevces .