【Android测试】【第十一节】Uiautomator——简介

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

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

 

 

前言android


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

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

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

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

 

 

概述工具


  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测试所需的步骤的简短概述:

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

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

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

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

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

 

 

分析控件


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

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

  

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

 

  一、获取快照

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

  二、页面层级

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

  三、不可用区域

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

    咱们能够看到,当按下该按钮的时候,下方的三个tab出现黄色区域,这就表明这三个区域的控件,若是你想经过Uiautomator提供的API来得到他们的属性,或者对其进行点击操做,是作不到的,由于你没办法拿到这些控件的实例。

  四、属性详情

    右下方的整个区域,是当前选中的页面或者是控件的属性信息。这部分比较重要,咱们之后写代码的时候就是须要经过查看属性中的控件的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

 

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

  二、右键选中你创建的工程,在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版本的。

  三、导入成功以后,就能够写代码了。代码的格式参考下面:

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 { 
    
         // 测试代码
    
    }
}

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

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

    

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

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

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

  

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

相关文章
相关标签/搜索