UI Automator + Eclipse + Ant 编译安装运行

来源:互联网 发布:mac 截屏快捷键 编辑:程序博客网 时间:2024/06/11 12:53

1 环境准备

  • Android开发环境的准备,首先通过ui automator viewer的测试,可以获取到屏幕的元素
    见:http://blog.csdn.net/ericyue83/article/details/48375005
  • Eclispe 和 Ant安装并配置
  • 准备测试设备,本人通过真实设备小米手机作为测试对象

2 创建Eclipse项目

  • 打开Eclispe,创建一个Java Project(项目名:UIAutomatorTestCaseDemo)
  • 增加android.jar,uiautomator.jar到项目的external jar中
    ( jar在本机的如下类似目录:%android_home%\platforms\android-22)
  • 新建一个class(类名:testcasedemo,extend UiAutomatorTestCase),包名为com.lewi.demo

3 生成对应的build.xml文件

找到项目的目录,通过如下命令生成ant需要的build.xml文件。

D:\android>android create uitest-project -n UIAutomatorTestCaseDemo -t 1 -p D:\EclipseWorkspace\UIAutomatorTestCaseDemo
Added file D:\EclipseWorkspace\UIAutomatorTestCaseDemo\build.xml

运行完成后,在Eclispe中刷新项目,会看到新产生的build.xml文件。

4 配置ant targets

右键build.xml,选择Run As…选择,可以配置此项目的Targets。如下图:
这里写图片描述
默认情况,Target只选择了help。根据需要,我选择了help, build, install,test。当运行到test target提示
Launching tests from Ant not supported yet
跳转到%android_home%/tools/ant/uibuild.xml查看到,是以为当前版本不支持ant test。
根据uibuild.xml里面的提示,更新了自己的需要测试内容,再次ant test,测试通过。
更新后的uibuild.xml中test部分如下:

    <target name="test" description="Runs tests">        <!-- todo: fix this -->        <!--        <fail message="Launching tests from Ant not supported yet" />        -->         <exec executable="${adb}" failonerror="true">            <arg line="${adb.device.arg}" />            <arg value="shell" />            <arg value="uiautomator" />            <arg value="runtest" />            <arg value="${out.filename}" />            <arg value="-e" />            <arg value="class" />            <arg value="com.lewi.demo.testcasedemo" />        </exec>    </target>

目前已经搞定ant一键编译,安装和测试。在Eclipse 中,可以通过快捷方式Alt + Shift + X , Q 执行ant。

5 修改测试用例Demo,让其成为一个完成的用例。

  • 需求:通过滑屏解锁手机,然后点击Home键,检查主屏是否出现。
  • testcasedemo代码如下:
package com.lewi.demo;import android.os.RemoteException;import com.android.uiautomator.testrunner.UiAutomatorTestCase;import com.android.uiautomator.core.UiObject;import com.android.uiautomator.core.UiObjectNotFoundException;import com.android.uiautomator.core.UiScrollable;import com.android.uiautomator.core.UiSelector;public class testcasedemo extends UiAutomatorTestCase {    public void testDemo() throws UiObjectNotFoundException, InterruptedException, RemoteException {           if(!getUiDevice().isScreenOn()){            getUiDevice().wakeUp();            getUiDevice().swipe(250, 850, 250, 100, 2);        }        getUiDevice().waitForWindowUpdate(null, 2000);        getUiDevice().pressHome();        UiObject clockValidation = new UiObject(new UiSelector().packageName("com.miui.home"));         assertTrue("could not find clock",clockValidation.exists());        }}

使用ant进行build, install,test后,输出如下:

......compile:    [javac] Compiling 1 source file to D:\EclipseWorkspace\UIAutomatorTestCaseDemo\bin\classes-post-compile:-dex:      [dex] input: D:\EclipseWorkspace\UIAutomatorTestCaseDemo\bin\classes      [dex] Found Deleted Target File      [dex] Converting compiled files and external libraries into D:\EclipseWorkspace\UIAutomatorTestCaseDemo\bin\classes.dex...-post-dex:-jar:      [jar] Building jar: D:\EclipseWorkspace\UIAutomatorTestCaseDemo\bin\UIAutomatorTestCaseDemo.jar-post-jar:build:install:     [exec] 666 KB/s (1364 bytes in 0.002s)test:     [exec] open: Permission denied     [exec] open: Permission denied     [exec] INSTRUMENTATION_STATUS: numtests=1     [exec] INSTRUMENTATION_STATUS: stream=     [exec] com.lewi.demo.testcasedemo:     [exec] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner     [exec] INSTRUMENTATION_STATUS: test=testDemo     [exec] INSTRUMENTATION_STATUS: class=com.lewi.demo.testcasedemo     [exec] INSTRUMENTATION_STATUS: current=1     [exec] INSTRUMENTATION_STATUS_CODE: 1     [exec] INSTRUMENTATION_STATUS: numtests=1     [exec] INSTRUMENTATION_STATUS: stream=.     [exec] INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner     [exec] INSTRUMENTATION_STATUS: test=testDemo     [exec] INSTRUMENTATION_STATUS: class=com.lewi.demo.testcasedemo     [exec] INSTRUMENTATION_STATUS: current=1     [exec] INSTRUMENTATION_STATUS_CODE: 0     [exec] INSTRUMENTATION_STATUS: stream=     [exec] Test results for WatcherResultPrinter=.     [exec] Time: 3.603     [exec] OK (1 test)     [exec] INSTRUMENTATION_STATUS_CODE: -1BUILD SUCCESSFULTotal time: 7 seconds

当我们使用Ecllipse调试通过后,我们也可以使用命令行去部署和运行:
上次Jar包到测试设备: adb push UIAutomatorTestCaseDemo.jar /data/local/tmp
运行测试用例: adb shell uiautomator runtest UIAutomatorTestCaseDemo.jar -c com.lewi.demo.testcasedemo

6 Reference

http://android.toolib.net/tools/testing/testing_ui.html#creating

7 Todo List:

  • 如何处理中文信息
  • 如何把Demo代码共享到github
0 0