某些测试模块可能需要自定义的设置和清理步骤,这些步骤无法在测试用例本身中执行。典型示例可能包括
- 安装其他 apk(除了测试 apk 之外)
- 将一些文件推送到设备
- 运行命令(例如 adb shell pm ...)
过去,组件团队通常会编写主机端测试来执行此类任务,这需要了解 Trade Federation harness,并且通常会增加测试模块的复杂性。
借鉴 CTS,我们引入了测试模块配置的概念来支持此类任务,只需几行配置即可实现上述常见任务列表。为了获得最大的灵活性,您甚至可以实现自己的目标准备器,如 ITargetPreparer 或 ITargetCleaner 所定义,并配置它们以在您自己的测试模块配置中使用。
测试模块的测试模块配置是一个必需的 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 以
- 在调用测试模块之前,在设备上执行 shell 命令“settings put secure accessibility_enabled 1”
- 在测试模块完成后,执行 shell 命令“settings put secure accessibility_enabled 0”
在此特定示例中,分别在测试模块执行之前/之后启用/禁用辅助功能。通过演示的简单示例,有必要更详细地介绍如何使用“option”标记。如上所示,该标记可以有两个属性:name 和 value。name 属性必须引用准备器提供的选项之一。
value 字段的确切用途取决于准备器如何定义选项:它可以是字符串、数字、布尔值,甚至是文件路径。以下是三个常见目标准备器的摘要
-
- 短名称: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 进行权限设置
-
- 短名称:install-apk
- 功能:将任意 apk 文件推送到设备上的目标位置
- 选项
- test-file-name: 要在设备上安装的 apk 的名称。
- install-arg: 要传递给 pm install 命令的其他参数,包括前导破折号,例如“-d”。可以重复
-
- 短名称: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: 设备上本机测试所在的路径。
-
- 短名称:instrumentation
- 功能:在给定设备上运行 instrumentation 测试包的测试
- 选项
- package: 要运行的 Android 测试应用程序的清单包名称。
- class: 要运行的测试类名称。
- method: 要运行的测试方法名称。
-
- 功能:使用 android.support.test.runner.AndroidJUnitRunner 在给定设备上运行 instrumentation 测试包的测试。这是执行 instrumentation 测试的主要方法。