测试设备配置

Android for Work (AfW) 自动化测试框架是一个用于验证 Android 设备的 AfW 兼容性的测试套件。该套件包括支持应用、测试用例、配置文件和一个基于 cts-tradefed 的测试运行程序 (afw-test-tradefed)。您应在完成设备管理配置后再设置并运行 AfW 自动化测试框架。

注意:AfW 自动化测试框架的编译和运行类似于 Android 兼容性测试套件 (CTS) 的编译和运行。

设置开发环境

AfW 自动化测试框架的开发环境类似于 Android 操作系统的开发环境。请按照要求中的步骤设置开发设备。

下载源代码

按照下载源代码中的步骤下载 AfW 自动化测试框架源代码。AfW 自动化测试框架源代码位于 ./test/AfwTestHarness 项目中。要下载的 AfW 自动化测试框架版本取决于分支名称(每个 Android 平台都有其单独的 AfW 自动化测试框架版本)。Android 7.0 的分支名称为 afw-test-harness-nougat-dev。要初始化该分支的 Repo 并下载源代码,请使用:

$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"
$ repo init -u https://android.googlesource.com/platform/manifest -b afw-test-harness-nougat-dev
$ repo sync -j24

要查看不同版本的源代码,请用相应标签指定分支。可用的分支包括:

分支名称支持的 Android 平台
afw-test-harness-nougat-dev Android 7.0
afw-test-harness-2.1 Android 7.0
afw-test-harness-marshmallow-dev Android 6.0
afw-test-harness-1.5 Android 6.0

编译自动化测试框架所需的其他依赖项目也会随源代码一并下载。

在 Android Studio 中查看

要在 Android Studio 中查看和修改 AfW 源代码,请执行以下操作:

  1. 运行以下命令:
    $ make idegen
    $ development/tools/idegen/idegen.sh
    
  2. 在 Android Studio 中打开 android.ipr

AfW 自动化测试框架源代码位于 test/AfwTestHarness 中。

配置 AfW 自动化测试框架

通过配置 test/AfwTestHarness/afw-test.props,您可以自定义自动化测试框架。要成功运行自动化测试框架,请按照以下步骤操作:

  1. 使用以下属性在 afw-test.props 中配置 WLAN 网络:
    wifi_ssid
    wifi_password (optional)
    wifi_security_type (optional, available options are: NONE, WEP or WPA)
    
  2. 从与 Test DPC(充当设备策略控制器)绑定的一个域中获取至少一个帐号。使用以下属性在 afw-test.props 中指定详细信息:
    work_account_username
    work_account_password
    

    AfW 自动化测试框架使用 Test DPC 来测试配置流程。因此,帐号必须与 Test DPC 绑定才能运行自动化测试框架。

编译 AfW 自动化测试框架

使用以下命令初始化编译配置:

$ source build/envsetup.sh
$ lunch

选择设备类型,然后按 Enter 键。

使用以下命令编译自动化测试框架:

$ make afw-test-harness -j32

该操作将创建一个目录 (out/host/linux-x86/afw-th/android-cts),该目录包含运行自动化测试框架所需的全部二进制文件、配置文件和工具。该目录还会被压缩在一个文件 (out/host/linux-x86/afw-th/android-afw-test-harness.zip) 中以供分发。

运行 AfW 自动化测试框架

请按照以下步骤运行 AfW 自动化测试框架:

  1. 使用以下命令,在您的编译环境中启动测试运行程序:
    $ afw-test-tradefed
    该操作将启动 cts-tf 控制台,并从 out/host/linux-x86/afw-th/android-cts 中加载测试计划、测试用例和 afw-test.props
  2. 使用以下命令,从 android-afw-test-harness.zip 的解压缩文件夹中启动测试运行程序:
    $ cts-tf > ./android‐cts/tools/afw-test‐tradefed
    该操作将从 android-cts 目录中加载测试计划、测试用例和 afw-test.props。 请确保 ./android‐cts/repository/testcases/afw-test.props 拥有工作帐号和 WLAN 配置。
  3. 运行测试计划。每个测试计划都是一个 XML 文件,其中包含从 AfwTestHarness/tests 测试包目录中获取的一组测试包。常见计划包括:
    • afw-userdebug-build。它包含需要使用 userdebug 版本的所有测试包。
    • afw-user-build。该计划在 user 版本中运行,但要求对测试设备进行正确设置,其中包括完成初始设置以及启用 USB 调试。

    要运行测试计划 afw-userdebug-build,请使用:
    $ cts-tf > run cts --plan afw-userdebug-build
    要查看所有测试计划,请使用命令 list plans。要查看计划定义,请参阅 out/host/linux-x86/afw-th/android-cts/repository/plans
  4. 运行测试包。要运行单个测试包,请使用:
    $ cts-tf > run cts --package com.android.afwtest.NfcProvisioning
    
    要查看所有测试包,请使用命令 list packages。要查看更多选项,请使用命令 run cts --help

调试 AfW 自动化测试框架

