مكتبة SDV Test Framework

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

اختيار نهج الاختبار

قبل كتابة اختبار، اختَر مشغّل الاختبار الذي يتطابق مع نطاق التحقّق:

نطاق الاختبار نوع وحدة Soong أداة التنفيذ حالات الاستخدام
اختبارات وحدة حزمة الخدمة ‫"rust_test" أو "rust_test_host" أو "cc_test" atest التحقّق من منطق النشاط التجاري أو عمليات تحويل البيانات أو حِزم المساعدة المعزولة في Rust أو C++‎ على المضيف أو على جهاز افتراضي واحد (VM) من Cuttlefish
اختبارات النظام الشاملة واختبارات الأجهزة الافتراضية المتعددة ‫python_test_host (إطار عمل اختبار SDV) atest أو CATBox يمكنك التحقّق من تنسيق مراحل نشاط حزمة الخدمات أو الاتصال بين الأجهزة الافتراضية أو ربط SOME/IP أو أهداف الأجهزة على مستوى جهاز افتراضي واحد إلى ثلاثة أجهزة افتراضية.

إعداد البيئة

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

تبعيات Python

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

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

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

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

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

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

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

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

إنشاء اختبار

يجب أن تكون جميع الاختبارات المكتوبة باستخدام إطار العمل موجودة في مستودع الاختبار. يعتمد الموقع الدقيق للاختبار على نوعه. للاطّلاع على مسارات الدليل ونماذج فئات اختبار Python وقواعد Android.bp وإرشادات ترميز Mobly، يُرجى الاطّلاع على إنشاء اختبار نظام SDV.

ضبط إعدادات الاختبار

اضبط جميع الاختبارات ليتم تشغيلها باستخدام كل من 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
    • اختبار E2E: 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>
    
  • إعدادات اختبار الأجهزة الافتراضية الثلاثة:

    <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 تعمل بشكل صحيح.

إعداد البيئة

لا يبدأ إطار العمل مثيلات جهاز Cloud Virtual Device (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