将选项和过滤条件传递到套件和模块

首先,确保您了解 Tradefed 中的选项处理

套件设置介绍了套件结构中存在的两个层:

  • 顶级套件
  • 模块

在非套件 Tradefed 环境中,不需要考虑选项的传递,因为每个选项都会得到完全调用。在套件环境中,模块与套件保持隔离,所以并非所有选项都在它们的级别上可用。

将选项传递给顶级套件

顶级套件的行为方式类似于标准 Tradefed 配置:完整的配置(包括套件运行程序)将接收所有选项,就像非套件 Tradefed 配置一样。

将选项传递给模块

默认情况下,模块不会接收传递给命令的任何选项。需要通过 module-arg 选项来明确定位模块以接收选项。模块选项的这种隔离使调试变得更容易。

示例:

cts-tradefed run cts --module-arg <module-name>:<option-name>:<option-value>

cts-tradefed run cts --module-arg CtsGestureTestCases:collect-tests-only:true

该语法可确保定位的模块将接收给定的选项。

还有其他方法可以将选项传递给模块,如 test-arg,它允许您根据运行程序类型或类,将选项传递给每个模块的测试运行程序。

示例:

cts-tradefed run cts --test-arg <test-class>:<option-name>:<option-value>

cts-tradefed run cts --test-arg com.android.tradefed.testtype.JarHosttest:collect-tests-only:true

该语法不是针对特定模块,而是针对给定类的所有测试运行程序。test-arg 只将 IRemoteTest 的实现视为选项的潜在接收者。

将选项传递给 java_test_host 中的 Java 测试类

如果您要将 @Option 作为 java_test_host 构建目标的一部分添加到 Java 测试类中,就需要使用以下代码来注入该选项:

cts-tradefed run cts --module-arg <module-name>:set-option:<option-name>:<option-value>

此上下文中的 set-option 是自动化测试框架中 HostTest 运行程序的选项,用于封装 Java 类以执行这些测试类。

如果选项的 jar 文件目标包含多个测试类,则默认情况下,所有类都需要指定 @option 或使用以下语法来以单个类为目标:

cts-tradefed run cts --module-arg <module-name>:set-option:<class-name>:<option-name>:<option-value>

将过滤条件传递给套件

为了过滤套件中的一些测试,我们使用 --include-filter--exclude-filter 来分别强制包含或排除特定测试或模块。排除操作具有优先级。

它们采用如下格式:[abi] <module-name> [test name]

示例:

--include-filter CtsGestureTestCases

--include-filter armeabi-v7a CtsGestureTestCases

--include-filter armeabi-v7a CtsGestureTestCases android.gesture.cts.GestureTest#testGetStrokes