登录 立即注册
安币:

安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户

查看: 84|回复: 5

Android App开发的自动化测试框架UI Automator使用教程

[复制链接]

181

主题

181

帖子

414

安币

手工艺人

发表于 2018-1-5 11:15:43 | 显示全部楼层 |阅读模式

        android的自动化测试有很多框架,其中ui automator是google官方提供的黑盒ui相关的自动化测试工具,(github主页:case使用java写,今天实践了一下官方文档中样例程序,其中还是有一些小问题需要总结一下的。
环境准备:
1.jdk(是的,你没看错,基础的android开发环境必备),以及对应的环境变量配置,不会的可以自己百度下下
2.android studio(ide尊崇个人意愿)
3.android sdk以及配置
4.ant(主要用于build我们的脚本,生成jar包)
ant的搭建主要分几步:
1.下载ant安装文件并且解压安装;
2.新建系统环境变量ant_home,参数值是你的ant安装目录;
3.在path环境变量中添加ant安装目录的bin文件夹,比如我的就是c:\cod\apache-ant-1.9.6\bin
4.配置完以后,测试一下,在命令行下输入ant -version,如果显示你所安装的ant版本信息,证明环境变量配置成功

        使用流程
1、使用adt创建一个java的项目
在创建项目的时候要加上junit与你使用的android platforms中对应的android.jar与uiautomator.jar

        

        2、新建一个包(我这里就只叫com)
3、再这个包下创建一个class,输入以下java代码,代码全是官方文档上的代码,除了最上面的package

[Java] 查看源文件 复制代码
package com;

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 runer extends uiautomatortestcase {  

  public void testdemo() throws uiobjectnotfoundexception {  
   
   // simulate a short press on the home button.
   getuidevice().presshome();
   
   // we're now in the home screen. next, we want to simulate 
   // a user bringing up the all apps screen.
   // if you use the uiautomatorviewer tool to capture a snapshot 
   // of the home screen, notice that the all apps button's 
   // content-description property has the value “apps”. we can 
   // use this property to create a uiselector to find the button. 
   uiobject allappsbutton = new uiobject(new uiselector()
     .description("apps"));
   
   // simulate a click to bring up the all apps screen.
   allappsbutton.clickandwaitfornewwindow();
   
   // in the all apps screen, the settings app is located in 
   // the apps tab. to simulate the user bringing up the apps tab,
   // we create a uiselector to find a tab with the text 
   // label “apps”.
   uiobject appstab = new uiobject(new uiselector()
     .text("apps"));
   
   // simulate a click to enter the apps tab.
   appstab.click();

   // next, in the apps tabs, we can simulate a user swiping until
   // they come to the settings app icon. since the container view 
   // is scrollable, we can use a uiscrollable object.
   uiscrollable appviews = new uiscrollable(new uiselector()
     .scrollable(true));
   
   // set the swiping mode to horizontal (the default is vertical)
   appviews.setashorizontallist();
   
   // create a uiselector to find the settings app and simulate   
   // a user click to launch the app. 
   uiobject settingsapp = appviews.getchildbytext(new uiselector()
     .classname(android.widget.textview.class.getname()), 
     "settings");
   settingsapp.clickandwaitfornewwindow();
   
   // validate that the package name is the expected one
   uiobject settingsvalidation = new uiobject(new uiselector()
     .packagename("com.android.settings"));
   asserttrue("unable to detect settings", 
     settingsvalidation.exists()); 
   uiobject reportbug = new uiobject(new uiselector().text("sound"));
   reportbug.clickandwaitfornewwindow();
   uiobject soundvalidation = new uiobject(new uiselector()
   .text("volumes"));
  asserttrue("unable to detect sound", 
      soundvalidation.exists()); 
   
   getuidevice().presshome();
   
 }  
}




4、使用ant工具生成build.xml
我这里在使用adt自已的ant插件时提示


[Java] 查看源文件 复制代码
build.xml:26: class not found: javac1.8

        网上查了查,是插件与我java环境不符,下载最新的ant插件就可以了http://ant.apache.org/bindownload.cgi

        

        下载这个tar.gz包,解压,然后将apache-ant-1.9.4\bin目录添加到环境变量path中
然后cmd到android sdk的tools目录,使用andrlid list命令,记住你将要在模拟器中运行的(也是你刚刚导入android.jar与uiautomator.jar包时所在的platforms)
在cmd下使用

[Java] 查看源文件 复制代码
android create uitest-project -n <name> -t <android-sdk-id> -p <path>

        -n 为生成的jar包名称,自已任意定义,
-t 为上面查看到的值,我这里是1
-p 为输出路径,这里就是刚才创建的java项目所在的路径

[Java] 查看源文件 复制代码
android create uitest-project -n autorunner -t 1 -p d:\myandroidstudy\androidtest

        然后再cmd进入d:\myandroidstudy\androidtest,使用ant build命令生成autorunner.jar文件
5、将这个autorunner.jar文件push到模拟器中

[Java] 查看源文件 复制代码
adb push autorunner.jar /data/local/tmp

        6、使用

[Java] 查看源文件 复制代码
adb shell uiautomator runtest autorunner.jar cc com.runer 

        使runer类运行

        

        我的代码里又在官方基础上多了一个点击”sound”的操作与点击home键操作

[Java] 查看源文件 复制代码
 uiobject reportbug = new uiobject(new uiselector().text("sound"));
   reportbug.clickandwaitfornewwindow();
   uiobject soundvalidation = new uiobject(new uiselector()
   .text("volumes"));
  asserttrue("unable to detect sound", 
      soundvalidation.exists()); 
   
   getuidevice().presshome();
 image

        

        这个其实也只是一个简单的玩具代码,没有什么意义,但是官方作为一个引导,其中也使用了一些最常见的接口。以后再深入的学习uiautomator

        总结
优点:
1.可以对所有操作进行自动化,操作简单;
2.不需要对被测程序进行重签名,且,可以测试所有设备上的程序,比如~某app,比如~拨号,比如~发信息等等
3.对于控件定位,要比robotium简单一点点
缺点:
1.uiautomator需要android level 16以上才可以使用,因为在level 16及以上的api里面才带有uiautomator工具
2.如果想要使用resource-id定位控件,则需要level 18及以上才可以
3.对中文支持不好(不代表不支持,第三方jar可以实现)
4.个人感觉,控件定位不如robotium那样层级分明,仅仅个人感觉,用户行为注入还是和插桩有点点区别的


0

主题

8572

帖子

-2486

安币

限制会员

发表于 2018-1-6 16:13:54 | 显示全部楼层
楼主威武,以后多发干货,多办活动~!

0

主题

8817

帖子

-2572

安币

限制会员

发表于 2018-1-8 00:23:20 | 显示全部楼层
支持楼主,支持安卓巴士!

21

主题

8833

帖子

-2146

安币

限制会员

发表于 2018-1-8 17:49:48 | 显示全部楼层
楼主威武,以后多发干货,多办活动~!

9

主题

8769

帖子

-1916

安币

限制会员

QQ达人

发表于 2018-1-9 03:52:37 | 显示全部楼层
楼主是好人,回个帖会有安币吗?

27

主题

9012

帖子

-1640

安币

限制会员

发表于 2018-1-9 14:29:53 | 显示全部楼层
楼主威武,以后多发干货,多办活动~!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条
联系我们
关闭
合作电话:
13802416937
Email:
435399051@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表