android自动化测试-UiAutomator使用入门

为什么选择UiAutomator

作为亲儿子UiAutomator随Android同步推出,随Android版本同步升级,经过多次迭代目前已经相当稳定。

相比MonkeyRunner,UiAutomator接口丰富易用,可以支持所有Android事件操作,事件操作不依赖于控件坐标,可以通过断言和截图验证正确性,非常适合做UI测试。

UIAutomator不需要测试人员了解代码实现细节,属于功能和黑盒测试。测试代码结构简单,编写容易,学习曲线低。基于JAVA,一次编译可以运行于所有Android设备。

注: UIAutomator不适合OpenGL和HTML为主的程序,因为这类程序未使用Android的view体系。

UIAutomator的使用准备

1.首先介绍UIAutomator测试框架的UI工具:uiautomatorviewer

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

可以在DDMS中启动,如下:

上图uiautomatorviewer的运行截图,左侧为手机当前画面截图,右侧上部为view控件的层次关系,下部为当前选中控件的各种信息。在左侧屏幕上选择一个组件,可以查看到该控件的属性,在我们写脚本的时候则可以根据对应的属性信息找到该控件然后对控件进行操作,或者根据某些属性进行判断,比如是否可点击等~

2.uiautomator简介

uiautomator是一个包含一套UI测试API,和支持运行测试程序的JAR包。该JAR包位于sdk/platforms/android-*/uiautomator.jar.

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

uiautomator的使用说起来其实很简单,根据属性找到控件,然后对该控件进行操作,大概如下图:

uiautomator的使用步骤

下面用一个例子介绍uiautomator的使用。在该例子中我们将模拟APP的登录并退出。

以Eclipse为例:

1.创建一个Java工程

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

2.添加必要的Jar包

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

a.选择Add library -->JUnit选择Junit3

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

3.File-->new-->Class创建一个新的文件。

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

package com.iflytek.test;

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 MessageTestCase extends UiAutomatorTestCase {
    public void testDemo() throws UiObjectNotFoundException {

        // 模拟 HOME 键点击事件
    	getUiDevice().pressHome();
        // 找到 Apps tab 按钮
        UiObject appsTab = new UiObject(new UiSelector().text("智慧社区"));
        appsTab.click();

        //按返回键退出
        getUiDevice().pressBack();
        getUiDevice().pressBack();
        getUiDevice().pressBack();
        getUiDevice().pressBack();

        sleep(2000);

        // 打开APP
        if (appsTab.exists()) {
        	appsTab.clickAndWaitForNewWindow();
        	sleep(5000);
		}

        // 进入我的页面
        UiObject myTab = new UiObject(new UiSelector().text("我的"));
        myTab.clickAndWaitForNewWindow();

        //设置循环次数
        for(int i =20; i > 0; i--){
        // 进入登录页
        UiObject Login = new UiObject(new UiSelector().resourceId("com.iflytek.smartzone:id/mine_login_layout"));
        if (Login.exists()) {
        	Login.clickAndWaitForNewWindow();
        	// 输入用户名密码
        	UiObject username = new UiObject(new UiSelector().resourceId("com.iflytek.smartzone:id/login_editUser"));
        	username.clearTextField();
        	username.setText("18019900009");
        	UiObject passwd = new UiObject(new UiSelector().resourceId("com.iflytek.smartzone:id/login_editPassword"));
        	passwd.clearTextField();
        	passwd.setText("111111");
        	//点击登录按钮
        	UiObject login = new UiObject(new UiSelector().text("登录"));
        	login.clickAndWaitForNewWindow();
		}

        //登出
        UiObject myinfo = new UiObject(new UiSelector().resourceId("com.iflytek.smartzone:id/mine_head_layout"));
        myinfo.click();
        UiObject loginout = new UiObject(new UiSelector().resourceId("com.iflytek.smartzone:id/person_info_exitlogin"));
        loginout.click();
        UiObject okbt = new UiObject(new UiSelector().text("确认退出"));
        okbt.clickAndWaitForNewWindow();
        }
    }
}

5.编译测试用例

在编译之前我们先要生成build.xml,生成方法如下:

<android-sdk>/tools/android create uitest-project -n <name> -t 3 -p <path>

其中<name>是包含uiautomator测试源文件的测试项目名称,<path> 是对应的测试项目目录的路径。

-t 后面的参数是android版本在当前sdk中的target值,通常一个sdk中我们会下载多个版本的android platform

可以通过一下命令查看:

<android-sdk>/tools/android list

输出如下:

view plaincopy
to clipboard
print?

  1. </pre><pre name="code" class="html">Available Android targets:----------id: 1 or "android-16"     Name: Android 4.1.2     Type: Platform     API level: 16     Revision: 4     Skins: WQVGA400, WSVGA, WXGA800, HVGA, WVGA854, QVGA, WVGA800 (default), WQVGA432, WXGA720, WXGA800-7in Tag/ABIs : default/armeabi-v7a----------id: 2 or "android-19"     Name: Android 4.4.2     Type: Platform     API level: 19     Revision: 3     Skins: WQVGA400, WSVGA, WXGA800, HVGA, WVGA854, QVGA, WVGA800 (default), WQVGA432, WXGA720, WXGA800-7in Tag/ABIs : default/armeabi-v7a----------id: 3 or "android-20"     Name: Android 4.4W     Type: Platform     API level: 20     Revision: 1     Skins: WQVGA400, WSVGA, WXGA800, HVGA, WVGA854, QVGA, WVGA800 (default), WQVGA432, WXGA720, WXGA800-7in, AndroidWearRound, AndroidWear Square, AndroidWearRound, AndroidWearSquare Tag/ABIs : android-wear/armeabi-v7a, android-wear/x86

