版权声明:本文出自胖喵~的博客,转载必须注明出处。

转载请注明出处:http://www.cnblogs.com/by-dream/p/4872244.html

前言


  在App的测试中,除了单元测试来保证Andr​​oid应用程序的各个组件(例如activities、services和content providers),测试用户在应用程序界面的行为也是非常重要的一部分。UI测试(UI Testing)可确保用户在一系列操作过程中(例如键盘输入、点击菜单、弹出对话框、图像显示以及其他UI控件的改变),你的应用程序做出正确的UI响应

  谷歌UI测试(UI Testing)文档:http://android.toolib.net/tools/testing/testing_ui.html  

  UI测试(功能测试、黑盒测试)不需要测试者了解应用程序的内部实现细节,只需要知道当执行了某些特定的动作后是否会得到其预期的输出。这种测试方法,在团队合作中可以更好地分离的开发和测试角色。

  常见的UI测试的方法是手动去执行,然后去验证程序是否达到的预期的效果,很显然这种方法耗时、繁琐并且很容易出错。因此我们需要一种可靠的方法来进行UI测试,通过测试框架,我们可以完成针对具体使用场景的测试用例,然后可以循环的、自动的来运行我们的测试case

概述


  Android的SDk提供了以下的工具来支持我们进行UI自动化测试:

    uiautomatorviewer:一个用来扫描和分析Android应用程序的UI控件的GUI工具。

    uiautomator:一个包含创建测试、执行自动化测试API的java库。(照例送上谷歌Uiautomator文档:http://android.toolib.net/tools/help/uiautomator/index.html 

  要使用这些工具,你必须安装Android开发工具以下版本:

  Android SDK Tools:API 21 版本或者21以上版本;

  Android SDK Platform:API 16 版本或者16以上版本.

Uiautomator测试框架的工作流程

  下面是自动UI测试所需的步骤的简短概述:

  1、安装待测应用到手机,通过uiautomatorviewer分析应用程序界面的控件,并确保应用程序的控件可以被自动化框架访问。

  2、创建自动化测试用例来模拟你和应用程序之间交​​互的步骤。

  3、将测试用例编译成一个JAR文件,并发动到应用程序安装的那台测试设备​上。

  4、运行测试,查看测试结果。

  5、修改测试过程中发现的bug。

分析控件


  在你开始写测试用例之前,使用uiautomatorviewer可以帮助你熟悉你的UI组件(包括视图和控件)。你可以使用它对当前连接到你电脑上的手机屏幕进行一个快照,然后可以看到手机当前页面的层级关系每个控件的属性。利用这些信息,你可以写出针对特定UI控件的测试用例。

  在 ..\sdk\tools\ 目录下打开 uiautomatorviewer.bat (打开前请手机连接电脑)

  

  想必大家看了上面的动态图,基本上已经了解了一些用法了吧,我再进一步说明一下:

  1、获取快照

    当你要分析一个页面时,首先将手机的页面停留在你要分析的页面,然后用数据线连接电脑。然后点击uiautomatorviewer左上角的第二个图标按钮 Device Screenshot,点击之后会将当前手机界面的快照更新到这里来。

  2、页面层级

    右上方的整个区域,就是当前页面布局的层级关系。如果对Android五大布局比较熟悉的话,理解这一层应该不是问题。

  3、不可用区域

    右上方的整个区域中的第二个按钮Toggle NAF Nodes,按下后出现的黄色区域代表,这些控件是不被Uiautomator工具识别,无法获取到这些控件的实例。以QQ首页为例。

    我们可以看到,当按下该按钮的时候,下方的三个tab出现黄色区域,这就代表这三个区域的控件,如果你想通过Uiautomator提供的API来获得他们的属性,或者对其进行点击操作,是做不到的,因为你没办法拿到这些控件的实例。

  4、属性详情

    右下方的整个区域,是当前选中的页面或者是控件的属性信息。这部分比较重要,我们以后写代码的时候就是需要通过查看属性中的控件的id或者是text等来获取控件的实例,然后点击操作它。

    以QQ左上角的头像控件为例:

    点击左上角的头像控件之后,右下方区域就会显示这个控件的详细信息。比如这里我们可以得知它的resource-id就是com.tencent.mobileqq:id/conversation_head。

    然后利用Uiautomator的API方法就可以得到该控件的实例。

// 通过id来创建出UiSelector 对象
UiSelector = new UiSelector().resourceId("com.tencent.mobileqq:id/conversation_head");
// 通过UiSelector 对象 创建出 UiObject 对象
UiObject switcher = new UiObject(uiSelector );
// 判断该控件是否存在
if (switcher.exists())
{
//点击该控件
switcher.click();
}

    上面的方法就是知道了该控件的id之后,模拟点击该控件的过程,当然Uiautomator还提供了根据text来获取控件。

    这种点击的方法比起Monkeyrunner来说它的好处就是:Monkeyrunner是坐标点击,当一个脚本写好后,换一个分辨率的手机去执行,点击的位置可能就会出错,而Uiautomator点击是先找到该控件,然后再点击该控件,因此可移植性比Monkeyrunner要好;另外代码的易读性也更好一些

环境搭建


  网上关于环境搭建的内容很多,也非常的详细,这里我就简单的说下大体流程和注意事项吧。   随手找了一个别人写的环境搭建的文章。直接参考即可: http://www.testwo.com/blog/7057

  1、在Eclipse中建立一个Java的工程。

  2、右键选中你建立的工程,在Properties > Java Build Path中:

    a、点击 Add Library > JUnit 添加JUnit3/4

    b、点击Add External JARs... 导入 uiautomator.jar and android.jar 这两个jar包。

    这里需要注意,导入这两个jar包的时候,注意Android的版本号,后面生成build.xml的时候需要知道你导入的这两个jar是哪个sdk版本的。

  3、导入成功之后,就可以写代码了。代码的格式参考下面:

package com.uia.example.my;

// Import the uiautomator libraries
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 yourclass extends UiAutomatorTestCase { public void testDemo() throws UiObjectNotFoundException { // 测试代码 }
}

  4、使用 android create uitest-project -n %工程名% -t 5 -p %工程目录% 来生存build.xml文件。

    需要注意的就是 这里的 -t 后面的 5 就是Android list后对应的你当初引入两个jar包的sdk版本对应的id。我的是 id: 5 or "android-19",所以我这里是5

    

  5、生成的build.xml 用ant工具进行编译。编译后会生成“工程名.jar”包(注意这里需要使用 ant build命令来打包,这样有错误可以看到);

  6、将该jar包push到手机的 /data/local/tmp 目录下

  7、在adb shell 中执行: uiautomator runtest 工程名.jar -c 包名.类名

  

  执行之后就可以,看到自动执行的效果了。下节将重点讲解如何写Uiautomator的代码。

【Android测试】【第十一节】Uiautomator——简介的更多相关文章

  1. Python3 Selenium自动化web测试 ==> 第十一节 WebDriver高级应用 -- 显示等待 + 二次封装

    学习目的: 掌握显示等待 掌握二次封装 正式步骤: step1:显示等待的代码示例 # -*- coding:utf-8 -*- from selenium import webdriver from ...

  2. 【Android测试】【第九节】MonkeyRunner—— 初识

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4836815.html 不得不说两句,过了这么久才再次更新博 ...

  3. 【Android测试】【第十七节】Instrumentation——App任你摆布(反射技术的引入)

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/5569844.html 前言 学习了上节之后,大家是否已经 ...

  4. 【Android测试】【第十五节】Instrumentation——官方译文

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5482207.html 前言 前面介绍了不少Android ...

  5. 【Android测试】【第十二节】Uiautomator——API详解

    ◆版权声明:本文出自carter_dream的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4921701.html 简单的例子 以一个 ...

  6. Android精通教程-第一节Android入门简介

    前言 大家好,给大家带来Android精通教程-第一节Android入门简介的概述,希望你们喜欢 每日一句 If life were predictable it would cease to be ...

  7. Android测试工具 UIAutomator介绍

    UI Automator 测试工具定义以及用途 UI Automator 测试框架提供了一组 API,用于构建在用户应用和系统应用上执行交互的界面测试.通过 UI Automator API,您可以执 ...

  8. 【Android测试】【第六节】Monkey——认识和使用

    ◆版权声明:本文出自carter_dream的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4688880.html 自动化工具 接触安 ...

  9. 【Android测试】【第一节】ADB——初识和用法

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/4630046.html 写在前面的话 感觉自己进入Andr ...

随机推荐

  1. Xamarin Anroid App访问网站失败

    Xamarin Anroid App访问网站失败 错误信息:net::ERR_NAME_NOT_RESOLVED如果电脑同时有有线网卡和无线网卡,电脑使用无线网卡上网,而有线网卡不上网.这时,就会出现 ...

  2. POJ2823 Sliding Window(单调队列)

    题目要输出一个序列各个长度k的连续子序列的最大值最小值. 多次RMQ的算法也是能过的,不过单调队列O(n). 这题,队列存元素值以及元素下标,队尾出队维护单调性然后入队,队首出队保持新元素下标与队首元 ...

  3. 算法教程(2)zz

    In the previous section we saw how to use vectors to solve geometry problems. Now we are going to le ...

  4. HDU 2853 & 剩余系+KM模板

    题意: 给你一张二分图,给一个原匹配,求原匹配改动最少的边数使其边权和最大. SOL: 我觉得我的智商还是去搞搞文化课吧..这种题给我独立做我大概只能在暴力优化上下功夫.. 这题的处理方法让我想到了剩 ...

  5. Android 与 IIS服务器身份验证

    1)基础验证: /** * 从服务器取图片 * * @param url * @return */ public void getHttpBitmap(final String url) { new ...

  6. Windows Phone7 快递查询

        (1)API去友商100里申请 布局代码: Exp.xaml <phone:PhoneApplicationPage x:Class="WindowsPhone_Express ...

  7. WebRTC手记Channel概念

    转载请注明出处:http://www.cnblogs.com/fangkm/p/4401075.html 前面两篇博文完整地介绍了WebRTC音视频的采集模块,接下来应该开始介绍关键的音视频编码模块. ...

  8. Mina工具类v1.5

    package com.cucpay.fundswap.util; import java.net.InetSocketAddress; import java.nio.charset.Charset ...

  9. mysql中datetime比较大小问题 (转的)

    方法一: 你也可以:select * from t1 where unix_timestamp(time1) > unix_timestamp('2011-03-03 17:39:05') an ...

  10. 使用Objective-C的文档生成工具:appledoc

    使用Objective-C的文档生成工具:appledoc 前言 做项目的人多了,就需要文档了.今天开始尝试写一些项目文档.但是就源代码来说,文档最好和源码在一起,这样更新起来更加方便和顺手.象 Ja ...