Android自动化测试之UIAutomator

来源:互联网 发布:程序员发展前景 编辑:程序博客网 时间:2024/05/16 14:18

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 targetsAvailable 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#testStart.Time: 5.048OK (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的平台版本。

0 0
原创粉丝点击