通过Espresso测试录制器来创建UI

注意:Espresso测试记录器在Android Stuido 2.2中只是一个测试版。

工具Espresso测试录制器可以让你不写任何代码就可以创建你的UI测试。通过录制测试场景,你可以录制与设备的交互情况,也可以在你的app快照中添加断言来测试特定的UI元素。Espresso测试录制器根据保存的记录自动生成相应的UI测试文件。

Espresso测试录制器的测试文件根据Espresso Testing 的框架来写,Espresso Testing的框架是Android Testing Support Library中的API。Espresso的API根据用户的动作创建简明和稳定的UI测试文件.因为交互和断言没有直接操作app的界面和组件,运行是成片段的并于也运行的速度性能也不好。

关闭设备的动画

在使用Espresso测试录制器之前,需要关闭测试设备上所有的动画,以防出现意想不到的结果。可以查看Testing UI for a Single App页的“Set Up Espresso”指南,但是需要注意的是测试录制器在执行save a recording的时候会自动添加依赖所有你不需要手动来进行添加。

录制一个Espresso测试文件

Espresso测试文件宝矿力了两个主要部分:UI交互和View元素的断言。UI交互包括用户可能与你的app进行的点击和输入操作。断言用于检测屏幕中组件的内容或者组件是否存在。例如,一个Note testing app的Espresso测试包含了点击一个按钮的UI交互和通过断言来检测按钮是否存在和note的内容。

这部分将会复习如何通过Espresso测试录制器来创建测试文件,还有如何保存通过录制自动生成的测试文件。

录制UI交互

使用Espresso测试记录器的步骤如下:

1.点击Run > Record Espresso Test