这里应该和之前添加Library选择的一致或更新,所以-t 后面我写的是1.

运行后输出如下:

Updated file D:\Users\qxb-810\workspace\MessageTestCase\build.xml

到此,build.xml已经生成完毕,下面我们进入到工程目录下进行编译:

ant build

然后将这个jar文件拷贝到手机的 /data/local/tmp/
目录中:

adb push D:\Users\qxb-810\workspace\MessageTestCase\bin\MessageTestCase.jar /data/local/tmp

最后在手机里面执行这个case即可:

adb shell uiautomator runtest MessageTestCase.jar -c com.iflytek.test.MessageTestCase

时间: 2024-11-09 00:51:34

android自动化测试-UiAutomator使用入门的相关文章

Android自动化测试-UiAutomator环境搭建

Android自动化测试-UiAutomator环境搭建 一.环境准备 1. 安装android sdk,并配置环境变量 2. 安装android studio,国内访问官网受限,如果下载不到,可以到我的百度云盘下载: https://pan.baidu.com/s/1bpq5wK3 此云盘中有uiautomator2所依赖的jar包,可以同时下载 二.新建Android Studio工程 新建一个project,输入application name,下一步, 默认选择,下一步, 选择 empt

Android 自动化测试(4)&lt;uiautomator&gt; 单元测试

在之前的系列文章中,我介绍过用java来实现过 Android 自动化测试(1)如何安装和卸载一个应用(java).Android 自动化测试(2)根据ID查找对象(java):然后又介绍了用python语言来实现Android 自动化测试(3) 根据ID查找对象&touch&type (python).还说过后续要写点关于单元测试和代码覆盖测试的文章.今天要介绍的就是单元测试. 1. 概要 做过java单元测试的同学,使用Android的单元测试比较简单,参见 如何进行Android单元

【转】Android自动化测试(UiAutomator)简要介绍

一.一个BUG引发的问题 如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”.这个问题我们如何验证呢?我想,最好的方式应该是自动化测试.    那么,自动化测试可以完成哪些任务呢?    简单的说,那些重复性的测试工作,都可以交给自动化完成:        1.设置手机的语言        2.添加.删除.收藏联系人        3.拨号.挂断        4.甚至发送短信.收藏短信 如果需要上面的功能,那么就开始自动化之旅吧. 二.Android自动化测试简单介绍 Androi

Android自动化测试(UiAutomator)

一.一个BUG引发的问题 如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”.这个问题我们如何验证呢?我想,最好的方式应该是自动化测试.    那么,自动化测试可以完成哪些任务呢?    简单的说,那些重复性的测试工作,都可以交给自动化完成:        1.设置手机的语言         2.添加.删除.收藏联系人         3.拨号.挂断         4.甚至发送短信.收藏短信 如果需要上面的功能,那么就开始自动化之旅吧. 二.Android自动化测试简单介绍 And

Android 自动化测试(5)&lt;robotium&gt;

关于Android的自动化测试之UI测试,之前介绍过Android 自动化测试(4)<uiautomator>, 在android原生的单元测试框架上,利用uiautomator.jar这个类库来完成Android的界面上的测试,这已经使得测试比较简单了.但还有更加简单的写测试的方式,那就是利用一些第三方的测试框架,比如robotium. Android的第三方的测试框架,有Robolectric 和 robotium,我试着用了下,觉得robotium已经非常好用了. 1.概要 Roboti

Android 自动化测试框架

Android常用的自动化测试工具框架: Monkey,MonkeyRunner,UIAutomator,Robotium,Appium,Monkey Talk 但是这些工具框架都有什么关系呢,先通过一张图来了解一下吧.(图是某博客上借过来的) 是不是一脸懵逼,不知道这是什么鬼.下面详细了解一下. 一.Monkey 是Android SDK自带的测试工具,是一个命令行工具,可以运行在模拟器中或者实际设备中,它向系统发送伪随机的用户事件流(如按键输入,触摸屏输入,手势输入等),实现对正在开发的应用

Android 自动化测试--要点概括

Android自动化测试 :Top-Down的要点概括 一.测试方法 1.功能型测试  monkeyrunner.uiautomator 2.随机事件测试  monkey 二.发现问题 3.监测内存是否有泄露     工具 4.监测是否有ANR            日志 (/data/anr) 5.监测是否有Crash         日志(/data/system/dropbox) 6.监测CPU是否有问题    日志(/data/anr) 7.监测流量是否有问题     工具 三.解决问题

Android自动化测试课程大纲

Native App与Web App的自动化测试方法 Android自动化测试常用工具介绍 Robotium Android的Instrumentation机制 Robotium环境搭建及基本使用方法 Robotium基本API的使用 基于Robotium搭建测试框架 UIAutomator UIAutomator架构与原理介绍 UIAutomator环境搭建及基本使用方法 UIAutomator基本API的使用(案例演练) UiDevice UiSelector UiObject UiColl

对自己开发的产品负责——《腾讯Android自动化测试实战》

Android应用由于设备内存有限.网络连接不稳定.迭代速度快.用户体验要求高等原因,加上测试人员需要面对 Native.WebView 和 HTML5 等不同技术,造成了单元测试.性能测试.压力测试. 兼容性测试.速度测试等各方面都更大的挑战性.因此开发人员必须为自己开发的产品负责,在交付测试人员之前进行Android自动化测试. 腾讯移动品质中心的核心成员秉承"为自己开发的产品负责"的原则,把多年来在移动测试领域的探索和实践总结成了<腾讯Android自动化测试实战>.