Android自动化测试之UIAutomator

原创 2015年02月08日 17:00:08

Android自动化测试之UIAutomator

写在最前面,因为我们的项目使用aar模块化打包,之前写的appium程序没法用了,原因是页面的id无法识别了。现在正在看怎么处理,or其他类似的框架都是怎么干活的。用了好几天,终于把uiautomator调试通过了。汗,真心复杂。。。

文档: 
http://developer.android.com/tools/help/uiautomator/index.html 
http://developer.android.com/tools/testing/testing_ui.html

why UIAutomator

作为亲儿子UiAutomator随Android同步推出,随Android版本同步升级,经过多次迭代目前已经相当稳定。 相比MonkeyRunner,UiAutomator接口丰富易用,可以支持所有Android事件操作,事件操作不依赖于控件坐标,可以通过断言和截图验证正确性,非常适合做UI测试。 
UIAutomator不需要测试人员了解代码实现细节,属于功能和黑盒测试。测试代码结构简单,编写容易,学习曲线低。基于JAVA,一次编译可以运行于所有Android设备。

注: UIAutomator不适合OpenGL和HTML为主的程序,因为这类程序未使用Android的view体系。并且手机版本需要在4.1之上。

uiautomatorviewer

uiautomatorviewer位于sdk/tools目录下,可以扫描、分析待测试应用界面,分析结果可以导出为xml与截图。通过该工具可以分析出UI控件的id,text,focusable等等各种属性,甚至布局上的层次关系。

可以通过./uiautomatorviewer启动该工具。

uiautomator

uiautomator是一个包含一套UI测试API,和支持运行测试程序的JAR包。该JAR包位于

sdk/platforms/android-*/uiautomator.jar.

使用时需要注意自己的SDK版本需要大于16, SDK Tools版本需要大于21.

uiautomator使用步骤

1.创建一个Java工程

File-->New-->Java Project 输入工程名称,例如CalculatorAutoTest. 点击Finish

2.添加必要的Jar包

在Project Explorer中右击刚刚创建的这个工程,选择 Properties-->Java build Path添加如下JAR包:

a.选择Add library -->JUnit选择Junit4 
b.选择Add External JARS, 选择sdk/platforms/android-*/目录下的uiautomator.jarandroid.jar,路径中的 *请使用自己下载的最新版本。

3.File-->new-->Class创建一个新的文件,并确保该文件继承自UiAutomatorTestCase.

public class CalTest extends UiAutomatorTestCase {

}

4.编写测试用例,通常可以为一个测试用例编写一个单独的方法:

package automatortest1;

import java.io.IOException;
import android.os.RemoteException;  
import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;

public class UIAutomatorTest extends UiAutomatorTestCase{
    public static final String MAIN_ACTIVITY_NAME =    
                "com.tmall.wireless/.module.launchalert.TMLaunchAlertActivity";
        //用了天猫的启动activity做实验

    public void testStart() throws RemoteException{
         UiDevice device = getUiDevice();
         // 唤醒屏幕
         device.wakeUp();
         assertTrue("screenOn: can't wakeup", device.isScreenOn());

         // 启动App
            try {
                Runtime.getRuntime().exec(
                        "am start -n "+MAIN_ACTIVITY_NAME);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            sleep(2000);       
    }
}

5,编译测试用例准备

a,执行 android list target获取目标平台对应的id

D:\AndroidSDK\sdk\tools>android list targets
Available Android targets:
----------
id: 1 or "android-9"
     Name: Android 2.3.1
     Type: Platform
     API level: 9
     Revision: 2
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854
 Tag/ABIs : default/armeabi
----------
id: 10 or "android-18"
     Name: Android 4.3.1
     Type: Platform
     API level: 18
     Revision: 3
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default)
 Tag/ABIs : default/armeabi-v7a 
----------
id: 21 or "Google Inc.:Google APIs:18"
     Name: Google APIs
     Type: Add-On
     Vendor: Google Inc.
     Revision: 3
     Description: Android + Google APIs
     Based on Android 4.3.1 (API level 18)
     Libraries:
      * com.google.android.media.effects (effects.jar)
          Collection of video effects
      * com.android.future.usb.accessory (usb.jar)
          API for USB Accessories
      * com.google.android.maps (maps.jar)
          API for Google Maps
     Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default),xxx
 Tag/ABIs : default/armeabi-v7a

这里我使用的android4.3,对应id=10

b,uiautomator生成build.xml

<android-sdk>/tools/android create uitest-project -n <projectName> -t targetId -p <projectPath>

命令使用具体如下:

D:\AndroidSDK\sdk\tools>android create uitest-project -n automatortest1 -t 10 
    -p "D:\\Users\\workspace\\automatortest1" 

Added file D:\Users\workspace\automatortest1\build.xml

6,执行 ant build

最开始生成的build.xml中,default是help,修改成build。

<project name="automatortest1" default="build">

然后使用命令行或者在IDE中执行ant build.

7,将生成的jar包放到app中

  D:\Users\workspace\automatortest1\bin>adb push automatortest1.jar  /data/local/tmp/

163 KB/s (1336 bytes in 0.008s)

8,执行

D:\Users\workspace\automatortest1\bin>adb shell uiautomator runtest automatortest1.jar 
    -e outputFormat simple -c automatortest1.UIAutomatorTest#testSt
