测试设置

测试套件

对于要添加到 VTS 中的测试,您必须在 Android.bp 中进行以下设置。

test_suites: ["vts"],

此外,如果将测试添加到 general-tests 套件中,它将成为在提交前检查中使用的 Test Mapping 套件的一部分。

测试配置

大多数情况下,测试配置(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

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.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 属性是首次使用此属性发布符合供应商冻结条件的 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 属性是供应商 API 已冻结且具有 YYYYMM 格式的供应商映像的当前供应商 API 级别。该值由构建系统自动设置。

ro.vendor.api_level

Android 13 中引入了 ro.vendor.api_level 属性,以显示供应商映像必须支持的 API 级别。该值会自动设置为 ro.product.first_api_levelro.board.api_level(如果存在 ro.board.first_api_levelro.board.api_level 设置为比 ro.product.first_api_level 更低的 API 级别。)如果供应商 API 级别设置为来自 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 计划拆分为多个分片,并在多台设备上运行。