本文档简要介绍了 SDV 测试框架,并指导您完成测试的设置、配置和执行。使用 SDV 测试框架进行端到端测试。该工具基于 Mobly 构建,您可以使用 Python 编写测试。
设置环境
本文档假定您已为 SDV 设置工作站。如需运行框架测试,请安装 virtualenv。
Python 依赖项
建议在 Android 中管理依赖项时,使用 build 配置将测试、Python 及其依赖项打包为可执行文件。您必须在 SDV 测试代码库中遵循此方法。
SDV 测试框架库默认提供以下依赖项:
moblyabsl-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 选项。
复制模板的内容:
sdv-one-device.xmlsdv-two-devices.xmlsdv-three-devices.xml
将
{MODULE}更新为测试的模块名称。将
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 配置。
在
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
- 测试示例:
根据测试类型添加相应信息:
一个虚拟机的测试配置
<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=device1、name=device2)。
测试执行
以下说明假定您已完成 SDV 工作环境的设置。
设置环境
框架不会启动云虚拟设备 (CVD) 实例,因此您必须在运行测试之前启动它们。
设置环境并启动 SDV 目标平台:
. build/envsetup.sh lunch <TARGET>启动第一个云虚拟设备 (CVD) 实例:
cvd create --config=sdv_core_instance1启动第二个云虚拟设备 (CVD) 实例(用于多虚拟机测试):
cvd create --config=sdv_core_instance2启动第三个云虚拟设备 (CVD) 实例(用于多虚拟机测试):
cvd create --config=sdv_core_instance3
运行 atest
atest <TestModuleName>
运行 CATBox
这些命令假定您位于代码库的根目录中。
- 构建 CATBox:
m catbox - (可选)查看 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