art
.
Time: 5.048

OK (1 test)

android 命令备查

D:\AndroidSDK\sdk\tools>android -h

   Usage:
   android [global options] action [action options]

   Global options:
  -h --help       : Help on a specific command.
  -v --verbose    : Verbose mode, shows errors, warnings and all messages.
     --clear-cache: Clear the SDK Manager repository manifest cache.
  -s --silent     : Silent mode, shows errors only.

  Valid actions are composed of a verb and an optional direct object:
  -    sdk              : Displays the SDK Manager window.
  -    avd              : Displays the AVD Manager window.
  -   list              : Lists existing targets or virtual devices.
  -   list avd          : Lists existing Android Virtual Devices.
  -   list target       : Lists existing targets.
  -   list device       : Lists existing devices.
  -   list sdk          : Lists remote SDK repository.
  - create avd          : Creates a new Android Virtual Device.
  -   move avd          : Moves or renames an Android Virtual Device.
  - delete avd          : Deletes an Android Virtual Device.
  - update avd          : Updates an Android Virtual Device to match the folders
                        of a new SDK.
  - create project      : Creates a new Android project.
  - update project      : Updates an Android project (must already have an
                        AndroidManifest.xml).
  - create test-project : Creates a new Android project for a test package.
  - update test-project : Updates the Android project for a test package (must
                        already have an AndroidManifest.xml).
  - create lib-project  : Creates a new Android library project.
  - update lib-project  : Updates an Android library project (must already have
                        an AndroidManifest.xml).
  - create uitest-project: Creates a new UI test project.
  - update adb          : Updates adb to support the USB devices declared in the
                        SDK add-ons.
  - update sdk          : Updates the SDK by suggesting new platforms to install
                        if available.

执行 android list target 即可获得已经安装的SDK的平台版本。

Android Studio:布局查看神器-UIAutomatorViewer

用处如果我们查看一个app,想知道它的布局结构,那么 就需要这个UI Automator Viewer,这个还Android SDK自带的,路径:SDK\tool\suiautomatorviewer...
  • ss1168805219
  • ss1168805219
  • 2017年04月01日 11:07
  • 2265

Android自动化测试之UIAutomator(一)

Android程序开发迭代周期短,测试case重复度高,大部分case属于功能验证,常规的测试方法是测试人员按照预先写好的Case手顺进行测试,人工比对操作结果和预期结果。这种测试手段重复度高,效率低...
  • xzy2046
  • xzy2046
  • 2014年09月14日 13:55
  • 5086

android自动化测试Uiautomator源码分析之一

1, 概述 Uiautomator顾名思义,就是UI自动化测试。主要用于仿真UI界面,包括单击,滑动,输入文本等操作。 主要分为三个子命令, rutest/dump/events 同其他大多数a...
  • u012439416
  • u012439416
  • 2017年04月15日 11:46
  • 328

Android进阶--android自动化测试python+uiautomator

android自动化测试常用的一些API,具体的请参考API 导入设备唯一一个设备from uiautomator import device as d导入具体设备from uiautomator i...
  • DG_summer
  • DG_summer
  • 2017年08月09日 20:54
  • 711

安卓自动化测试之uiautomator(Python篇)四 Uisecltor

Uiautomator选择器,需要用到的类是UiSelector,对应的文件在init.py 这个类用于构造一个组合,传入一个字典参数 需要用到的工具是uiautomatorviewer.bat文...
  • meisailor
  • meisailor
  • 2017年08月20日 14:46
  • 181

Espresso 自动化测试(八)- SeekBar的测试

用过UiAutomator的同学其实都应该清楚,SeekBar是一个相当大的痛点,因为我们能够做到最多的就是获取到SeekBar的坐标,再来点击相应的一个坐标。那么问题来了。我根本就不知道我点击的结果...
  • qq744746842
  • qq744746842
  • 2016年02月16日 09:14
  • 1463

android自动化测试Uiautomator测试案例

1, 测试案例 如下是一个简单的测试案例代码,模拟了点击Home键回到主屏,然后点击所以应用按钮打开所有应用列表, 并滚动到时钟应用。打开时钟应用 并选择闹铃界面的第一个闹钟设置,修改该设置的开关...
  • u012439416
  • u012439416
  • 2017年04月15日 11:40
  • 661

uiautomator自动化测试

module:appapply plugin: 'com.android.application' 2 3 android { 4 compileSdkVersion 23 5 ...
  • qq_26818085
  • qq_26818085
  • 2016年12月05日 01:34
  • 799

Uiautomator自动化测试编写和调试---小白入门超详细

Uiautomator建立自动化测试项目 1.建立java项目 (1)选择File-New-JavaProject (注意:是java proect) (2)输入Project Name 输入P...
  • gld824125233
  • gld824125233
  • 2016年10月21日 13:53
  • 3013

Android 自动化测试UiAutomator 视频精讲

Android 自动化测试UiAutomator 视频精讲,带你详细学习Android 自动化测试 全套视频精讲推荐学习 https://ke.qq.com/course/274357&from_...
  • u012861732
  • u012861732
  • 2015年04月02日 20:12
  • 1226
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android自动化测试之UIAutomator
举报原因:
原因补充:

(最多只允许输入30个字)