您可以通过运行 afw-test-tradefed 来启动 afw-test-tradefed 控制台 (cts-tf),从而在该控制台中运行所有命令。

  • 使用 -l INFO-l DEBUG 标记显示更多信息。示例:
    $ cts-tf > run cts ‐‐plan afw-userdebug-build -l DEBUG
  • 在具有 -s 标记的设备上运行自动化测试框架。示例:
    $ cts-tf > run cts ‐‐plan afw-userdebug-build -l DEBUG -s device_sn
  • 在具有 --all-devices 标记的所有连接设备上运行自动化测试框架。示例:
    $ cts-tf > run cts ‐‐plan afw-userdebug-build -l DEBUG --all-devices
  • 使用 list invocationsl i 查看当前正在运行的执行程序。
  • 使用 list resultsl r 查看过往测试执行程序的摘要。
  • 使用 help list 查看其他 list 命令。
  • 使用 afwtest,借助过滤器监控实时 logcat,然后打开另一个终端,并使用 adb logcat | grep afwtest 启动 logcat。测试完成后,请执行以下操作:
    • out/host/linux-x86/afw-th/android-cts/repository/logs/start-time 中查看日志。完整的设备 logcat 和主机日志(afw-test-tradefed 日志)会保存在单独的 ZIP 文件中。
    • 通过搜索设备 logcat,查看与 afwtest 相关的信息。示例:zless out/host/linux-x86/afw-th/android-cts/repository/logs/start-time/device_logcat_random-number.zip | grep afwtest
    • 使用以下命令查看完整的 afw-test-tradefed 日志:zless out/host/linux-x86/afw-th/android-cts/repository/logs/start-time/host_log_random-number.zip
  • 测试包通过以下方式将 AfW 的配置流程自动化:访问界面页面,并将导航日志记录在每个页面的设备 logcat 文件中。示例:afwtest.AutomationDriver: Navigating:com.android.afwtest.uiautomator.pages.gms.AddAccountPage
    用于测试包 com.android.afwtest.NfcProvisioning 的界面页面包括:
    • com.android.afwtest.uiautomator.pages.managedprovisioning.NfcProvisioningPage
    • com.android.afwtest.uiautomator.pages.PageSkipper
    • com.android.afwtest.uiautomator.pages.LandingPage
  • 如果测试在配置过程中失败,logcat 将包含类似于以下内容的错误消息:
    TestRunner: java.lang.RuntimeException: Failed to load page: com.android.afwtest.uiautomator.pages.packageinstaller.DeviceAccessPage
    
    这类错误通常是由之前的界面网页或加载失败的网页中的错误所导致,因此,请尝试在 logcat 中找到出现该错误之前的其他错误消息,然后按照配置流程手动重现该错误。
  • 如果测试包运行失败:
    • 系统会使用以下语法将屏幕截图保存到 out/host/linux-x86/afw-th/android-cts/repository/logs/start-timescreenshot-test_test_class_full_name_test_case_name-random_number.png。该信息也会记录在主机日志中。
    • 错误报告会以 bug-test_class_full_name_test_case_name-random_number.zip 的形式保存到 out/host/linux-x86/afw-th/android-cts/repository/logs/start-time
  • 执行完所有测试包后,系统会进行屏幕截图,并以 screenshot-random_number.png 的形式将其保存到 out/host/linux-x86/afw-th/android-cts/repository/logs/start-time。该信息也会记录在主机日志中。

常见问题解答

要针对未在下面解答的问题获取帮助,请通过 afw-testharness-support@google.com 联系我们。

我是否可以在使用 user 版本刷机的设备上运行测试计划 afw-userdebug-build

不可以。在运行实际测试流程前,afw-userdebug-build 计划工厂中的测试包会重置测试设备,并要求自动启用 adb 调试。在 user 版本中,用户只能通过手动更改开发者选项中的设置来启用 adb 调试。

我是否可以在使用 userdebug 版本刷机的设备上运行测试计划 afw-user-build

可以,但我们建议您在 user 版本中运行该测试计划。

有时候我的测试会因为界面加载时间过长而失败。该怎么解决这个问题?

./android-cts/repository/testcases/afw-test.props 中配置 timeout_size 设置。有效设置为:S、M、L、XL 和 XXL。

测试包 com.android.afwtest.NfcProvisioning(或 SuwDoProvisioning)无法在我的设备上成功运行,因为安装的初始设置(即设置向导)会在配置完成后显示自定义界面(例如“条款及条件”)。如何才能跳过该自定义界面?

在配置过程结束后,系统应显示最小化界面。如果界面所包含的按钮包含有意义的文本或内容描述,且文本或内容描述含有以下任何字词,则自动化测试框架将自动跳过此类界面:“跳过”、“结束”、“完成”、“接受”、“同意”、“下一步”、“继续”、“前进”。或者,您可以在 afw-test.props 中定义一个按钮,以便将自动化测试框架配置为跳过您的界面。示例:

oem_widgets=your_btn
your_btn.text=your_customized_text
your_btn.package=your_package
your_btn.action=click

要定义多个微件,请使用逗号分隔。

测试包 com.android.afwtest.NfcProvisioning(或 SuwDoProvisioning)运行失败,最后的界面屏幕显示“验证您的帐号”。为什么会发生这种情况?怎样才能恢复测试设备?

出现该问题的原因是:之前的测试包未能在测试结束后停用恢复出厂设置保护功能。您必须手动输入帐号才能解锁设备。

我的设备需要较长时间才能恢复出厂设置。我是否可以延长恢复出厂设置超时?

可以。您可以在 afw-test.props 中配置 factory_reset_timeout_min 设置。有效时间设置以分钟为单位;您可以设置适合您设备的任意分钟数。