复杂测试配置

某些测试模块可能需要自定义的设置和清理步骤,这些步骤无法在测试用例本身中执行。典型示例可能包括

  • 安装其他 apk(除了测试 apk 之外)
  • 将一些文件推送到设备
  • 运行命令(例如 adb shell pm ...)

过去,组件团队通常会编写主机端测试来执行此类任务,这需要了解 Trade Federation harness,并且通常会增加测试模块的复杂性。

借鉴 CTS,我们引入了测试模块配置的概念来支持此类任务,只需几行配置即可实现上述常见任务列表。为了获得最大的灵活性,您甚至可以实现自己的目标准备器,如 ITargetPreparerITargetCleaner 所定义,并配置它们以在您自己的测试模块配置中使用。

测试模块的测试模块配置是一个必需的 XML 文件,添加到顶级模块源文件夹中,名为 ‘AndroidTest.xml’。XML 遵循 Trade Federation 测试自动化 harness 使用的配置文件格式。目前,通过测试模块配置处理的主要标记是“target_preparer”和“test”标记。

目标准备程序

顾名思义,“target_preparer”标记定义了一个目标准备器(参见 ITargetPreparer),它提供了一个 setup 方法,该方法在为测试执行测试模块之前被调用;并且如果“target_preparer”标记中引用的类也实现了 ITargetCleaner,则在测试模块完成后将调用其 teardown 方法。

要使用内置的通用模块配置,请在测试模块的顶级文件夹中添加一个新文件 ‘AndroidTest.xml’,并使用以下内容填充它

<?xml version="1.0" encoding="utf-8"?>
<!-- [insert standard AOSP copyright here] -->
<configuration description="Test module config for Foo">
<!-- insert options here -->
</configuration>

例如,我们可以添加以下选项标记(在上面的“insert”注释处)

    <target_preparer class="com.android.tradefed.targetprep.RunCommandTargetPreparer">
        <option name="run-command" value="settings put secure accessibility_enabled 1" />
        <option name="teardown-command" value="settings put secure accessibility_enabled 0" />
    </target_preparer>

这些选项将配置测试 harness 以

  1. 在调用测试模块之前,在设备上执行 shell 命令“settings put secure accessibility_enabled 1”
  2. 在测试模块完成后,执行 shell 命令“settings put secure accessibility_enabled 0”

在此特定示例中,分别在测试模块执行之前/之后启用/禁用辅助功能。通过演示的简单示例,有必要更详细地介绍如何使用“option”标记。如上所示,该标记可以有两个属性:name 和 value。name 属性必须引用准备器提供的选项之一。

value 字段的确切用途取决于准备器如何定义选项:它可以是字符串、数字、布尔值,甚至是文件路径。以下是三个常见目标准备器的摘要

  • 类名:PushFilePreparer

    • 短名称:push-file
    • 功能:将测试用例文件夹下的任意文件推送到设备上的目标位置
    • 注释:
      • 此准备器可以从文件夹推送到文件夹,或从文件推送到文件;也就是说,您不能将文件推送到设备上文件夹下:您还必须指定该文件夹下的目标文件名
    • 选项:
      • push-file: push-spec,指定本地文件到应将其推送到设备上的路径。可以重复。如果配置多个文件推送到同一远程路径,则将推送最新的文件。
      • push: (已弃用) push-spec,格式为“/path/to/srcfile.txt->/path/to/destfile.txt”或“/path/to/srcfile.txt->/path/to/destdir/”。可以重复。此路径可以是相对于测试模块目录或 out 目录本身的路径。
      • post-push: 在尝试所有推送后,在设备上运行的命令(使用“adb shell <your command>”)。典型的用例是使用 chmod 进行权限设置
  • 类名:InstallApkSetup

    • 短名称:install-apk
    • 功能:将任意 apk 文件推送到设备上的目标位置
    • 选项
      • test-file-name: 要在设备上安装的 apk 的名称。
      • install-arg: 要传递给 pm install 命令的其他参数,包括前导破折号,例如“-d”。可以重复
  • 类名:RunCommandTargetPreparer

    • 短名称:run-command
    • 功能:在测试模块执行之前或之后执行任意 shell 命令
    • 选项
      • run-command: 要运行的 adb shell 命令。可以重复
      • teardown-command: 在清理阶段要运行的 adb shell 命令。可以重复

测试类

测试类是用于执行测试的 Trade Federation 类。

<test class="com.android.tradefed.testtype.AndroidJUnitTest">
  <option name="package" value="android.test.example.helloworld"/>
  <option name="runner" value="android.support.test.runner.AndroidJUnitRunner"/>
</test>

以下是三个常见的测试类

  • 类名:GTest

    • 短名称:gtest
    • 功能:在给定设备上运行本机测试包的测试。
    • 选项
      • native-test-device-path: 设备上本机测试所在的路径。
  • 类名:InstrumentationTest

    • 短名称:instrumentation
    • 功能:在给定设备上运行 instrumentation 测试包的测试
    • 选项
      • package: 要运行的 Android 测试应用程序的清单包名称。
      • class: 要运行的测试类名称。
      • method: 要运行的测试方法名称。
  • 类名:AndroidJUnitTest

    • 功能:使用 android.support.test.runner.AndroidJUnitRunner 在给定设备上运行 instrumentation 测试包的测试。这是执行 instrumentation 测试的主要方法。