Android使用UiAutomator进行测试

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kongbaidepao/article/details/80264003

UIAutomator 1.X 的使用准备

1.在Android 4.1发布的时候包含了一种新的测试工具–uiautomator 首先介绍UIAutomator测试框架的UI工具:uiautomatorviewer
  uiautomatorviewer位于sdk/tools目录下,可以扫描、分析待测试应用界面,分析结果可以导出为xml与截图。
  通过该工具可以分析出UI控件的id,text,focusable等等各种属性,甚至布局上的层次关系。
  可以通过./uiautomatorviewer启动该工具。

  工具及原料准备(a.JDK B.集成ADT的Eclipse开发工具    B.SDK)
  uiautomator是一个包含一套UI测试API,和支持运行测试程序的JAR包。该JAR包位于sdk/platforms/android-*/uiautomator.jar. 
  使用时需要注意自己的SDK版本需要大于16, SDK Tools版本需要大于21.


2.开启Eclipse,新建Java Project【Automator】,并设置JRE版本.注意,非Android Project!


3.添加JUnit库--【Java Build Path 】-- Add library -- JUnit
4.添加Android库
找到路径Target平台【Android-sdk\platforms\android-19\】下面的android.jar和uiautomator.jar添加进来:
   d://SDK/platforms/android-23


 5.在src中添加包,然后添加JAVA文件

测试代码编写过程:
(1).建立一个java项目,新建lib文件夹。 
(2).拷贝android.jar和uiautomator.jar到lib文件夹(jar文件的地址:D:\Program Files\adt-bundle-windows-x86_64-20140702\sdk\platforms\android-23)。 
(3).开始编写代码,新建一个类继承 UiAutomatorTestCase 
package com.zyn.uiautomatortest;

import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.core.UiObject;
import com.android.uiautomator.core.UiObjectNotFoundException;
import com.android.uiautomator.core.UiSelector;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;

public class Test extends UiAutomatorTestCase {
    //注意方法名要以 test开头
    public void testDemo() throws UiObjectNotFoundException{
        UiDevice.getInstance().pressHome();//回到主界面
        UiObject browserObject = new UiObject(new UiSelector().text("UC浏览器"));
        browserObject.clickAndWaitForNewWindow();//点击等待新窗口出现
        UiObject editObject = new UiObject(new UiSelector().className("android.view.View"));
        editObject.clickAndWaitForNewWindow();
        UiObject inputObject = new UiObject(new UiSelector().text("搜索或输入网址"));
        inputObject.setText("www.baidu.com");
        UiDevice.getInstance().pressEnter();//敲下回车
        sleep(2000);//等待两秒

	
        getUiDevice().pressBack();// 模拟点击返回键
    }
}


6. 
(1)目前-- Automator  工程例如在:  d://work//JavaTestAutoMator   
(2) package + class : com.example.test.test
(3) CMD进入\Android-sdk\tools\目录下,运行命令:android list target
    
    查看API大于15的SDK的ID值 (第一行 ),
    然后看Automator当前Target平台对应的id 是几;------此处要求API大于15,原因在于Google引入该AutomatorAPI是在API15之后。

    
7. 创建build文件
仍然在\Android-sdk\tools\目录下,运行命令:
    android create uitest-project -n demo(demo是jar包的名字) -t <android-sdk-ID 第一个SDK版本的id ##查看SDKid列表:android list targets## > -p <path>(k:\UIworkspace\Demo1 这里表示项目地址)
    比如:
    android create uitest-project -n Automator -t 1 -p D:\workspace-eclipse-non\Automator
    上面的name就是将来生成的jar包的名字,可以自己定义,android-sdk-ID就是上面看到的1;path是Eclipse新建的工程的路径;
    运行命令后,将会在工程的根目录下生成build.xml文件。如果没生成,请检查以上的步骤。


8.编译生成jar
.将项目中生成的build.xml打开,修改第二排中 default=”help” 为 default=”build” 
//点击绿色三角形运行。生成jar文件。 
然后运行ant build,将使用ant编译生成jar,成功将会提示:
   build successful
   然后回在bin目录下生成jar文件


9.将jar包push到手机中。

adb push 文件全路径 /data/local/tmp/ 回车 
启动测试:在cmd下输入命令 
adb shell uiautomator runtest demo.jar -c 完整的类名(包名+类名)

例如:
adb push D:\workspace-eclipse-non\Automator\bin\Automator.jar data/local/tmp
adb shell uiautomator runtest Automator.jar -c com.example.test.test


UIAutomator 1.X 使用详细 http://blog.chengyunfeng.com/?p=504

基于UiAutomator2.0自动化测试框架搭建  

一、准备工作

