| <html devsite><head> |
| <title>测试设备配置</title> |
| <meta name="project_path" value="/_project.yaml"/> |
| <meta name="book_path" value="/_book.yaml"/> |
| </head> |
| <body> |
| <!-- |
| Copyright 2017 The Android Open Source Project |
| |
| Licensed under the Apache License, Version 2.0 (the "License"); |
| you may not use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| --> |
| |
| <p>Android Enterprise (AE) 自动化测试框架是一个用于验证 Android 设备的企业级兼容性的测试套件。该套件包括配套应用、测试用例、配置文件和一个基于 <code>afw-test-tradefed</code> 的测试运行程序 (<code>cts-tradefed</code>)。您应在完成<a href="/devices/tech/admin/provision.html">设备管理配置</a>后再设置并运行 AE 自动化测试框架。</p> |
| |
| <p class="note"><strong>注意</strong>:AE 自动化测试框架的编译和运行步骤与 Android <a href="/compatibility/cts/index.html">兼容性测试套件 (CTS)</a> 类似。</p> |
| |
| <p>很多工具、目录和分支名称都包含 AfW 标签。<em></em>Android for Work (AfW) 是 Android 企业级功能之前的名字。</p> |
| |
| <h2 id="setup_env">设置开发环境</h2> |
| <p>AE 自动化测试框架的开发环境类似于 Android 操作系统的开发环境。请按照相关<a href="/setup/requirements.html">要求</a>中的步骤设置开发设备。</p> |
| |
| <h2 id="download_source">下载源代码</h2> |
| <p>按照<a href="/setup/downloading.html">下载源代码</a>中的步骤下载 AE 自动化测试框架源代码。AE 自动化测试框架源代码位于 <code>./test/AfwTestHarness</code> 项目中。要下载的 AE 自动化测试框架版本取决于分支名称(每个 Android 平台都有一个单独的 AE 自动化测试框架版本)。Android 7.0 的分支名称为 <code>afw-test-harness-nougat-dev</code>。要初始化该分支的 Repo 并下载源代码,请使用:</p> |
| |
| <pre class="devsite-click-to-copy"> |
| <code class="devsite-terminal">mkdir WORKING_DIRECTORY</code> |
| <code class="devsite-terminal">cd WORKING_DIRECTORY</code> |
| <code class="devsite-terminal">git config --global user.name "Your Name"</code> |
| <code class="devsite-terminal">git config --global user.email "[email protected]"</code> |
| <code class="devsite-terminal">repo init -u https://android.googlesource.com/platform/manifest -b afw-test-harness-nougat-dev</code> |
| <code class="devsite-terminal">repo sync -j24</code> |
| </pre> |
| |
| <p>要查看不同版本的源代码,请用相应标签指定分支。可用的分支包括:</p> |
| |
| <table> |
| <tbody><tr> |
| <th>分支名称</th> |
| <th>支持的 Android 平台</th> |
| </tr> |
| <tr> |
| <td>afw-test-harness-nougat-dev</td> |
| <td>Android 7.0</td> |
| </tr> |
| <tr> |
| <td>afw-test-harness-2.1</td> |
| <td>Android 7.0</td> |
| </tr> |
| <tr> |
| <td>afw-test-harness-marshmallow-dev</td> |
| <td>Android 6.0</td> |
| </tr> |
| <tr> |
| <td>afw-test-harness-1.5</td> |
| <td>Android 6.0</td> |
| </tr> |
| </tbody></table> |
| |
| <p>编译自动化测试框架所需的其他依赖项目也会随源代码一并下载。</p> |
| |
| <h3 id="view_studio">在 Android Studio 中查看</h3> |
| <p>要在 Android Studio 中查看和修改源代码,请执行以下操作:</p> |
| <ol> |
| <li>运行以下命令:<pre class="devsite-click-to-copy"> |
| <code class="devsite-terminal">make idegen</code> |
| <code class="devsite-terminal">development/tools/idegen/idegen.sh</code> |
| </pre> |
| </li> |
| <li>在 Android Studio 中打开 <code>android.ipr</code>。</li> |
| </ol> |
| |
| <p>AE 自动化测试框架源代码位于 <code>test/AfwTestHarness</code> 中。</p> |
| |
| <h2 id="config_harness">配置 AE 自动化测试框架</h2> |
| <p>通过配置 <code>test/AfwTestHarness/afw-test.props</code>,您可以自定义自动化测试框架。要成功运行自动化测试框架,请按照以下步骤操作:</p> |
| <ol> |
| <li>使用以下属性在 <code>afw-test.props</code> 中配置 Wi-Fi 网络:<pre class="devsite-click-to-copy"> |
| wifi_ssid |
| wifi_password (optional) |
| wifi_security_type (optional, available options are: NONE, WEP or WPA) |
| </pre> |
| </li> |
| <li>从与 Test DPC(充当设备策略控制器)绑定的网域获取至少一个帐号。使用以下属性在 <code>afw-test.props</code> 中指定详细信息: |
| <pre class="devsite-click-to-copy"> |
| work_account_username |
| work_account_password |
| </pre> |
| <p>AE 自动化测试框架使用 Test DPC 来测试配置流程。因此,帐号<strong>必须</strong>与 Test DPC 绑定才能运行自动化测试框架。</p> |
| </li> |
| </ol> |
| |
| <h2 id="build_harness">编译 AE 自动化测试框架</h2> |
| <p>使用以下命令初始化编译配置:</p> |
| <pre class="devsite-click-to-copy"> |
| <code class="devsite-terminal">source build/envsetup.sh</code> |
| <code class="devsite-terminal">lunch</code> |
| </pre> |
| |
| <p>选择设备类型,然后按 <strong>Enter</strong> 键。</p> |
| |
| <p>使用以下命令编译自动化测试框架:</p> |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| make afw-test-harness -j32 |
| </pre> |
| <p>该操作将创建一个目录 (<code>out/host/linux-x86/afw-th/android-cts</code>),该目录包含运行自动化测试框架所需的全部二进制文件、配置文件和工具。该目录还会被压缩成一个文件 (<code>out/host/linux-x86/afw-th/android-afw-test-harness.zip</code>) 以供分发。</p> |
| |
| <h2 id="run_harness">运行 AE 自动化测试框架</h2> |
| <p>请按照以下步骤运行 AE 自动化测试框架:</p> |
| <ol> |
| <li>在您的编译环境中使用以下命令启动测试运行程序: |
| <pre class="devsite-terminal devsite-click-to-copy"> |
| afw-test-tradefed |
| </pre> |
| 该操作将启动 <code>cts-tf</code> 控制台,并从 <code>out/host/linux-x86/afw-th/android-cts</code> 中加载测试方案、测试用例和 <code>afw-test.props</code>。</li> |
| <li>使用以下命令,从解压缩 <code>android-afw-test-harness.zip</code> 后得到的文件夹中启动测试运行程序: |
| <pre class="devsite-click-to-copy"> |
| cts-tf> ./android‐cts/tools/afw-test‐tradefed |
| </pre> |
| 该操作将从 <code>android-cts</code> 目录中加载测试方案、测试用例和 <code>afw-test.props</code>。请确保 <code>./android‐cts/repository/testcases/afw-test.props</code> 包含工作帐号和 Wi-Fi 配置信息。</li> |
| |
| <li>运行测试方案。每个测试方案都是一个 XML 文件,其中包含从 <code>AfwTestHarness/tests</code> 测试包目录中获取的一组测试包。常见方案包括: |
| |
| <ul> |
| <li><code><strong>afw-userdebug-build</strong></code>。它包含需要使用 userdebug 版本的所有测试包。</li> |
| <li><code><strong>afw-user-build</strong></code>。该方案在 user 版本中运行,但要求对测试设备进行正确设置,其中包括完成初始设置以及启用 USB 调试。</li> |
| </ul> |
| |
| <br />要运行测试方案 <code>afw-userdebug-build</code>,请使用:<pre class="devsite-click-to-copy"> |
| cts-tf> run cts --plan afw-userdebug-build |
| </pre> |
| 要查看所有测试方案,请使用命令 <code>list plans</code>。要查看方案定义,请参阅 <code>out/host/linux-x86/afw-th/android-cts/repository/plans</code>。 |
| <br /> |
| </li> |
| <li>运行测试包。要运行单个测试包,请使用: |
| <pre class="devsite-click-to-copy"> |
| cts-tf> run cts --package com.android.afwtest.NfcProvisioning |
| </pre> |
| 要查看所有测试包,请使用命令 <code>list packages</code>。要查看更多选项,请使用命令 <code>run cts --help</code>。</li> |
| </ol> |
| |
| <h2 id="debug_harness">调试 AE 自动化测试框架</h2> |
| <p>您可以通过运行 <code>afw-test-tradefed</code> 来启动 afw-test-tradefed 控制台 (<code>cts-tf</code>),从而在该控制台中运行所有命令。</p> |
| <ul> |
| |
| <li>使用 <code>-l INFO</code> 或 <code>-l |
| DEBUG</code> 标记显示更多信息。例如: |
| <pre class="devsite-click-to-copy"> |
| cts-tf> run cts ‐‐plan afw-userdebug-build -l DEBUG |
| </pre> |
| </li> |
| |
| <li>使用 <code>-s</code> 标记在特定设备上运行自动化测试框架。例如: |
| <pre class="devsite-click-to-copy"> |
| cts-tf> run cts ‐‐plan afw-userdebug-build -l DEBUG -s device_sn |
| </pre> |
| </li> |
| |
| <li>使用 <code>--all-devices</code> 标记在所有连接设备上运行自动化测试框架。例如: |
| <pre class="devsite-click-to-copy"> |
| cts-tf> run cts ‐‐plan afw-userdebug-build -l DEBUG --all-devices |
| </pre> |
| </li> |
| |
| <li>使用 <code>list invocations</code> 或 <code>l i</code> 查看当前正在运行的执行程序。</li> |
| |
| <li>使用 <code>list results</code> 或 <code>l r</code> 查看过往测试执行程序的摘要。</li> |
| |
| <li>使用 <code>help list</code> 查看其他 <code>list</code> 命令。</li> |
| |
| <li>使用 <code>afwtest</code> 借助过滤器监控实时 logcat,然后打开另一个终端,并使用 <code>adb logcat | grep afwtest</code> 启动 logcat。测试完成后,请执行以下操作: |
| <ul> |
| <li>查看 <code>out/host/linux-x86/afw-th/android-cts/repository/logs/<em>start-time</em></code> 中的日志。完整的设备 logcat 和主机日志(<code>afw-test-tradefed</code> 日志)会保存在单独的 ZIP 文件中。</li> |
| |
| <li>通过搜索设备 logcat,查看与 <strong>afwtest</strong> 相关的信息。例如:<code>zless |
| out/host/linux-x86/afw-th/android-cts/repository/logs/<em>start-time</em>/device_logcat_<em>random-number</em>.zip |
| | grep afwtest</code></li> |
| |
| <li>使用以下命令查看完整的 afw-test-tradefed 日志:<code>zless |
| out/host/linux-x86/afw-th/android-cts/repository/logs/<em>start-time</em>/host_log_<em>random-number</em>.zip</code> |
| </li> |
| </ul> |
| </li> |
| <li>测试包通过以下方式将企业配置流程自动化:访问界面页面,并将导航日志记录在每个页面的设备 logcat 文件中。 |
| 例如:<code>afwtest.AutomationDriver: |
| Navigating:com.android.afwtest.uiautomator.pages.gms.AddAccountPage</code> |
| <br />用于测试包 <code>com.android.afwtest.NfcProvisioning</code> 的界面页面包括:<ul> |
| <li> |
| <code>com.android.afwtest.uiautomator.pages.managedprovisioning.NfcProvisioningPage</code> |
| </li> |
| <li><code>com.android.afwtest.uiautomator.pages.PageSkipper</code></li> |
| <li><code>com.android.afwtest.uiautomator.pages.LandingPage</code></li> |
| </ul> |
| </li> |
| <li>如果测试在配置过程中失败,logcat 将包含类似于以下内容的错误消息:<pre class="devsite-click-to-copy"> |
| TestRunner: java.lang.RuntimeException: Failed to load page: com.android.afwtest.uiautomator.pages.packageinstaller.DeviceAccessPage |
| </pre> |
| 这类错误通常是由之前的界面页面或加载失败的页面中的错误所导致,因此,请尝试在 logcat 中找到出现该错误之前的其他错误消息,然后按照配置流程手动重现该错误。</li> |
| <li>如果测试包运行失败: |
| <ul> |
| <li>系统会使用下列语法将屏幕截图保存到 <code>out/host/linux-x86/afw-th/android-cts/repository/logs/<em>start-time</em></code>:<code>screenshot-test_<em>test_class_full_name</em>_<em>test_case_name</em>-<em>random_number</em>.png</code>。该信息也会记录在主机日志中。</li> |
| <li>错误报告会以下列形式保存到 <code>out/host/linux-x86/afw-th/android-cts/repository/logs/<em>start-time</em></code>:<code>bug-<em>test_class_full_name</em>_<em>test_case_name</em>-<em>random_number</em>.zip</code>。 |
| </li> |
| </ul> |
| </li> |
| <li>所有测试包均执行完毕后,系统会截取屏幕截图,并将其以下列形式保存到 <code>out/host/linux-x86/afw-th/android-cts/repository/logs/<em>start-time</em></code>:<code>screenshot-<em>random_number</em>.png</code>。该信息也会记录在主机日志中。</li> |
| </ul> |
| |
| <h2 id="faq">常见问题解答</h2> |
| <p>如果下方未列出您的问题,请通过 <a href="mailto:[email protected]">[email protected]</a> 与我们联系。 |
| </p> |
| |
| <p><strong>我可以在刷入了 user 版本的设备上运行测试方案 <code>afw-userdebug-build</code> 吗?</strong></p> |
| <p><em>不可以。在运行实际测试流程前,<code>afw-userdebug-build</code> 方案中的测试包会使测试设备恢复出厂设置,并要求自动启用 <code>adb</code> 调试。在 user 版本中,只能通过手动更改开发者选项中的设置来启用 <code>adb</code> 调试。</em></p> |
| |
| <p><strong>我可以在刷入了 userdebug 版本的设备上运行测试方案 <code>afw-user-build</code> 吗?</strong></p> |
| <p><em>可以,但我们建议您在 user 版本中运行该测试方案。</em></p> |
| |
| <p><strong>有时候我的测试会因为界面加载时间过长而失败。该怎么解决这个问题?</strong></p> |
| <p><em>在 <code>./android-cts/repository/testcases/afw-test.props</code> 中配置 <code>timeout_size</code> 设置。有效设置为:S、M、L、XL 和 XXL。</em></p> |
| |
| <p><strong>测试包 <code>com.android.afwtest.NfcProvisioning</code>(或 <code>SuwDoProvisioning</code>)无法在我的设备上成功运行,因为安装的初始设置(即设置向导)会在配置完成后显示自定义界面(例如“条款及条件”)。如何才能跳过该自定义界面?</strong></p> |
| <p><em>在配置过程结束后,步骤界面应该很少了。如果界面所包含的按钮包含有意义的文本或内容描述,且文本或内容描述含有以下任何字词,则自动化测试框架将自动跳过此类界面:“跳过”、“结束”、“完成”、“接受”、“同意”、“下一步”、“继续”、“前进”。或者,您可以在 <code>afw-test.props</code> 中定义一个按钮,以便将自动化测试框架配置为跳过您的界面。例如:</em></p> |
| <pre class="devsite-click-to-copy"> |
| oem_widgets=your_btn |
| your_btn.text=your_customized_text |
| your_btn.package=your_package |
| your_btn.action=click |
| </pre> |
| <p><em>要定义多个微件,请使用英文逗号分隔。</em></p> |
| |
| <p><strong>测试包 <code>com.android.afwtest.NfcProvisioning</code>(或 <code>SuwDoProvisioning</code>)运行失败,最后的界面屏幕显示“验证您的帐号”。为什么会出现这种情况?怎样才能恢复测试设备? |
| </strong></p> |
| <p><em>出现该问题的原因是:之前的测试包未能在测试结束后停用恢复出厂设置保护功能。您必须手动输入帐号才能解锁设备。</em></p> |
| |
| <p><strong>我的设备需要较长时间才能恢复出厂设置。我是否可以延长恢复出厂设置超时?</strong></p> |
| <p><em>可以。您可以在 <code>afw-test.props</code> 中配置 <code>factory_reset_timeout_min</code> 设置。有效时间设置以分钟为单位;您可以设置适合您设备的任意分钟数。</em></p> |
| |
| </body></html> |