چارچوب آزمون SDV

این سند مروری بر چارچوب تست SDV ارائه می‌دهد و شما را در تنظیم، پیکربندی و اجرای تست‌ها راهنمایی می‌کند. از چارچوب تست SDV برای تست سرتاسری استفاده کنید. این ابزار بر اساس Mobly ساخته شده است؛ شما تست‌ها را در پایتون می‌نویسید.

محیط را تنظیم کنید

این سند فرض می‌کند که شما قبلاً ایستگاه کاری خود را برای SDV راه‌اندازی کرده‌اید. برای اجرای تست‌های Framework، virtualenv را نصب کنید.

وابستگی‌های پایتون

رویکرد پیشنهادی برای مدیریت وابستگی‌ها در اندروید، بسته‌بندی تست‌ها، پایتون و وابستگی‌های آنها به عنوان یک فایل اجرایی با استفاده از پیکربندی ساخت است. شما باید این رویکرد را در مخزن تست SDV دنبال کنید.

کتابخانه SDV Test Framework به طور پیش‌فرض این وابستگی‌ها را ارائه می‌دهد:

  • mobly
  • absl-py برای استفاده از پارامترسازی در تست‌ها الزامی است.
  • pexpect برای عملکرد دستورات تعاملی مورد نیاز است.
  • ptyprocess برای عملکرد دستورات تعاملی مورد نیاز است.

اگر به وابستگی‌های مخصوص تست نیاز دارید، آن‌ها را در فایل Android.bp تست قرار دهید.

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

انواع تست سیستم

شما با استفاده از چارچوب تست SDV تست‌های سیستمی ایجاد می‌کنید. این چارچوب بین انواع زیر تمایز قائل می‌شود. تست‌ها را به درستی دسته‌بندی کنید:

  • تست‌های نمونه: سرویس‌های نمونه SDV را اجرا کنید و تأیید کنید که نتیجه با خروجی مورد انتظار مطابقت دارد.
  • آزمون‌های E2E: از خدمات نمونه SDV استفاده نکنید.
  • تست‌های طولانی مدت: برای دوره‌های اجرای طولانی طراحی شده‌اند.
  • تست‌های عملکرد: از کتابخانه perfetto استفاده کنید.
  • تست‌های سخت‌افزاری: طوری طراحی شده‌اند که منحصراً روی یک دستگاه فیزیکی اجرا شوند، نه در یک Cuttlefish (CF).

ایجاد یک آزمون

تمام تست‌های نوشته شده با استفاده از این چارچوب باید در مخزن تست قرار گیرند. محل دقیق تست به نوع آن بستگی دارد.

پیکربندی یک آزمون

تمام تست‌ها را طوری پیکربندی کنید که با استفاده از atest و CATBox اجرا شوند.

پیکربندی atest

این چارچوب، قالب‌هایی برای تست‌های یک، دو و سه ماشین مجازی (VM) ارائه می‌دهد. موارد زیر را به فایل 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",
}

قالب پیش‌فرض برای اکثر تست‌ها کافی است. از ایجاد پیکربندی‌های سفارشی خودداری کنید، مگر اینکه دلیل قانع‌کننده‌ای وجود داشته باشد.

به‌روزرسانی زمان‌بندی پیش‌فرض

زمان انتظار پیش‌فرض باید برای اجرای تست‌ها به صورت محلی کافی باشد.

اگر تست شما به دلیل timeout به صورت محلی با شکست مواجه شد، تقسیم آن به تست‌های مختلف را در نظر بگیرید. تست‌های بسیار طولانی با موارد تست زیاد می‌توانند باعث ایجاد گلوگاه در اجرا شوند.

اگر باید زمان انتظار بیشتری نسبت به مقدار پیش‌فرض تنظیم کنید، ادامه مطلب را بخوانید.

لغو زمان انقضای پیش‌فرض

این چارچوب از گسترش الگو برای اجرای 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>

پیکربندی آزمایشی سه ماشین مجازی

<!-- 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 <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