添加单元测试和功能测试

本部分介绍在对项目进行更改后如何运行 Trade Federation 测试以及如何为测试做出自己的贡献。内容包括:

  • 在什么位置添加新的单元测试类
  • 在 Eclipse 中以及 Eclipse IDE 外部运行单元测试
  • 在什么位置添加功能测试
  • 运行功能测试
  • 在本地运行一些 TF 提交前验证

添加单元测试

在 Android 开源项目 (AOSP) 中,您可以在以下位置添加单元测试类:tools/tradefederation/core/tests/src/com/android/tradefed/UnitTests.java

重要提示:将新的单元测试类添加到这些位置将导致它们在提交前自动运行,而无需额外设置。

运行单元测试

Trade Federation 的所有 AOSP 单元测试和功能测试都位于 tools/tradefederation/core/tests 项目中。

在 Eclipse 中,如需运行单个单元测试,只需右键点击该测试,然后依次选择 Run As > JUnit 即可。如需运行所有单元测试,请运行 com.android.tradefed.UnitTests 套件。

您也可以在构建之后从 Tradefed 源代码树中的命令行启动单元测试,如下所示:tools/tradefederation/core/javatests/run_tradefed_tests.sh

单元测试可以单独执行,但功能测试应使用 Trade Federation 本身执行;它们需要 Android 设备。所有功能测试都应遵循命名惯例 *FuncTest

检查单元测试结果

运行 run_tradefed_tests.sh 时,单元测试会测试自动化测试框架的所有环节,包括一些错误情况。它会将详细输出打印并导入控制台,包括堆栈轨迹。

结果的最终摘要会指明是否失败了。

控制台中的最终摘要示例:

12:55:02 ========== Result Summary ==========
Results summary for test-tag 'TFUnitTests': 3355 Tests [3355 Passed]

所有的测试都以通过为目的,所以,如果您的本地变更发生任何故障,请确保测试得以修复。

添加功能测试

  • 如果您的功能测试涉及到某个设备(使用任何 ITestDevice API),那么套件定义位于 com.android.tradefed.DeviceFuncTests 中。否则,套件定义位于 com.android.tradefed.FuncTests 中。

  • 如果您的测试方法适合放入某个现有的套件子类,建议将其添加到其中。在其他情况下,您可以随意在适用的套件中添加新类。

  • 无论哪种情况,将您的测试添加到套件后,其都会随其他功能测试一起在 CI 流水线中自动运行。

运行功能测试

如需从 Eclipse 运行功能测试,请执行以下操作:

  1. 确保一个设备已连接到主机,并且 adb 和(如有必要)fastboot 在 Eclipse 的 PATH 中。为了达到此目的,最简单的方法是从具有正确 PATH 的 shell 设置启动 Eclipse。
  2. 创建一个 Java 应用。通过依次点击 Run > Run configurations 运行配置。
  3. 将项目设置为 tradefed-tests,并将主类设置为 com.android.tradefed.command.CommandRunner
  4. 运行 m tradefed-all
  5. 在“Arguments”标签页中提供以下命令行参数:host --class <full path of test class to run>
  6. 点击 Run

要在 Eclipse 外部运行功能测试,请执行以下操作:

  1. 构建 Trade Federation。
  2. 将一个 Android 设备连接到主机。
  3. 运行 tools/tradefederation/core/javatests/run_tradefed_func_tests.sh
  4. (可选)通过附加显示在 adb devices 输出中的 --serial <serial no> 来选择相应设备。

针对本地更改运行 TF 提交前测试

如果您想以与 TF 提交前测试相似的方式运行,请使用以下命令:

tools/tradefederation/core/javatests/run_tradefed_aosp_presubmit.sh

此命令会针对本地构建的 TF 触发所有 TF 提交前测试,以帮助您验证相应更改未破坏任何测试。

TF 提交前测试是上述单元测试的超集,但运行速度偏慢。因此,建议在开发期间运行单元测试以更快速地进行验证,然后在上传 CL 之前运行提交前测试。