يقدّم هذا المستند تعليمات مفصَّلة حول كيفية إنشاء وحدات مصمّمة لأجهزة متعدّدة، ويشير إلى القيود الحالية عند توفّرها.
العينة
يتم توفير وحدة CTS wifi-aware مصمّمة لأجهزة متعدّدة. ويرسل رسالة من جهاز عبر شبكة Wi-Fi ويتحقّق من أنّ الجهاز الآخر يتلقّاها.
يمكن العثور على مصدر الوحدة في 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-aware على packages/modules/Wifi/tests/hostsidetests/multidevices/com.google.snippet.wifi/aware/WifiAwareSnippet.java، ويتم إنشاؤه باستخدام مكتبة Mobly Snippet Lib المتوفّرة على Android على: external/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-nameforMoblyBinaryHostTestمع اسم الوحدة كما هو وارد في ملف Android.bp. - يجب تحديد
mobly-test-timeoutللاختبار. ويتم قياسه بالمللي ثانية وينطبق على التنفيذ الكامل لملف Python الثنائي (جميع حالات الاختبار معًا). هذا الإجراء مطلوب لتجنُّب تعليق حالات الاختبار إلى الأبد في حال حدوث بعض المشاكل. - يمكن أن تحتوي كل علامة
deviceعلى إعداد مميز على كل جهاز، وستتلقّى أداة Mobly config هذه العلامات بالترتيب نفسه المحدّد في ملف XML.
في ما يلي معلومات ذات صلة بتثبيت حِزم APK الخاصة بالمقتطفات:
- تم تعديل النسخة الأولية من إثبات المفهوم لتثبيت حِزم APK الخاصة بالمقتطفات من خلال target_preparer بسبب المحادثة مع فريق Coverage: لضمان عدم حذف قياسات التغطية مبكرًا جدًا، يوفّر إلغاء التثبيت من خلال Harness بدلاً من رمز الاختبار في ملفات Python الثنائية ضمانات أفضل من حيث التوقيت.
الخطوة 5: تشغيل الاختبار محليًا: atest
في الوقت الحالي، لا يتم إجراء اختبارات الأجهزة المتعددة إلا على أجهزة فعلية. قبل إجراء الاختبار، تأكَّد من أنّ الأجهزة الاختبارية في الحالة المناسبة. يجب أن يعرض الأمر adb
devices قائمة الأجهزة المتصلة. إذا كانت القائمة تتضمّن أجهزة غير مخصّصة للاختبار، حدِّد الأجهزة التي تريد استخدامها في الاختبار باستخدام العلامة -s.
بالنسبة إلى اختبارات شبكة Wi-Fi، تأكَّد من تفعيل شبكة Wi-Fi على الأجهزة (بعد إعادة ضبطها على الإعدادات الأصلية).
يمكنك إجراء الاختبار محليًا باستخدام 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 مضمّن في PATH. يجب أن يؤدي إضافة "~/.local/bin" إلى PATH إلى حلّ المشكلة.
إذا لم يتم تثبيت virtualenv، اتّبِع الخطوات الواردة في: https://virtualenv.pypa.io/en/latest/installation.html
كان من المتوقّع الحصول على عنصرَي وحدة تحكّم على الأقل، ولكن تم الحصول على عنصر واحد
تكون وحدات الاختبار إما متعددة الأجهزة أو أحادية الجهاز، ولا توجد وحدات مختلطة. إذا حاولت تشغيل وحدة متعددة الأجهزة بدون أجهزة متعددة، سيظهر لك الخطأ التالي:
Expected to get at least 2 controller objects, got 1
سيؤدي تنفيذ الوحدة في وضع الأجهزة المتعددة إلى حل المشكلة.
بالنسبة إلى CTS، يمكنك استخدام التقسيم لتشغيله (على سبيل المثال: --shard-count 2)
أو run cts-multidevces.