本頁面將概略介紹 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 測試架構程式庫預設會提供下列依附元件:
moblyabsl-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 選項。
複製範本內容:
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
將
{MODULE}更新為測試的模組名稱。將
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。
在
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
- 測試範例:
根據測試類型新增對應資訊:
單一 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) 執行個體,因此您必須在執行測試前啟動這些執行個體。
設定環境並啟動 SDV 目標:
. build/envsetup.sh lunch <TARGET>啟動第一個 CVD 執行個體:
cvd create --config=sdv_core_instance1啟動第二個 CVD 執行個體 (用於多 VM 測試):
cvd create --config=sdv_core_instance2啟動第三個 CVD 執行個體 (用於多 VM 測試):
cvd create --config=sdv_core_instance3
執行 atest
atest <TestModuleName>
執行 CATBox
這些指令假設您位於存放區的根目錄。
- 建構 CATBox:
m catbox - (選用) 查看 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