在开始自己项目的自动化测试之前,我们最好已经完成了下面的准备工作:
1、熟悉待测应用
对待测应用整体功能和业务逻辑有比较清晰的认识。
2、编写应用的自动化测试用例大纲
这一步主要是让我们在编码前,按应用的功能或者操作流程将可实施自动化测试的部分划分出来。
3、选择合适的工具和框架
这里就不用像Web端那样有那么多选择了,基于UiAutomator2.0的话,
使用Android Studio作为开发工具,默认使用的是Junit4来管理用例,不过min SDK还是要选择的,至少得是16以上吧,一般推荐18。

4、在Module:app里的build.gradle,新增  androidTestCompile xxxxxx

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.0', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })

    compile 'com.android.support:appcompat-v7:24.+'
    testCompile 'junit:junit:4.12'
    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'

}

二、实现步骤
在androidTest目录下:
1>创建测试用例的父类BaseCase类:
每个测试用例类都继承自BaseCase类,那么就可以将用例中的公共部分放到BaseCase类中去实现,从而简化代码结构和减少代码冗余,比如:
a. 在BaseCase类中实现Junit4中的@BeforeClass,
   @AfterClass(整个测试项目中只运行一次,它们对应的方法必须是静态方法)和@Before,@After(每个测试方法开始前后都运行一次)注解对应的方法;
b. 一些常用的与用例相关的方法;
c. 公共变量等。

public class BaseCase {
    public static String pkgName= "";
    public static UIDevice mDevice;

    @BeforeClass
    public static void setup(){
        //测试项目开始前运行(仅一次),如清除缓存数据、安装应用等
    }

    @AfterClass
    public static void teardown(){
         //测试项目结束时运行(仅一次),如卸载应用等
    }
    @Before
    public void initTest(){
        //测试开始前运行(每个@Test运行前都会运行一次),如打开应用等
    }

    @After
    public void close(){
         //测试结束后(每个@Test结束后都会运行一次),如退出应用等
    }


2> 连接设备,点击运行测试代码,就会看见如下Log日志:
$ adb push .......app\build\outputs\apk\app-debug.apk /data/local/tmp/com.example.mandasun.helloui2
$ adb shell pm install -r "/data/local/tmp/......."
    pkg: /data/local/tmp/......
Success
 
 
$ adb push ........\app\build\outputs\apk\app-debug-androidTest-unaligned.apk /data/local/tmp/com.example.mandasun.helloui2.test
$ adb shell pm install -r "/data/local/tmp/.......test"
    pkg: /data/local/tmp/.......test
Success
 
 
Running tests
 
$ adb shell am instrument -w -r -e package ...... -e debug false .......test/android.support.test.runner.AndroidJUnitRunner
Client not ready yet..
Started running tests
Tests ran to completion.

UiAutomator2.0 和1.x 的区别  https://www.cnblogs.com/insist8089/p/6898181.html

1 新增接口:UiObject2、Until、By、BySelector
2 引入方式:2.0中,com.android.uiautomator.core.* 引入方式被废弃。

1.x
import com.android.uiautomator.core.UiCollection;
import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.core.UiObject;

2.x
import android.support.test.uiautomator.by;
import android.support.test.uiautomator.bySelector;
import android.support.test.uiautomator.UiDevice;


3 构建系统:Maven 和/或 Ant(1.x);Gradle(2.0)
4 产生的测试包的形式:从zip /jar(1.x) 到 apk(2.0)
5 在本地环境以adb命令运行UIAutomator测试,启动方式的差别:

   adb shell uiautomator runtest UiTest.jar -c package.name.ClassName(1.x)
   adb shell am instrument -e class com.example.app.MyTest com.example.app.test/android.support.test.runner.AndroidJUnitRunner(2.0)

6 Testdroid云端服务中工程的类型(Testdroid 是一项帮助开发者从事手机应用测试的云端服务,由 Bitbar 公司推出。开发者们可以将开发完毕等待测试的应用上传到 Testdriod ,该服务提供了 200 多种不同移动端设备,以供测试,包括智能手机、平板电脑甚至是相机。类似的服务有:TestObject,testCloud。)

   用2.0,从云端服务中以apk形式下载2.0的测试包,可以通过的普通的Android project来运行;
   用1.x,从云端服务中以apk形式下载2.0的测试包,需要创建一个Android UIAutomator project来运行。


7 能否使用Android服务及接口? 1.x~不能;2.0~能。

8 log输出? 使用System.out.print输出流回显至执行端(1.x); 输出至Logcat(2.0)

9 执行?测试用例无需继承于任何父类,方法名不限,使用注解 Annotation进行(2.0);  需要继承UiAutomatorTestCase,测试方法需要以test开头(1.x) 


阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页