يقدّم هذا المستند نظرة عامة على إطار عمل اختبارات SDV ويرشدك إلى كيفية إعداد الاختبارات وضبطها وتنفيذها. استخدِم إطار عمل اختبار SDV لإجراء اختبار شامل. تستند الأداة إلى Mobly، وتكتب الاختبارات بلغة Python.
إعداد البيئة
يفترض هذا المستند أنّك قد أعددت محطة العمل الخاصة بك لاستخدام ميزة "التصميم الذي يحافظ على الخصوصية". لتشغيل اختبارات Framework، ثبِّت virtualenv.
متطلبات Python
الطريقة المقترَحة لإدارة التبعيات في Android هي تجميع الاختبارات وPython والتبعيات الخاصة بهما في ملف تنفيذي باستخدام إعدادات الإصدار. يجب اتّباع هذا النهج في مستودع اختبارات SDV.
توفّر مكتبة SDV Test Framework هذه الموارد التابعة تلقائيًا:
moblyabsl-pyمطلوبة لاستخدام تحديد المَعلمات في الاختبارات.pexpectمطلوبة لوظيفة الأوامر التفاعلية.ptyprocessمطلوبة لوظيفة الأوامر التفاعلية.
إذا كنت بحاجة إلى عناصر تابعة خاصة بالاختبار، أدرِجها في ملف الاختبار Android.bp.
python_test_host {
…
libs: [
"<DEPENDENCY1",
"<DEPENDENCY2",
…
],
…
}
أنواع اختبارات النظام
يمكنك إنشاء اختبارات النظام باستخدام إطار عمل اختبار SDV. يفرّق إطار العمل بين الأنواع التالية. تصنيف الاختبارات بشكل صحيح:
- الاختبارات النموذجية: نفِّذ خدمات عيّنات SDV وتأكَّد من أنّ النتيجة تتطابق مع الناتج المتوقّع.
- اختبارات شاملة: لا تستخدِم خدمات عيّنات SDV.
- الاختبارات الطويلة الأمد: مصمَّمة لفترات تنفيذ ممتدة.
- اختبارات الأداء: استخدِم مكتبة
perfetto. - اختبارات الأجهزة: تم تصميمها ليتم تنفيذها حصريًا على جهاز فعلي، وليس في Cuttlefish (CF).
إنشاء اختبار
يجب أن تكون جميع الاختبارات المكتوبة باستخدام إطار العمل في مستودع الاختبار. يعتمد الموقع الجغرافي الدقيق للاختبار على نوعه.
إعداد اختبار
اضبط جميع الاختبارات ليتم تشغيلها باستخدام كل من atest وCATBox.
ضبط atest
يوفّر إطار العمل نماذج لاختبارات جهاز افتراضي واحد وجهازَين افتراضيَّين وثلاثة أجهزة افتراضية. أضِف ما يلي إلى ملف Android.bp:
One VM
python_test_host {
...
test_config_template: ":sdv_one_device",
}
جهازان افتراضيان
python_test_host {
...
test_config_template: ":sdv_two_devices",
}
ثلاث آلات افتراضية
python_test_host {
...
test_config_template: ":sdv_three_devices",
}
يكون النموذج التلقائي كافيًا لمعظم الاختبارات. تجنَّب إنشاء إعدادات مخصّصة ما لم يكن هناك سبب مقنع.
تعديل المهلة التلقائية
يجب أن يكون المهلة التلقائية كافية لتنفيذ الاختبارات محليًا.
إذا تعذّر إجراء الاختبار على نظامك المحلي بسبب انتهاء المهلة، ننصحك بتقسيمه إلى اختبارات مختلفة. يمكن أن تتسبّب الاختبارات الطويلة جدًا التي تتضمّن العديد من حالات الاختبار في حدوث مؤثِّر سلبي في التنفيذ.
إذا كان عليك ضبط مهلة أطول من المهلة التلقائية، يُرجى مواصلة القراءة.
تجاوز المهلة التلقائية
لا يتيح إطار العمل توسيع النموذج لتنفيذ atest.
لذلك، استخدِم النماذج المتوفّرة التي توفّر مهلة أطول.
اختبار طويل لجهاز افتراضي واحد
python_test_host {
...
test_config_template: ":sdv_one_device_long_test",
}
اختبار طويل على جهازَين افتراضيَين
python_test_host {
...
test_config_template: ":sdv_two_devices_long_test",
}
أضِف تعليقًا يوضّح بوضوح الغرض من استخدام هذا النموذج ويوضّح سبب ضرورة تمديد الوقت (على سبيل المثال، إذا كان الاختبار يتطلّب تنزيل عنصر يستغرق وقتًا محدّدًا).
إرسال الملفات إلى جهاز
توضِّح الخطوات التالية كيفية إرسال الملفات إلى جهاز لإجراء atest
عمليات الضبط.
إرسال الملفات إلى جهاز
لا يتيح إطار العمل توسيع النموذج لتنفيذ atest.
لذلك، عليك إنشاء ملف AndroidTest.xml يحلّ محل النموذج التلقائي بالكامل ويتضمّن خيارات target_preparer المناسبة للأجهزة.
انسخ محتوى النموذج:
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
عدِّل
{MODULE}باسم وحدة الاختبار.أضِف حساب
com.android.tradefed.targetprep.PushFilePreparerإلى كل جهاز.
<device name="device1">
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push-file" key="<FILE_NAME>" value="<REMOTE_FILE_PATH>" />
</target_preparer>
</device>
ضبط CATBox
لتشغيل الاختبار كمجموعة، يجب توفُّر إعداد CATBox.
أنشئ ملف إعداد جديدًا في
libraries/sdv/sdv_catbox/res/config/واتّبِع اصطلاحات التسمية التالية:- اختبار تجريبي:
sdv-sample-<NAME>-test.xml - اختبار شامل:
sdv-e2e-<NAME>-test.xml - اختبار طويل الأمد:
sdv-long-running-<NAME>-test.xml - اختبار الأداء:
sdv-performance-<NAME>-test.xml - اختبار الأجهزة:
sdv-hw-<NAME>-test.xml
- اختبار تجريبي:
أضِف المعلومات المناسبة استنادًا إلى نوع الاختبار:
إعدادات اختبار جهاز افتراضي واحد
<configuration description="SDV <NAME> Test">
<!-- Template for Device Configuration -->
<template-include name="device-config" default="sdv-device-config/one-device" />
<!-- Plan. Use the same name as the file name -->
<option name="plan" value="<CONFIG_FILE_NAME>"/>
<!-- Test: mobly-par-file-name should match the module name -->
<option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>
إعدادات اختبار جهازَين افتراضيَين
<configuration description="SDV <NAME> Test">
<!-- Template for Device Configuration -->
<template-include name="device-config" default="sdv-device-config/two-devices" />
<!-- Plan. Use the same name as the file name -->
<option name="plan" value="<CONFIG_FILE_NAME>"/>
<!-- Test: mobly-par-file-name should match the module name -->
<option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>
إعدادات اختبار ثلاث آلات افتراضية
<!-- Copyright 2025 Google LLC -->
<configuration description="SDV <NAME> Test">
<!-- Template for Device Configuration -->
<template-include name="device-config" default="sdv-device-config/three-devices" />
<!-- Plan. Use the same name as the file name -->
<option name="plan" value="<CONFIG_FILE_NAME>"/>
<!-- Test: mobly-par-file-name should match the module name -->
<option name="mobly-host:mobly-par-file-name" value="<ModuleName>" />
</configuration>
يكون النموذج التلقائي كافيًا لمعظم الاختبارات. تجنَّب إنشاء إعدادات مخصّصة ما لم يكن هناك سبب مقنع.
تعديل المهلة التلقائية
إذا لم يكن المهلة التلقائية كافية لاختبارك، يمكنك تجاهلها.
تجاوز المهلة التلقائية
لإلغاء المهلة التلقائية، أضِف ما يلي إلى نهاية ملف الإعداد. يجب أن تبلغ مهلة الاختبارات الطويلة 10 دقائق كحد أقصى.
<!-- Long Test - 10 minutes timeout: <REASON> -->
<option name="mobly-host:mobly-test-timeout" value="600000" />
إرسال الملفات إلى جهاز
يوضّح القسم التالي كيفية إرسال الملفات إلى جهاز عند إعداد CATBox.
إرسال الملفات إلى جهاز
لدفع الملفات إلى الجهاز المعنيّ، أضِف الإعداد التالي بعد الخيار plan:
<!-- Automatically pushes config file to device-->
<device name="device1">
<target_preparer class="com.android.tradefed.targetprep.PushFilePreparer">
<option name="cleanup" value="true" />
<option name="push-file"
key="<FILE_NAME>"
value="<REMOTE_FILE_PATH>"
/>
</target_preparer>
</device>
إذا كنت بحاجة إلى الملفات على كل جهاز، أضِف إعدادات كل جهاز (على سبيل المثال، name=device1 وname=device2).
تنفيذ الاختبار
تفترض هذه التعليمات أنّك أكملت إعداد بيئة SDV عاملة.
إعداد البيئة
لا يبدأ إطار العمل مثيلات "الجهاز الافتراضي على السحابة الإلكترونية" (CVD)، لذا عليك بدءها قبل تشغيل الاختبارات.
إعداد البيئة وإطلاق استهداف SDV:
. build/envsetup.sh lunch <TARGET>ابدأ تشغيل أول مثيل من "الجهاز الافتراضي على السحابة الإلكترونية" (CVD):
cvd create --config=sdv_core_instance1ابدأ مثيل الجهاز الافتراضي الثاني على السحابة الإلكترونية (CVD) (لإجراء اختبارات على أجهزة افتراضية متعددة):
cvd create --config=sdv_core_instance2ابدأ تشغيل مثيل الجهاز الافتراضي الثالث على السحابة الإلكترونية (CVD) (لإجراء اختبارات على أجهزة افتراضية متعددة):
cvd create --config=sdv_core_instance3
تشغيل atest
atest <TestModuleName>
تشغيل CATBox
تفترض هذه الأوامر أنّك في الدليل الجذر للمستودع.
- إنشاء CATBox:
m catbox - (اختياري) عرض جميع خطط اختبار SDV المتاحة في CATBox:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-
إجراء اختبار:
إجراء اختبار جهاز افتراضي واحد
NOTIFY_AS_NATIVE=0.0.0.0:6520 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520
إجراء اختبار جهازَين افتراضيَين
NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521
إجراء اختبار ثلاث آلات افتراضية
NOTIFY_AS_NATIVE=0.0.0.0:6520,0.0.0.0:6521,0.0.0.0:6522 out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed run commandAndExit TEST_PLAN_NAME --{device1}serial 0.0.0.0:6520 --{device2}serial 0.0.0.0:6521 --{device3}serial 0.0.0.0:6522