يوفّر هذا المستند تعليمات مفصّلة حول كيفية إنشاء وحدات لعدة أجهزة ويوضّح القيود الحالية عند معرفة ذلك.
العيّنة
يتم توفير وحدة متعددة الأجهزة متوافقة مع CTS ومزودة بتقنية Wi-Fi. يُرسِل الجهاز رسالة من أحد الأجهزة عبر شبكة 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 في Android على الرابط external/mobly-bundled-snippets/.
اختياري: إنشاء مقتطفات مخصّصة
قد تتطلّب بعض الوحدات المخصّصة للأجهزة المتعددة مقتطفات Mobly مخصّصة. يتضمّن نموذج الاختبار مقتطفًا متوافقًا مع شبكة Wi-Fi فيملف: 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-name
forMoblyBinaryHostTest
مع اسم الوحدة كما هو الحال في Android.bp. - حدِّد
mobly-test-timeout
للاختبار. يتم قياسه بالمللي ثانية ويطبق على تنفيذ ملف بايثون الثنائي بالكامل (جميع حالات الاختبار معًا). هذا الإجراء مطلوب لتجنُّب تعليق حالات الاختبار إلى الأبد في حال حدوث بعض المشاكل. - يمكن أن تحتوي كل علامة
device
على إعدادات مختلفة على كل جهاز، وستتلقّاها علامة Mobly config بالترتيب نفسه المحدّد في ملف XML.
المعلومات ذات الصلة بتركيب APK المقتطف:
- تم تعديل الإصدار الأولي من الدليل الإرشادي لتثبيت حِزم apk للمقاطع من خلال target_preparer بسبب محادثة مع فريق التغطية: لضمان عدم حذف قياسات التغطية مبكرًا جدًا، يقدّم إلغاء التثبيت من خلال Harness بدلاً من رمز الاختبار في الثنائيات Python ضمانات أفضل من حيث التوقيت.
الخطوة 5: إجراء الاختبار على الجهاز: atest
لا يتم حاليًا إجراء اختبارات الأجهزة المتعددة إلا على الأجهزة المادية. قبل إجراء الاختبار، تأكَّد من أنّ الأجهزة الاختبارية في الحالة المناسبة. من المفترض أن يعرض الأمر adb
devices
قائمة أجهزتك المتصلة. إذا كانت القائمة تحتوي على
أجهزة غير مخصّصة للاختبار، حدِّد الأجهزة المخصّصة للاختبار باستخدام العلامة -s.
بالنسبة إلى اختبارات شبكة Wi-Fi، تأكَّد من تفعيل شبكة Wi-Fi على الأجهزة (بعد إعادة ضبطها على الإعدادات الأصلية).
يمكنك إجراء الاختبار محليًا باستخدام 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
مضمّن في 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
.