Android自动化测试之UIAutomator

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,自动化测试)