微信号:grzlwx

介绍:光荣之路官方资讯

【Android测试】Uiautomator简介

2015-11-07 23:06 carter_d

吴老的《selenium webdriver 实战宝典》出版了!

前言


  在App的测试中,除了单元测试来保证Android应用程序的各个组件(例如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要好;另外代码的易读性也更好一些

(作者:carter_dream 来源:http://www.cnblogs.com/by-dream/p/4872244.html)


  
             
  
             
  
             
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            
  
            

感谢作者,传播测试知识、技能与正能量!
分享测试生活,思考测试人生!欢迎来稿735821166@qq.com

光荣之路软件测试培训

官网:http://www.gloryroad.cn/

微信公众号:gloryroadtrain

性能测试QQ群:415987441
软件测试招聘QQ群: 203715128
自动化3群QQ: 371211499

 
光荣之路 更多文章 今天晚上的 linux 公开课- Awk 编程 7月28日(今天)晚上的 linux 公开课- shell编程 8月4日(今天)晚上的 linux 公开课- shell编程 9月1日(本周一)晚8点半,光荣之路Web自动化系列基础课—javascript第二讲 推荐本好书《与机器赛跑》
猜您喜欢 百度开源其关键人工智能系统 WARP-CTC 聊聊高并发系统之限流特技-2 大猫的R语言课堂开课啦+次回预告 Understanding the RenderThread 重磅来袭!上海首届PHP基础班正式开班啦!!