加载中…
个人资料
行者无疆-超越
行者无疆-超越
  • 博客等级:
  • 博客积分:0
  • 博客访问:23,328
  • 关注人气:1
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
正文 字体大小:

Android的uiAutomator

(2014-04-26 06:56:59)
标签:

android

测试

uiautomator

it

分类: Android调试和测试

以下内容选自《深入解析Android5.0系统》,京东,当当,亚马逊上有售。

除了对组成安卓应用的组件(例如:ActivitiesServicesContent Providers)进行单元测试,测试应用程序运行在设备上时的界面也很重要。UI测试确保应用在一系列用户操作后能产生正确的UI界面,例如:通过键盘输入,点击工具栏,菜单,对话框,图片或其他的UI控件。

功能测试或者黑盒测试不需要测试人员了解应用的内部实现细节,只要明白在执行一系列用户操作或输入后返回的UI是什么。这种测试方法将能更好的把你的组织中的开发和测试角色分离。

UI测试通常是的通过手工方式进行,验证应用的行为是否像所期望的那样运行。然而,这种方法非常耗时,无趣和容易出错。一种更有效、更可靠的方式是使用软件测试框架来自动化进行UI测试。自动化测试首先需要编写程序执行测试任务(测试用例)来覆盖指定的使用场景,然后使用测试框架自动的重复的运行测试用例。

1.   概述

Android SDK提供下述工具来支持自动化的功能界面测试:

uiautomatorviewer:一种扫描、分析Android应用的UI组件的可视化工具

uiautomator :一个包含创建定制功能界面测试API和自动化运行测试用例的引擎的JAVA类库。  

2.   使用uiautomator测试框架的工作流程

下面简单介绍一下UI自动化测试的主要步骤:

q  安装应用到用来测试的设备,分析应用的界面模块。确保你的应用能够被自动化测试框架访问。

q  为你的应用创建自动化测试来模拟特定的用户交互。

q  把测试用例编译成jar文件,安装到装有应用的设备上。

q  执行测试并检查测试结果。

q  修正测试发现的错误或者缺陷。

3.   分析应用的UI

在编写测试用例之前,熟悉待测应用的UI组件(包括视图和控件)是很有帮助的。你能通过uiautomatorviewer获取连接在电脑上的设备的UI快照。uiautomatorviewer提供了一个可视化的界面来检查UI的布局层次和查看每一个显示在设备上的UI组件的属性。使用这些信息,你能够创建测试用例来测试特定的UI组件。   

 

24.4  uiautomatorviewer显示捕获的测试设备的界面

分析待测程序的UI组件的步骤如下:

q  连接Android设备到有开发环境的电脑上。

q  打开命令行终端窗口,进入android sdk tool所在目录。

q  执行命令: $ uiautomatorviewer

q  捕获到应用的界面后,点击“Device Screenshot”按钮。

注意:如果你连接了多个设备,需要通过环境变量ANDROID_SERIAL来指定对截取哪个设备。

1)        运行以下命令,得到所有和电脑相连的设备序列号

$ adb devices

2)        设置环境变量ANDROID_SERIAL

Windows上:

set ANDROID_SERIAL=

Lnix上:

export ANDROID_SERIAL=

如果你只连接一个设备,则不需要设置。

q  查看应用的UI属性:在快照的左侧面板上,可以看到uiautomatorviewer显示的UI组件;在右侧下边是组件的属性,上边是布局的层次。你也可以点击“Toggle NAF Nodes”按钮来显示uiautomator框架无法访问的UI组件,它们只有有限的属性信息可以供uiautomator使用。

4.   准备测试

在开始使用uiautomator测试框架之前,完成下面的准备工作:

安装待测应用到设备。

了解待测应用的UI组件。

确保待测应用可访问。本步骤非常必要,因为uiautomator工具依赖Android的可访问特性来执行UI功能测试。你应该在你的程序中加入下述简单的优化来支持uiautomator测试工具:

q  使用android:contentDescription 属性作为ImageButtonImageViewCheckBox 和其他界面控件的标签。 

q  EditText 输入框提供android:hint属性代替android:contentDescription属性。 

q  用于反馈给用户信息(如状态、声明信息)的控件的图标应该包含android:hint 属性 

