測試套件
如要讓測試成為 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 root 強制執行測試
大多數 VTS 測試都需要根層級權限才能執行。如果測試設定檔是自動產生,您可以在 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_level 和 ro.board.api_level 屬性,可顯示這些裝置上供應商映像檔的 API 級別。將這些屬性與 ro.product.first_api_level 結合,
測試套件會為裝置選擇適當的測試案例。
Android 13 定義了 ro.vendor.api_level,系統會使用 ro.product.first_api_level、ro.board.first_api_level 和 ro.board.api_level 屬性計算必要的供應商 API 級別,並自動設定該級別。
詳情請參閱「供應商 API 級別」。
ro.board.first_api_level
ro.board.first_api_level 屬性是 API 級別,適用於首次發布的 SoC 供應商映像檔,且該 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
Android 13 導入了 ro.vendor.api_level 屬性,用於顯示供應商映像檔必須支援的 API 級別。如果存在 ro.board.first_api_level,且 ro.board.api_level 設為早於 ro.product.first_api_level 的 API 級別,則系統會自動將此值設為 ro.product.first_api_level 或 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 方案分割為分片,並在多部裝置上執行。