مكتبة SDV Test Framework

تقدّم هذه الصفحة نظرة عامة على مكتبة SDV Test Framework وتساعدك في إعداد الاختبارات وضبطها وتنفيذها. استخدِم SDV Test Framework لإجراء اختبار شامل. تستند الأداة إلى Mobly، وتكتب الاختبارات بلغة Python.

إعداد البيئة

تفترض هذه الصفحة أنّك قد أعددت محطة العمل لـ SDV. لتشغيل اختبارات Framework، ثبِّت virtualenv.

تبعيات Python

النهج المقترَح لإدارة التبعيات في Android هو تجميع الاختبارات وPython وتبعياتها كملف تنفيذي باستخدام إعدادات الإصدار. عليك اتّباع هذا النهج في مستودع اختبار SDV.

توفّر مكتبة SDV Test Framework هذه التبعيات تلقائيًا:

  • mobly
  • absl-py مطلوب لاستخدام تحديد المعلمات في الاختبارات.
  • pexpect مطلوب لوظيفة الأوامر التفاعلية.
  • ptyprocess مطلوب لوظيفة الأوامر التفاعلية.

إذا كنت بحاجة إلى تبعيات خاصة بالاختبار، أدرِجها في ملف Android.bp الخاص بالاختبار:

python_test_host {
    …
    libs: [
        "<DEPENDENCY1",
        "<DEPENDENCY2",
        …
    ],
    …
}

أنواع اختبارات النظام

يمكنك إنشاء اختبارات النظام باستخدام SDV Test Framework. يميّز إطار العمل بين الأنواع التالية. صنِّف الاختبارات بشكل صحيح:

  • الاختبارات النموذجية: نفِّذ خدمات SDV النموذجية وتأكَّد من أنّ النتيجة تطابق الناتج المتوقّع.
  • الاختبارات الشاملة: لا تستخدِم خدمات SDV النموذجية.
  • الاختبارات الطويلة: مصمّمة لفترات تنفيذ طويلة.
  • اختبارات الأداء: استخدِم مكتبة perfetto.
  • اختبارات الأجهزة: مصمّمة ليتم تنفيذها حصريًا على جهاز فعلي، وليس في Cuttlefish (CF).

إنشاء اختبار

يجب أن تكون جميع الاختبارات المكتوبة باستخدام إطار العمل موجودة في مستودع الاختبار. يعتمد الموقع الجغرافي الدقيق للاختبار على نوعه.

ضبط اختبار

اضبط جميع الاختبارات لتشغيلها باستخدام كل من atest وCATBox.

ضبط atest

يوفّر إطار العمل نماذج لاختبارات جهاز افتراضي واحد وجهازَين وثلاثة أجهزة افتراضية. أضِف ما يلي إلى ملف Android.bp:

جهاز افتراضي واحد

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 المقابلة للأجهزة.

  1. انسخ محتويات النموذج:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. عدِّل {MODULE} باسم وحدة الاختبار.

  3. أضِف 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.

  1. أنشئ ملف إعداد جديدًا في 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
  2. أضِف المعلومات المقابلة استنادًا إلى نوع الاختبار:

إعدادات اختبار لجهاز افتراضي واحد

<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)، لذا عليك بدءها قبل تشغيل الاختبارات.

  1. أعِدّ البيئة وشغِّل هدف SDV:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. ابدأ مثيل CVD الأول:

    cvd create --config=sdv_core_instance1
    
  3. ابدأ مثيل CVD الثاني (للاختبارات المتعدّدة الأجهزة الافتراضية):

    cvd create --config=sdv_core_instance2
    
  4. ابدأ مثيل CVD الثالث (للاختبارات المتعدّدة الأجهزة الافتراضية):

    cvd create --config=sdv_core_instance3
    

تشغيل atest

atest <TestModuleName>

تشغيل CATBox

تفترض هذه الأوامر أنّك في الدليل الجذري للمستودع.

  1. أنشئ CATBox: m catbox
  2. (اختياري) اطّلِع على جميع خطط اختبار 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