کتابخانه چارچوب آزمایش SDV

این صفحه نمای کلی از کتابخانه «چارچوب آزمایشی خودروی نرم‌افزارمحور» ارائه می‌دهد و شما را در راه‌اندازی، پیکربندی، و اجرای آزمایش‌ها راهنمایی می‌کند. از SDV Test Framework برای آزمایش سرتاسر استفاده کنید. این ابزار براساس Mobly ساخته شده است؛ شما آزمایش‌ها را در Python می‌نویسید.

انتخاب رویکرد آزمایش

قبل‌از نوشتن آزمایش، اجراکننده آزمایشی را انتخاب کنید که با دامنه درستی‌سنجی شما مطابقت داشته باشد:

محدوده آزمایش نوع واحد Soong ابزار اجرا زمان استفاده
آزمون‌های واحد بسته سرویس ‫rust_test،‏ rust_test_host، یا cc_test atest منطق کسب‌وکار، تبدیل داده، یا جعبه‌های کمکی Rust یا C++‎ مجزا را در میزبان یا یک ماشین مجازی (VM) تکی Cuttlefish درستی‌سنجی کنید.
آزمایش‌های سیستم سرتاسر و چند ماشین مجازی python_test_host (SDV Test Framework) atest یا CATBox سازمان‌دهی چرخه حیات بسته سرویس، ارتباط بین ماشین‌های مجازی، پل‌زنی SOME/IP، یا اهداف سخت‌افزاری را در یک تا سه ماشین مجازی درستی‌سنجی کنید.

راه‌اندازی محیط

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

وابستگی‌های Python

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

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

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

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

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

انواع آزمایش سیستم

بااستفاده از «چارچوب آزمایشی 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",
    }
    
  • Three VMs:

    python_test_host {
      ...
      test_config_template: ":sdv_three_devices",
    }
    

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

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

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

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

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

لغو زمان استراحت پیش‌فرض

این چارچوب از گسترش الگو برای اجرای atest پشتیبانی نمی‌کند. بنابراین، از الگوهای ارائه‌شده که مهلت طولانی‌تری دارند استفاده کنید.

  • یک آزمایش طولانی VM:

    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. اطلاعات مربوطه را براساس نوع آزمایش اضافه کنید:

  • یک پیکربندی آزمایشی VM:

    <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>
    
  • پیکربندی آزمایش دو VM:

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

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

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

اگر زمان استراحت پیش‌فرض برای آزمایش شما کافی نیست، می‌توانید آن را لغو کنید.

لغو زمان استراحت پیش‌فرض

برای لغو کردن زمان استراحت پیش‌فرض، موارد زیر را به انتهای فایل پیکربندی‌تان اضافه کنید. آزمایش‌های طولانی باید حداکثر زمان استراحت ۱۰ دقیقه‌ای داشته باشند.

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

آزمایشی اجرا کنید:

  • اجرای یک آزمایش VM:

    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
    
  • اجرای آزمایش سه VM:

    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