2.在选择目标设备窗口(Select  Deployment Target window),选择所要记录测试的设备。如果需要的话,创建一个新的Android虚拟设备(create a new Android Virtual Device:https://developer.android.com/studio/run/managing-avds.html)。然后点击OK.

3.Espresso测试记录器将会触发项目的重新生成,所以在通过Espresso测试录制器与设备进行交互之前,你必须安装并且运行该app。在app运行后,Record Your Test窗口将会出现,由于你并未与设备进行过交互,主面板会显示“No events recorded yet.”通过与设备交互来输出如“tap”和"type"类型的事件。

注意:在交互之前,你可能会看到设备上出现一个“Waiting for Debugger”或者“Attaching Debugger”的窗口。Espresso测试记录器使用调试器(debugger)来输出UI事件。当调试器连接上,弹出窗口将会自动关闭;不要点击Force Close(强制关闭)。

交互记录将会在如图1所示的Record Your Test窗口的主界面显示。当运行测试时,Espresso测试将会按这些动作的顺序来执行。

android studio检测无用资源文件 android studio test_Android

图1.输出UI交互的Record Your Test窗口

注:

点击Run > Record Espresso Test

android studio检测无用资源文件 android studio test_Android_02

选择目标设备

android studio检测无用资源文件 android studio test_Test_03

弹出Record Your Test界面

android studio检测无用资源文件 android studio test_Test_04

点击Add Assertion,弹出添加断言框

android studio检测无用资源文件 android studio test_Android_05

然后操作设备,输出操作事件的日志

android studio检测无用资源文件 android studio test_Test_06

android studio检测无用资源文件 android studio test_Android_07

选择断言所要测试的控件

android studio检测无用资源文件 android studio test_Android_08

选中的控件会在右方的屏幕快照中红色高亮显示,然后在第二个下拉框中选择断言的类型

android studio检测无用资源文件 android studio test_Android_09

点击Save Assertion保存断言或者点击Save and Add Another来添加另一个新的断言。点击Save Assertion按钮后的弹窗中,可以继续选择Add Assertion添加断言,也可以直接点击Complete Recording来结束。

android studio检测无用资源文件 android studio test_Android_10

点击Complete Recording后,在弹出框中输入生成的测试文件的类名,如果不修改则使用默认的,然后点击Save

android studio检测无用资源文件 android studio test_Android_11

在项目中可以看到以刚才点击保存时命名的class

android studio检测无用资源文件 android studio test_UI_12

点击MainActivityTest,然后点击右键,选择Run'MainActivityTest'

android studio检测无用资源文件 android studio test_Test_13

选择要运行的目标设备

android studio检测无用资源文件 android studio test_Test_14

点击OK,然后在window下面的Run窗口会出现MainActivityTest的tab页并显示运行进度和信息

android studio检测无用资源文件 android studio test_Android_15

添加断言来测试UI元素

断言判断View元素是否存在和里面内容的三种方式:

---text is:测试所选View元素中的text中的内容(内容是否与断言中一致)

---exists:测试所选的View元素是否存在(控件是否存在)

---does not exist:测试当前的View元素不在当前的View层级中(控件是否不存在)

为测试添加断言的步骤如下:

1.点击Add Assertion.Espresso获取的UI层级和其它关于该app的状态信息的捕捉屏幕的弹框将会出现。在Espresso捕捉到屏幕后,这个弹框会自动关闭。

2.Record Your Test窗口的主界面显示当前屏幕的布局。选择快照中所要使用的元素或者在窗口下方的Edit assertion下拉框中选择要创建断言的View元素。被选中的View对象将会显示在红色的高亮框中。

3.从第二个下拉框中选择所需要的断言。Espresso的菜单中填充的是对View元素有效的断言。

---如果选择的断言是“text is”,Espresso将自动为选中的View元素添加文本信息。当然也可以在Edit assertition下面编辑目标断言所需要的的文本信息。

4.点击Save and Add Another来创建另一个断言或者点击Save Assertion来关闭断言界面。

图2的快照是检测标题信息是否为“Happy Testing!”的“text is”断言

android studio检测无用资源文件 android studio test_UI_16

图2.选择一个view元素后的编辑断言框(Edit  assertion box)(红色部分)

当创建断言的时,甚至在断言界面还打开Record Your Test窗口的情况下,你仍可以继续与app进行交互,Espresso测试记录器将继续输出事件的日志,但是如果此时正在编辑的断言,则会将保存这些交互信息记录。

注意:由于Espresso测试录制器是一个实验性功能,该工具目前只支持为纵屏添加断言。尽管横屏情况下你也可以添加断言,屏幕捕捉器仍将其显示为纵向,选中的UI元素的红色边界与元素的实际位置并不相符。

保存录制的信息

与app完成交互并且保存了断言信息后,通过下面的步骤来保存录制的信息并且生成Espresso的测试:

1.点击Complete Recording。然后会出现一个窗口可以选择所要进行测试的类名。

2.Espresso测试录制器根据运行的app的包名和打开的Activity的名字来给生成的测试类一个唯一的名字。可以通过Test class name来更改类名。点击Save。

---如果你没有将Espresso的依赖添加到你的app,一个Missing Espresso dependencies的弹出将在你保存test的时候弹出。点击Yes来自动将依赖添加到build.gradle中。

3.当Espresso Test Recorder生成该文件后会自动打开,Android Studio在Project创建将测试的类名列出来。

---测试保存在哪里取决于你的instrumentation test保存的位置,和所运行的Activity的位置。例如,Note testing app的测试保存在你所录制的项目的目录src>androidTest>java>com.example.username.appname的文件夹下。

运行一个本地的Espresso测试

在Android Studio中点击左侧的Project

android studio检测无用资源文件 android studio test_UI_17

窗口:

1.打开你所要运行的姓名并且打开要运行的测试文件。测试文件的地址取决于instrumentation test的位置和打开的Activity的包名。下面的例子演示了Notest testing app的测试文件将保存到哪里: ---如果在Android视图中,导航到java>com.example.username.appname(androidTest).

---如果在Project视图中,导航到src>androidTest>java>com.example.username.appname

2.在所要运行的测试文件上点击右键,然后点击 Run'testName'

---也可以打开测试的文件,在类名或者是方法上点击右键。在TTest Your App(https://developer.android.com/studio/test/index.html#run_a_test)页面查看更多信息。

3.在选择目标设备的窗口,选择所要运行的设备。如有必要,创建一个新的模拟器。点击OK.

注:

项目在Android视图下,测试文件的位置

android studio检测无用资源文件 android studio test_Android_18

项目在project视图下测试文件的位置

android studio检测无用资源文件 android studio test_Test_19

在IDE底部的Run窗口中监测测试的进程。Android Studio重新创建并生成了项目,并在Run窗口根据测试的名字打开一个新的tab页,如图3所示。你可以在这个tab页查看测试是否通过,需要多久来运行。当运行接收,tab页将输出“Tests ran to completion”。

android studio检测无用资源文件 android studio test_Test_20

图3.运行本地的Espresso测试后在Run窗口的输出

更多关于如果写测试的配置,查看Create and Edit Run/Debug Configurations(https://developer.android.com/studio/run/rundebugconfig.html#creating部分的“Defining a test configuration for a class or method”。

通过Firebase Test Lab运行一个Espresso的测试

你可以通过Firebase Test Lab来将Espresso测试录制器生成的测试文件运行在云端的各种不同配置信息的设备中。通过为你的app创建一个Firebase项目,然后根据说明 Run your tests with Firebase Test Lab(https://developer.android.com/training/testing/unit-testing/instrumented-unit-tests.html#run-ctl)在Android Studio中直接创建。

android studio检测无用资源文件 android studio test_UI_21

图4.通过在Firebase Test Lab上多部设备上运行后的输出