SDV 測試架構程式庫

本頁面將概略介紹 SDV 測試架構程式庫,並引導您完成設定和執行測試。使用 SDV 測試架構進行端對端測試。這項工具以 Mobly 為基礎,您可以使用 Python 撰寫測試。

選擇測試方法

編寫測試前,請選擇符合驗證範圍的測試執行器:

測試範圍 Soong 模組類型 執行工具 使用時機
服務套件單元測試 「rust_test」、「rust_test_host」或「cc_test」 atest 在主機或單一 Cuttlefish 虛擬機器 (VM) 上,驗證獨立的 Rust 或 C++ 商業邏輯、資料轉換或輔助 Crate。
端對端和多 VM 系統測試 python_test_host (SDV 測試架構) atest 或 CATBox 驗證服務套件生命週期自動化調度管理、VM 間通訊、SOME/IP 橋接,或一到三個 VM 的硬體目標。

設定環境

本頁面假設您已為 SDV 設定工作站。如要執行架構測試,請安裝 virtualenv。

Python 依附元件

在 Android 中管理依附元件的建議做法,是使用建構設定,將測試、Python 及其依附元件封裝為可執行檔。在 SDV 測試存放區中,您必須採用這種做法。

SDV 測試架構程式庫預設會提供下列依附元件:

  • mobly
  • absl-py 必須在測試中使用參數化。
  • pexpect 互動式指令功能的必要權限。
  • ptyprocess 互動式指令功能的必要權限。

如果您需要測試專屬的依附元件,請將其納入測試的 Android.bp 檔案中:

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

系統測試類型

您可以使用 SDV 測試架構建立系統測試。架構會區分下列類型。正確分類測試:

  • 測試範例:執行 SDV 範例服務,並確認結果符合預期輸出內容。
  • 端對端測試:請勿使用 SDV 範例服務。
  • 長時間執行的測試:專為長時間執行而設計。
  • 效能測試:使用 perfetto 程式庫。
  • 硬體測試:專為在實體裝置上執行而設計,而非在 Cuttlefish (CF) 上執行。

建立測試

使用架構編寫的所有測試都必須位於測試存放區。測試的確切位置取決於其類型。如需目錄路徑、Python 測試類別範本、Android.bp 規則和 Mobly 編碼指南,請參閱「SDV 系統測試建立」。

設定測試

設定所有測試,使用 atest 和 CATBox 執行。

設定 atest

這個架構提供一、二和三個 VM 測試的範本。請將以下內容新增到 Android.bp 檔案中:

  • 一個 VM:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device",
    }
    
  • 兩個 VM:

    python_test_host {
      ...
      test_config_template: ":sdv_two_devices",
    }
    
  • 三個 VM:

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

預設範本足以應付大多數測試。除非有充分理由,否則請避免建立自訂設定。

更新預設逾時時間

預設逾時時間應足以在本機執行測試。

如果本機測試因逾時而失敗,請考慮將測試分割成不同的測試。如果測試時間過長且測試案例過多,可能會導致執行瓶頸。

如果必須設定高於預設值的逾時時間,請繼續閱讀下文。

覆寫預設逾時設定

這個架構不支援擴充範本來執行 atest。因此,請使用提供的範本,延長逾時時間。

  • One VM long test:

    python_test_host {
      ...
      test_config_template: ":sdv_one_device_long_test",
    }
    
  • 兩部 VM 長時間測試:

    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. 根據測試類型新增對應資訊:

  • 單一 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>
    
  • 三個 VM 測試設定:

    <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 虛擬裝置 (CVD) 執行個體,因此您必須在執行測試前啟動這些執行個體。

  1. 設定環境並啟動 SDV 目標:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. 啟動第一個 CVD 執行個體:

    cvd create --config=sdv_core_instance1
    
  3. 啟動第二個 CVD 執行個體 (用於多 VM 測試):

    cvd create --config=sdv_core_instance2
    
  4. 啟動第三個 CVD 執行個體 (用於多 VM 測試):

    cvd create --config=sdv_core_instance3
    

執行 atest

atest <TestModuleName>

執行 CATBox

這些指令假設您位於存放區的根目錄。

  1. 建構 CATBox:m catbox
  2. (選用) 查看 CATBox 中所有可用的 SDV 測試計畫:
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
    
  • 執行兩項 VM 測試:

    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