Android Enterprise (AE) 自动化测试框架是一个用于验证 Android 设备的企业级兼容性的测试套件。该套件包括配套应用、测试用例、配置文件和一个基于 cts-tradefed 的测试运行程序 (afw-test-tradefed)。您应在完成设备管理配置后再设置并运行 AE 自动化测试框架。
注意:AE 自动化测试框架的构建和运行步骤与 Android 兼容性测试套件 (CTS) 类似。
很多工具、目录和分支名称都包含 AfW 标签。Android for Work (AfW) 是 Android 企业级功能之前的名字。
设置开发环境
AE 自动化测试框架的开发环境类似于 Android 操作系统的开发环境。请按照相关要求中的步骤设置开发设备。
下载源代码
按照下载源代码中的步骤下载 AE 自动化测试框架源代码。AE 自动化测试框架源代码位于 ./test/AfwTestHarness 项目中。需要下载的 AE 自动化测试框架版本取决于分支名称(每个 Android 平台都有一个单独的 AE 自动化测试框架版本)。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 中查看和修改源代码,请执行以下操作:
运行以下命令:make idegen
development/tools/idegen/idegen.sh
在 Android Studio 中,打开 android.ipr。
AE 自动化测试框架源代码位于 test/AfwTestHarness 中。
配置 AE 自动化测试框架
通过配置 test/AfwTestHarness/afw-test.props,您可以自定义自动化测试框架。为了成功运行自动化测试框架,请按照以下步骤操作:
使用以下属性在 afw-test.props 中配置 Wi-Fi 网络:
wifi_ssid
wifi_password (optional)
wifi_security_type (optional, available options are: NONE, WEP or WPA)
从与 Test DPC(充当设备策略控制器)绑定的网域获取至少一个帐号。使用以下属性在 afw-test.props 中指定详细信息:
work_account_username
work_account_password
AE 自动化测试框架使用 Test DPC 来测试配置流程。因此,帐号必须与 Test DPC 绑定才能运行自动化测试框架。
编译 AE 自动化测试框架
使用以下命令初始化编译配置:
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) 以供分发。
运行 AE 自动化测试框架
请按照以下步骤运行 AE 自动化测试框架:
在您的构建环境中使用以下命令启动测试运行程序:
afw-test-tradefed
该操作将启动 cts-tf 控制台,并从 out/host/linux-x86/afw-th/android-cts 中加载测试方案、测试用例和 afw-test.props。
使用以下命令,从解压缩 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 包含工作帐号和 Wi-Fi 配置信息。
运行测试方案。每个测试方案都是一个 XML 文件,其中包含从 AfwTestHarness/tests 测试包目录中获取的一组测试包。常见方案包括:
afw-userdebug-build。它包含需要使用 userdebug build 的所有测试包。
afw-user-build。该方案在 user build 中运行,但要求对测试设备进行正确设置,其中包括完成初始设置以及启用 USB 调试。
如需运行测试方案 afw-userdebug-build,请使用:
cts-tf> run cts --plan afw-userdebug-build
如需查看所有测试方案,请使用命令 list plans。如需查看方案定义,请参阅 out/host/linux-x86/afw-th/android-cts/repository/plans。
运行测试包。如需运行单个测试包,请使用:
cts-tf> run cts --package com.android.afwtest.NfcProvisioning
如需查看所有测试包,请使用命令 list packages。如需查看更多选项,请使用命令 run cts --help。
调试 AE 自动化测试框架
在 afw-test-tradefed 控制台 (cts-tf) 中运行所有命令,该控制台可以通过运行 afw-test-tradefed 来启动。
使用 -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 invocations 或 l i 查看当前正在运行的执行程序。
使用 list results 或 l 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
测试包通过以下方式将企业配置流程自动化:访问界面页面,并将导航日志记录在每个页面的设备 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-time:screenshot-test_test_class_full_name_test_case_name-random_number.png。这些信息也会记录在主机日志中。
错误报告会以下列形式保存到 out/host/linux-x86/afw-th/android-cts/repository/logs/start-time: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。这些信息也会记录在主机日志中。
常见问题解答
我可以在刷入了 user build 的设备上运行测试方案 afw-userdebug-build 吗?
不可以。在运行实际测试流程前,afw-userdebug-build 方案中的测试包会使测试设备恢复出厂设置,并要求自动启用 adb 调试。在 user build 中,只能通过手动更改开发者选项中的设置来启用 adb 调试。
我可以在刷入了 userdebug build 的设备上运行测试方案 afw-user-build 吗?
可以,但我们建议您在 user build 中运行该测试方案。
有时候我的测试会因为界面加载时间过长而失败。该怎么解决这个问题?
在 ./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 设置。有效时间设置以分钟为单位;您可以设置为适合您设备的任意分钟数。