`
喜欢蓝色的我
  • 浏览: 357812 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

android自动化测试框架(一) uiautomator

 
阅读更多
Android自动化测试主要分为Monkeyrunner、Rubotium、UiAutomator、Monkey等。主要特点:
    1、Monkeyrunner:优点:操作最为简单,可以录制测试脚本,可视化操作;缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限;
    2、Rubotium:主要针对某一个APK进行自动化测试,APK可以有源码,也可以没有源码,功能强大;缺点是针对APK操作,而且需要对APK重新签名(有工具),因此操作相对复杂;
    3、UiAutomator:优点:可以对所有操作进行自动化,可以跨app操作。操作简单;缺点:Android版本需要高于4.0,无法根据控件ID操作,相对来说功能较为局限,但也够用了;
    4、Monkey:准确来说,这不算是自动化测试,因为其只能产生随机的事件,无法按照既定的步骤操作;
    由上面介绍可以有这样的结论:测试某个APK,可以选择Rubotium;测试过程可能涉及多个APK,选择UiAutomator;一些简单的测试,选择Monkeyrunner;
开始介绍uiautomator 框架
1.首先介绍UIAutomator测试框架的UI工具:uiautomatorviewer
uiautomatorviewer位于sdk/tools目录下,可以扫描、分析待测试应用界面,分析结果可以导出为xml与截图。通过该工具可以分析出UI控件的id,text,focusable等等各种属性,甚至布局上的层次关系。
windows下运行tools下的uiautomatorviewer.bat
liunx下运行./uiautomatorviewer  启动该工具。
上图uiautomatorviewer的运行截图,左上角两个手机模样的图标点击后就会开始截图并分析UI组件,分析后的结果如下方所示, 左侧为手机当前画面截图,右侧上部为view控件的层次关系,下部为当前选中控件的各种信息。

2.介绍uiautomator

uiautomator是一个包含一套UI测试API,和支持运行测试程序的JAR包。该JAR包位于sdk/platforms/android-* /uiautomator.jar. 使用时需要注意自己的SDK版本需要大于16, SDK Tools版本需要大于21.Android版本需要高于4.0
3.例子介绍
下面用一个例子介绍uiautomator的使用。在该例子中我们将启动计算器程序并测试1+1的结果是否正确。 以Eclipse为例: 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.jar和android.jar,路径中的*请使用自己以下载的最新版本。
3.File-->new-->Class创建一个新的文件,并确保该文件继承自UiAutomatorTestCase.
public class CalTest extends UiAutomatorTestCase {
}
编写测试用例,通常可以为一个测试用例编写一个单独的方法
package xzy.test.uiautomator;


import java.io.IOException;
import android.os.RemoteException;
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;
//import org.junit.After;
//import org.junit.Before;
//import org.junit.Test;
//import static org.junit.Assert.*;


public class CalTest extends UiAutomatorTestCase {
    //@Test
    public void testDemo() throws UiObjectNotFoundException, RemoteException {
        UiDevice device = getUiDevice();

        // wakeup

        device.wakeUp();
       
        assertTrue("screenOn: can't wakeup", device.isScreenOn());

        // come back HOME
        System.out.print("########");
        device.pressHome();

        sleep(1000);
       
        // running App

        try {

        Runtime.getRuntime().exec(

        "am start -n com.android.calculator2/.Calculator");

        } catch (IOException e) {

        // TODO Auto-generated catch block

        e.printStackTrace();

        }
        sleep(1000);

        UiObject oneButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/digit1"));
       
        //UiObject oneButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/digit1"));
        //UiObject oneButton = new UiObject(new UiSelector().classNameMatches("android.widget.Button").text("1"));
        assertTrue("oneButton not found", oneButton.exists());
        //assertEquals(oneButton.getText(),"1");
        //assertEquals(oneButton.getText(),"one Button");
//"+"
        UiObject plusButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/plus"));

        assertTrue("plusButton not found", plusButton.exists());
        System.out.print("aaaaaaa");


        sleep(100);

        UiObject equalButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/equal"));

        assertTrue("equalButton not found", equalButton.exists());

        oneButton.click();

        sleep(100);

        plusButton.click();

        sleep(100);

        oneButton.click();

        equalButton.click();

        sleep(100);

        UiObject switcher = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/formula"));

        //UiObject result = switcher.getChild(new UiSelector().index(0));

        //System.out.print("text is :" + result.getText());
        System.out.print("text is :" + switcher.getText());
        assertTrue("result != 2", switcher.getText().equals("2"));
        //assertTrue("result != 2", result.getText().equals("2"));
    }


}
------------------------------------------------------------------------------------------------------------------
小插曲:
例子中有assertTrue方法判断,我就自动添加import junit的
import static org.junit.Assert.*; 在执行ant build 报错。注释掉就可以正常build,但不知道为什么不用import assert,之后百度得知
 
创建uiautomator 测试案例
uiautomator 测试案例(Test case)需要继承至UiAutomatorTestCase 类。而UiAutomatorTestCase 类继承至junit.framework.TestCase类,所以可以用JUnit的Assert类来比较测试结果
需要要在单独import static org.junit.Assert.*;
--------------------------------------------------------------------------------------------------------------------------------------------
4.生产build 文件编译测试用例 uiautomator的编译工具是Ant,在编译之前我们先要生成build.xml,生成方法如下:
<android-sdk>/tools/android create uitest-project -n <name> -t 1 -p <path>

说明一下各个参数的作用,如果已经将android sdk的路径配置到了系统的path中,输入命令“android create uitest-project”就可以查看到相应的帮助

 -n --name    : Project name.  就是在eclipse中创建的项目的名字。

-t --target  : Target ID of the new project. [required]   这个id是本机上android targets的id,可以通过命令 “android list”来查询,得到如下图的结果,选择android-17以上版本前面所对应的id
我本地路径:D:\Android\adt-bundle-windows-x86-20130917.467161976\adt-bundle-windows-x86-20130917\sdk\tools
D:\Android\adt-bundle-windows-x86-20130917.467161976\adt-bundle-windows-x86-20130917\sdk\tools>android create uitest-project -n UiAutomator -t 1 -p D:\workspace\CalculatorAutoTest
从eclipse中可以看到有3个新增加的文件 build.xml   local.properties   project.properties
5.生产jar文件
在eclipse 中的build.xml 文件上右键(或者到该工程目录下执行 ant build),运行ant build 提示
Buildfile: D:\workspace\CalculatorAutoTest\build.xml
-check-env:
 [checkenv] Android SDK Tools Revision 22.2.1
 [checkenv] Installed at D:\Android\adt-bundle-windows-x86-20130917.467161976\adt-bundle-windows-x86-20130917\sdk
-build-setup:
[getbuildtools] Using latest Build Tools: 18.1.0
     [echo] Resolving Build Target for CalculatorAutoTest...
[getuitarget] Project Target:   Android 4.3
[getuitarget] API level:        18
     [echo] ----------
     [echo] Creating output directories if needed...
-pre-compile:
compile:
    [javac] Compiling 1 source file to D:\workspace\CalculatorAutoTest\bin\classes
    [javac] 警告: [options] 源值1.5已过时, 将在未来所有发行版中删除
    [javac] 警告: [options] 目标值1.5已过时, 将在未来所有发行版中删除
    [javac] 警告: [options] 要隐藏有关已过时选项的警告, 请使用 -Xlint:-options。
    [javac] 3 个警告
-post-compile:
-dex:
      [dex] input: D:\workspace\CalculatorAutoTest\bin\classes
      [dex] Found Deleted Target File
      [dex] Converting compiled files and external libraries into D:\workspace\CalculatorAutoTest\bin\classes.dex...
-post-dex:
-jar:
      [jar] Building jar: D:\workspace\CalculatorAutoTest\bin\CalculatorAutoTest.jar
-post-jar:
build:
BUILD SUCCESSFUL
Total time: 2 seconds
可见生产一个 路径为:[jar] Building jar: D:\workspace\CalculatorAutoTest\bin\CalculatorAutoTest.jar
下面还需要将这个jar文件拷贝到手机的 /data/local/tmp/ 目录中,拷贝操作可以通过一下命令实现:
C:\Users\kanglimin>adb push D:\workspace\CalculatorAutoTest\bin\CalculatorAutoTest.jar /data/local/tmp
运行jar
C:\Users\kanglimin>adb shell uiautomator runtest CalculatorAutoTest.jar -c xzy.test.uiautomator.CalTest
运行结果:
108 KB/s (1889 bytes in 0.017s)

C:\Users\kanglimin>adb shell uiautomator runtest CalculatorAutoTest.jar -c xzy.
est.uiautomator.CalTest
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
xzy.test.uiautomator.CalTest:
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=testDemo
INSTRUMENTATION_STATUS: class=xzy.test.uiautomator.CalTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
########aaaaaaatext is :2INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=testDemo
INSTRUMENTATION_STATUS: class=xzy.test.uiautomator.CalTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: stream=
Test results for WatcherResultPrinter=.
Time: 7.192

OK (1 test)


 
 
 
 
 
 
 
 
 
 
 
 
 
分享到:
评论

相关推荐

    Android UiAutomator 自动化测试

    Instrumentation是早期Google提供的Android自动化测试工具类 UiAutomator也是Android提供的自动化测试框架,基本上支持所有的Android事件操作 Espresso,Android Studio工程,以apk的形式执行测试 UiAutomator2,...

    Android 自动化测试框架

    Android 自动化测试框架 一、Monkey  是Android SDK自带的测试工具,是一个命令行工具,可以运行在模拟器中或者实际设备中,它向系统发送伪随机的用户事件流(如按键输入,触摸屏输入,手势输入等),实现对正在...

    Uiautomator自动化框架

    教程名称:Uiautomator自动化框架课程目录:【】Android应用测试与调试实战【】Android自动化测试UIautomator-UiObject【】Android自动化测试UIautomator-UiScrollable【】Android自动化测试UIautomator-UiSelector...

    uiautomator2+pytest+allure进行Android的UI自动化测试

    使用uiautomator2+pytest+allure进行Android的UI自动化测试 测试携程旅行App,首页-机票-机票搜索模块 简介 使用uiautomator2+pytest+allure进行Android的UI自动化测试 环境搭建 pytest框架 pip install pytest ...

    Android自动化测试UIautomator-UiObject

    UI Automator 是 Android 提供的一个 UI 自动化测试框架,可以用来实现自动化测试。UiObject 是这个框架中最常用的工具之一,它可以代表应用程序中的某个 UI 元素,并提供了一系列方法帮助测试人员进行 UI 操作和...

    基于UIAutomator的Android UI自动化测试框架及其应用探索.pdf

    基于UIAutomator的Android UI自动化测试框架及其应用探索.pdf

    atxdemo:使用uiautomator2 + pytest + allure进行Android自动化测试

    简介使用uiautomator2 + pytest + allure进行Android的UI自动化测试环境搭建 pytest框架点安装pytest == 3.7魅力报告命令:py.test --alluredir=reportsallure generate reportsallure generate reports --...

    testng+cucumber+appium移动端自动化测试框架

    一个包含了testng+cucumber+appium的移动端自动化测试框架。 附件包含一个ieda工程以及appium需要的node.js和appium windows安装包 运行还需要jdk。请自行下载。 demo中使用了系统自带的计算器进行自动化测试。不同...

    Android App开发的自动化测试框架UI Automator使用教程

    UI Automator为Android程序的UI开发提供了测试环境,这里我们就来看一下Android App开发的自动化测试框架UI Automator使用教程,需要的朋友可以参考下

    appium-uiautomator2-driver:适用于Android UIAutomator2的Appium驱动程序

    Appium UiAutomator2驱动程序是针对Android设备的测试自动化框架。 Appium UiAutomator2驱动程序可自动运行本机,混合和移动Web应用程序,这些应用程序已在模拟器和真实设备上进行了测试。 Appium UiAutomator2驱动...

    CTS测试执行指导手册详细版

    CTS测试是一个基于uiautomator安卓原生自动化框架运行的自动化测试。通过CTS测试,保证系统的安全性和稳定性。 2. GTS介绍 GMS:Google MobileService,即谷歌移动服务。GMS是Google开发并推动Android的动力,也是...

    appium-uiautomator2-server-3.3.0

    Appium最初由Dan Cueller开发,用于利用Apple iOS的UI自动化框架对本机移动应用程序运行测试。使用与Selenium相同的语法,它共享Selenium通过移动浏览器自动与网站交互的能力,但另外提供了一种与移动应用程序特定的...

    测试样本:一系列样本,展示了用于自动化测试的不同框架和技术

    样本集合,展示了用于自动化测试的不同框架和技术。 浓咖啡样品 基本浓缩咖啡样品 显示如何扩展Espresso以匹配EditText的hint属性 为列表和AdapterViews展示Espresso的onData()入口点 - FragmentScenario与Espresso...

    uiautomatorviewer.jar

    Android 4.1发布的,uiautomator是用来做UI测试的。...自动化UI测试创建测试代码来执行测试任务,各种测试任务分别覆盖不同的使用场景,然后使用测试框架来运行这些测试任务。而uiautomator 就是你的自动化UI测试工具。

    UIautomator-Framework系统详细分析

    UIautomator-Framework系统详细分析 框架环境搭建,框架接口分析

    AndroidAutomationTools:UIAutomator 入门框架。 附带一些有用的功能

    Android自动化工具 用于创建 UIAutomator 和 Robotium 脚本的资源 包括帮助您入门的骨架和用于有用扩展的库函数。

    Auto.js:A UiAutomator on android, does not need root access(安卓平台上JavaScript自动化工具)

    与Google的UI测试框架UiAutomator相似,您也可以将其用作移动UI测试框架 使用JavaScript作为脚本语言,并支持代码完成,变量重命名,代码格式,搜索和替换等功能,并且可以用作JavaScript IDE 支持使用e4x编写接口...

    android-resource:一些非常有用的android开发人员资源的集合

    全球领先的Android:trade_mark:测试自动化框架https://code.google.com/p/robotium/ uiautomator uiautomator测试框架可让您通过创建可在一个或多个设备上针对您的应用运行的自动化功能性UI测试用例,来有效地测试...

Global site tag (gtag.js) - Google Analytics