q  确保在使用方向控制键(如trackball D-pad)时所有的UI元素也是可访问的,

q  使用uiautomatorviewer工具确保UI组件可以被uiautomator工具访问。

注意:为了识别不可访问的UI组件,请点击uiautomatorviewer工具的Toggle NAF Nodes选项。

通常,Android应用开发者不需要考虑是否支持可访问性,因为它们都继承ViewViewGroup类。然而,对于使用定制组件来提供更丰富用户体验的应用,这些定制组件无法获得由标准组件才有的可访问性支持。如果你的测试应用有类似情况,确保应用实现了AccessibilityNodeProvider 接口类来暴露定制组件给Android

关于更多信息,可以参考android官方站点。 

5.   分析一个实际的测试程序

下面的代码例子演示一个简单的测试用例,它可以用来模拟用户在一个安卓设备上启动设置应用。该测试用例模拟用户完成这样的场景的所有步骤,包括打开主屏幕,进入主菜单屏幕,滑动到设置应用图标所在的位置,点击该图标进入设置应用。 

// 引入uiautomator

import  com.android.uiautomator.core.UiObject ;

import  com.android.uiautomator.core.UiObjectNotFoundException ;

import  com.android.uiautomator.core.UiScrollable ;

import  com.android.uiautomator.core.UiSelector ;

import  com.android.uiautomator.testrunner . UiAutomatorTestCase ;

 

public class LaunchSettings extends UiAutomatorTestCase {

public void testDemo() throws UiObjectNotFoundException  {

//模拟点击Home

getUiDevice().pressHome ();

 

// 现在在主屏幕上,接下来需要模拟用户进入应用主菜单。如果使用uiautomatorviewer工具捕获主屏幕

// 的快照,注意看“All Apps”按钮的content-description属性值为“Apps.

// 我们将使用该属性创建一个UiSelector 对象来表示该按钮。 

UiObject  allAppsButton  = new UiObject(new UiSelector().description(“Apps”)); 

 

// 模拟点击进入应用主菜单的屏幕

allAppsButton.clickAndWaitForNewWindow();

 

// 在主菜单的屏幕中,设置应用位于Apps选项卡内。为模拟用户进入该选项卡,我们创建一个UiSelector

// 对象来表示带“Apps”文本标签属性的选项卡。

UiObject  appsTab  =  new  UiObject(new UiSelector().text( “Apps” ));

 

// 模拟点击Apps选项卡

appsTab.click();

 

// 接下来在apps选项卡内,我们将模拟用户滑动屏幕找到设置应用的图标。 创建UiScrollable 对象。 

 UiScrollable  appViews  =   new  UiScrollable(new UiSelector() . scrollable ( true ));

 

// 设置滑动模式为水平,默认为垂直模式

 appViews.setAsHorizontalList ();

 

// 创建一个UiSelector对象来寻找设置应用并模拟用户点击启动该应用

iObject  settingsApp  =  appViews.getChildByText(new UiSelector().className

(android.widget.TextView.class.getName()), “Settings”);

settingsApp.clickAndWaitForNewWindow ();

 

// 检查包名是否和预期的一致

UiObject  settingsValidation  = new UiObject(new UiSelector().

packageName(“com.android.settings” ));

assertTrue(“Unable to detect Settings”, settingsValidation.exists ());

 }

 }

6.   构建和部署uiautomator测试

一旦完成编码和测试后,按照下面的步骤来构建和部署你的测试jar包到Android的测试设备上。

创建配置文件来构建要输出的JAR文件。为了生成配置文件,打开一个命令行终端,运行下面的命令:

/tools/android create uitest-project -n -t 1 -p 

其中 是包含uiautomator测试源文件的测试项目名称。是对应的测试项目目录的路径。

进入包括测试项目目录下,使用命令ant build构建测试的jar文件。

部署生成的的JAR文件到待测设备上。命令是:

db push command:adb push /data/local/tmp/

7.   运行uiautomator测试用例

下面的例子演示了如何运行实现在 LaunchSettings.jar文件中的一个测试用例,该测试用例包含在com.uia.example.my包中。  

adb shell uiautomator runtest LaunchSettings.jar -c

com.uia.example.my.LaunchSettings

如果希望了解更多关于uiautomator的语法格式,子命令或者选项,请参考uiautomator的官方文档。

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有