測試套件
要讓測試成為 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 測試需要 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
。
test_min_api_level: 29,
如果測試設定檔是自訂的,則將以下命令新增至測試XML檔案。
<object type="module_controller" class="com.android.tradefed.testtype.suite.module.MinApiLevelModuleController">
<option name="min-api-level" value="29" />
</object>
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 等級來自動設定的。
ro.board.first_api_level
ro.board.first_api_level
屬性是首次使用此屬性發布 SoC 的供應商映像時的 API 等級。這不取決於設備的啟動 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
屬性是 SoC 供應商映像的目前 API 等級。當更新具有ro.board.first_api_level
的供應商映像的 API 等級時,使用 SoC 的裝置必須使用供應商映像的目前 API 等級定義ro.board.api_level
屬性,而不是更新ro.board.first_api_level
。如果未設定該屬性,則預設使用ro.board.first_api_level
。
若要設定ro.board.api_level
,請在device.mk
檔案中使用所需值定義BOARD_API_LEVEL
。
ro.vendor.api_level
Android 13 中引入了ro.vendor.api_level
屬性,用於顯示供應商映像所需支援的 API 等級。它會自動設定為ro.board.api_level
(如果未定義ro.board.first_api_level
則為ro.board.api_level
)和ro.product.first_api_level
的最小值。透過參考此屬性,可以將需要供應商映像升級的供應商實施測試排除在 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 計劃拆分為分片並在多個裝置上運行它們。