測試設定

測試套件

如要將測試納入 VTS,該測試必須在 Android.bp 中設定下列項目。

test_suites: ["vts"],

此外,只要將測試新增至 general-tests 套件,即可將其加入預先提交檢查使用的測試對應套件中。

測試設定

在多數情況下,系統會在建構期間自動產生測試設定,也就是 Trade Federation 用來執行 VTS 測試的 XML 檔案。不過,您可以自訂測試設定。

建立自訂測試設定檔

從頭開始建立新的測試 XML 檔案可能會很複雜,因為您必須瞭解測試套件的工作方式,以及各個測試執行程式的差異。系統會自動產生測試設定檔,讓您更輕鬆地完成這項程序。

如果您必須自訂測試 XML 檔案,可以使用自動產生的檔案做為起點。

如要找出自動產生的測試設定檔,請先執行 make 指令建構設定,如下所示。

$ m VtsHalUsbV1_1TargetTest

您可以在建構目錄中,根據模組名稱搜尋設定檔,如下所示。

$ find out/ -name VtsHalUsbV1_1TargetTest.config

檔案可以有多個副本,您可以使用其中任何一個。將 .config 檔案複製到 Android.bp 檔案所在的目錄。

如果 Android.bp 檔案中只有一個測試模組,您可以將 XML 檔案重新命名為 AndroidTest.xml,建構系統會自動將其用作測試模組的設定檔。否則,請在模組中新增 test_config 屬性,如以下範例所示。

test_config: "VtsHalUsbV1_1TargetTest.xml",

您現在有一個測試設定檔,可用於處理及實作自訂項目。

強制使用 ADB 根目錄執行測試

大多數 VTS 測試都需要使用 root 權限才能執行。如果測試設定檔是自動產生的,您可以將下列屬性新增至 Android.bp

require_root: true,

如果測試設定檔經過自訂,請將以下內容新增至測試 XML 檔案。

<target_preparer class="com.android.tradefed.targetprep.RootTargetPreparer"/>

在測試期間停止架構

許多 VTS 測試不需要 Android 架構就能執行,如果在架構停止運作時執行測試,測試就能穩定執行,不會受到裝置異常的影響。如果測試設定檔是自動產生的,您可以在 Android.bp 中新增下列屬性。

disable_framework: true,

如果測試設定檔經過自訂,請將以下內容新增至測試 XML 檔案。

<target_preparer class="com.android.tradefed.targetprep.StopServicesSetup"/>

新增其他測試引數

部分 gtest 測試可能需要更多執行時間。在這種情況下,您可以在 XML 檔案中新增測試執行程式選項。

舉例來說,下列項目中的 native-test-timeout 設定可讓測試以 3 分鐘的逾時時間執行,而非預設的 1 分鐘。

   <test class="com.android.tradefed.testtype.GTest" >
       <option name="native-test-device-path" value="/data/local/tmp" />
       <option name="module-name" value="VtsHalNfcV1_0TargetTest" />
       <option name="native-test-timeout" value="180000"/>
   </test>

最低 API 級別需求

部分 VTS 測試只能在具備最低 API 級別的裝置上執行。如果測試設定檔是自動產生的,您可以將下列屬性新增至 Android.bp

min_shipping_api_level: 29,

vsr_min_shipping_api_level: 202404,

如果您自訂了測試設定檔,請將下列指令新增至測試 XML 檔案。

   <object type="module_controller" class="com.android.tradefed.testtype.suite.module.ShippingApiLevelModuleController">
       <option name="min-api-level" value="29" />
   </object>

   <object type="module_controller" class="com.android.tradefed.testtype.suite.module.ShippingApiLevelModuleController">
       <option name="vsr-min-api-level" value="202404" />
   </object>

API 級別屬性

Android 12 定義了 ro.board.first_api_levelro.board.api_level 屬性,用於顯示這些裝置上供應商映像檔的 API 級別。將這些屬性與 ro.product.first_api_level 結合後,測試套件會為裝置選擇適當的測試案例。

Android 13 定義了 ro.vendor.api_level,可透過使用 ro.product.first_api_levelro.board.first_api_levelro.board.api_level 屬性計算所需的供應商 API 級別,自動設定 ro.vendor.api_level

詳情請參閱「供應商 API 級別」。

ro.board.first_api_level

ro.board.first_api_level 屬性是 API 級別,當 SoC 的供應商映像檔符合供應商凍結的資格,並首次透過此屬性發布時,就會是這個級別。這不取決於裝置的啟動 API 級別,而是取決於定義此值的 SoC 第一個 API 級別。這個值會在 SoC 的整個生命週期內保持不變。

如要設定 ro.board.first_api_level,裝置製造商可以在 device.mk 檔案中定義 BOARD_SHIPPING_API_LEVEL,如以下範例所示:

  # BOARD_SHIPPING_API_LEVEL sets ro.product.first_api_level to indicate
  # the first api level that the device has been commercially launched on.
  BOARD_SHIPPING_API_LEVEL := 23

系統會自動將 ro.board.first_api_level 屬性定義為裝置上的 vendor/build.prop。屬性是由供應商 init 程序設定。

ro.board.api_level

ro.board.api_level 屬性是供應商映像檔的目前供應商 API 級別,該映像檔具有 YYYYMM 格式,其中供應商 API 已凍結。這項屬性會由建構系統自動設定。

ro.vendor.api_level

ro.vendor.api_level 屬性是在 Android 13 中導入,用於顯示供應商映像檔必須支援的 API 級別。系統會自動將此值設為 ro.product.first_api_level,如果有 ro.board.first_api_level,且 ro.board.api_level 設為比 ro.product.first_api_level 早的 API 級別,則會設為 ro.board.api_level。如果版本設為 ro.product.first_api_level 中大於或等於 35 的版本,則會替換為對應的供應商 API 級別。您可以參考這個屬性,將需要供應商映像升級的供應商實作項目測試排除於 SoC 的供應商需求之外。

使用 VTS 進行分割程序

針對 Android 10 以上版本,您可以按照下方說明,在多部裝置上執行分割程序,同時使用 VTS 和 CTS-on-GSI 方案進行測試。

run vts --shard-count <number of devices> -s <device serial> ...

這項指令會將 VTS 企劃書分割為多個區塊,並在多部裝置上執行。

run cts-on-gsi --shard-count <number of devices> -s <device serial> -s ...

這個指令會將 CTS-on-GSI 方案分割為資料分割,並在多部裝置上執行。