本页面简要介绍了 SDV 测试框架库,并指导您完成测试的设置、配置和执行。使用 SDV 测试框架进行端到端测试。该工具基于 Mobly 构建;您可以使用 Python 编写测试。
选择测试方法
在编写测试之前,请选择与您的验证范围相匹配的测试运行程序:
| 测试范围 | Soong 模块类型 | 执行工具 | 何时使用 |
|---|---|---|---|
| 服务软件包单元测试 | rust_test、rust_test_host或cc_test |
atest |
在主机或单个 Cuttlefish 虚拟机 (VM) 上验证隔离的 Rust 或 C++ 业务逻辑、数据转换或辅助 crate。 |
| 端到端和多虚拟机系统测试 | python_test_host(SDV 测试框架) |
atest 或 CATBox |
验证服务包生命周期编排、虚拟机间通信、SOME/IP 桥接或跨一到三个虚拟机的硬件目标。 |
设置环境
本页面假定您已为 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) 中执行。
创建测试
使用该框架编写的所有测试都必须位于测试代码库中。测试的确切位置取决于其类型。如需了解目录路径、Python 测试类模板、Android.bp 规则和 Mobly 编码准则,请参阅创建 SDV 系统测试。
配置测试
将所有测试配置为使用 atest 和 CATBox 运行。
配置 atest
该框架提供了适用于一个、两个和三个虚拟机测试的模板。将以下内容添加到 Android.bp 文件:
一个虚拟机:
python_test_host { ... test_config_template: ":sdv_one_device", }两个虚拟机:
python_test_host { ... test_config_template: ":sdv_two_devices", }三个虚拟机:
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>三虚拟机测试配置:
<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