SDV 测试框架

本文档简要介绍了 SDV 测试框架,并指导您完成测试的设置、配置和执行。使用 SDV 测试框架进行端到端测试。该工具基于 Mobly 构建,您可以使用 Python 编写测试。

设置环境

本文档假定您已为 SDV 设置工作站。如需运行框架测试,请安装 virtualenv

Python 依赖项

建议在 Android 中管理依赖项时,使用 build 配置将测试、Python 及其依赖项打包为可执行文件。您必须在 SDV 测试代码库中遵循此方法。

SDV 测试框架库默认提供以下依赖项:

  • mobly
  • absl-py 在测试中使用参数化时需要此参数。
  • pexpect 互动命令功能必需的参数。
  • ptyprocess 互动命令功能必需的参数。

如果您需要特定于测试的依赖项,请将其包含在测试的 Android.bp 文件中。

python_test_host {
    …
    libs: [
        "<DEPENDENCY1",
        "<DEPENDENCY2",
        …
    ],
    …
}

系统测试类型

您可以使用 SDV 测试框架创建系统测试。该框架区分以下类型。正确归类测试:

  • 示例测试:执行 SDV 示例服务,并验证结果是否与预期输出一致。
  • 端到端测试:请勿使用 SDV 示例服务。
  • 长时间运行的测试:专为长时间执行而设计。
  • 性能测试:使用 perfetto 库。
  • 硬件测试:专为在实体设备上执行而设计,无法在 Cuttlefish (CF) 中执行。

创建测试

使用该框架编写的所有测试都必须位于测试代码库中。测试的确切位置取决于其类型。

配置测试

将所有测试配置为使用 atest 和 CATBox 运行。

配置 atest

该框架提供了用于单虚拟机 (VM) 测试、双虚拟机 (VM) 测试和三虚拟机 (VM) 测试的模板。将以下内容添加到 Android.bp 文件:

一个虚拟机

python_test_host {
  ...
  test_config_template: ":sdv_one_device",
}

两个虚拟机

python_test_host {
  ...
  test_config_template: ":sdv_two_devices",
}

3 个虚拟机

python_test_host {
  ...
  test_config_template: ":sdv_three_devices",
}

默认模板足以满足大多数测试的需求。除非有充分的理由,否则请避免创建自定义配置。

更新默认超时时间

默认超时时间应足以在本地执行测试。

如果您的测试因超时而在本地失败,请考虑将其拆分为不同的测试。包含许多测试用例的超长测试可能会导致执行瓶颈。

如果您必须设置高于默认值的超时时间,请继续阅读。

替换默认超时时间

该框架不支持扩展模板以进行 atest 执行。 因此,请使用提供延长超时时间的模板。

一个虚拟机的长时间测试

python_test_host {
  ...
  test_config_template: ":sdv_one_device_long_test",
}

双虚拟机长时间测试

python_test_host {
  ...
  test_config_template: ":sdv_two_devices_long_test",
}

添加注释,明确说明使用此模板的目的,并解释为何需要延长的时间(例如,如果测试需要下载特定时长的制品)。

将文件推送到设备

以下步骤介绍了如何针对 atest 配置将文件推送到设备。

将文件推送到设备

该框架不支持扩展模板以进行 atest 执行。 因此,您必须创建一个完全替换默认模板的 AndroidTest.xml 文件,并为设备添加相应的 target_preparer 选项。

  1. 复制模板的内容:

    • sdv-one-device.xml
    • sdv-two-devices.xml
    • sdv-three-devices.xml
  2. {MODULE} 更新为测试的模块名称。

  3. 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 配置。

  1. 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
  2. 根据测试类型添加相应信息:

一个虚拟机的测试配置

<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>

双虚拟机测试配置

<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>

三个虚拟机的测试配置

<!-- Copyright 2025 Google LLC -->
<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=device1name=device2)。

测试执行

以下说明假定您已完成 SDV 工作环境的设置。

设置环境

框架不会启动云虚拟设备 (CVD) 实例,因此您必须在运行测试之前启动它们。

  1. 设置环境并启动 SDV 目标平台:

    . build/envsetup.sh
    lunch <TARGET>
    
  2. 启动第一个云虚拟设备 (CVD) 实例:

    cvd create --config=sdv_core_instance1
    
  3. 启动第二个云虚拟设备 (CVD) 实例(用于多虚拟机测试):

    cvd create --config=sdv_core_instance2
    
  4. 启动第三个云虚拟设备 (CVD) 实例(用于多虚拟机测试):

    cvd create --config=sdv_core_instance3
    

运行 atest

atest <TestModuleName>

运行 CATBox

这些命令假定您位于代码库的根目录中。

  1. 构建 CATBox:m catbox
  2. (可选)查看 CATBox 中的所有可用 SDV 测试计划:
out/host/linux-x86/catbox/android-catbox/tools/catbox-tradefed l p | grep sdv-

运行测试:

运行一个虚拟机测试

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

运行两个虚拟机的测试

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

运行三个虚拟机的测试

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