UiAutomator是一个做UI测试的自动化框架。《Android自动化测试框架》中已有详细介绍,这里就不再累赘了。

一、首先了解自动化测试流程

  • 自动化需求分析
  • 测试用例设计
  • 自动化框架搭建
  • 脚本编写
  • 测试运行
  • 结果分析

二、自动化测试框架的搭建

1.JDK 1.6以上

2.SDK (android sdk tools  revision21 or higher;android sdk platform API 16 or higher )

3.Eclipse (adt)

4.ANT

  接下来环境变量配置。1-3的环境变量配置详见《搭建Android开发环境》。这里讲一下ANT的环境变量配置。博主使用的eclipse是adt-bundle,也就是已经集成好的工具。先在Eclipse目录下搜索ant.bat,找到文件的位置。配置好变量之后,运行ant -h显示如图即配置成功。

变量名:ANT_HOME  变量值:ant.bat的路径,例如:E:\adt\eclipse\plugins\org.apache.ant_1.8.3.v201301120609

变量名:Path      变量值:%ANT_HOME%\bin;

三、新建测试工程

1.打开eclipse,新建一个java工程->Package->Class

2.导入android.jar和uiautomator.jar包(路径:sdk\platforms\android-20\)

在libs文件中选择这两个jar包,点击右键出现Add to Build Path->点击即可

注:新建一个libs文件夹的目的是:将工程拷贝别人时,防止两个jar包的路径错误。

或者可以在工程名上点击右键->Properties->Java Build Path->Libraries

四、编写脚本

用例:唤醒设备->打开设置->点击显示->设置字体->超大->截图->回到home界面

1.在SDK的tools目录下找到uiautomatorviewer.bat文件

2.Android设备通过USB连接电脑

3.运行uiautomatorviewer.bat文件,点击Device ScreenShot进行查看详情

4.新建一个类继承UiAutomatorTestCase

5.编写脚本测试用例,方法名必须以test开头

附上脚本实例(比较简单):

package com.change.display;

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; public class Display extends UiAutomatorTestCase{
public void test1 () throws UiObjectNotFoundException, RemoteException, IOException{
//Device wake up
UiDevice.getInstance().wakeUp();
//sleep 3s
sleep(3000);
//Open the settings
Runtime.getRuntime().exec("am start -n com.android.settings/.Settings");
//Click on display
try{
UiObject display = new UiObject(new UiSelector().text("显示"));
display.click();
sleep(3000);
}catch(Exception e){
e.printStackTrace();
}
//Select font
UiObject fs = new UiObject(new UiSelector().text("字体大小"));
fs.clickAndWaitForNewWindow();
//Change font
UiObject size = new UiObject(new UiSelector().text("超大"));
size.click();
//Screen shot
sleep(3000);
Runtime.getRuntime().exec("screencap -p /sdcard/test.png");
//Enter Home interface
sleep(3000);
getUiDevice().pressHome(); } }

注意:在代码有中文。首先需要改编码格式(UTF-8),否则会出乱码现象且不能运行。(右键点击工程名-propertise-Resource)

五、编译运行脚本

1.创建编译文件:android create uitest-project -n <name> -t <target> -p <path>

-n <name>: name是指要生成的jar包的名字,自己定义的

-t <target>: target指的是android-sdk的ID。通过android list 查看id。

-p <path>指的是将要进行编译的工程路径。例如E:\adt\workspace\AutoTest

注:id 所对应的API (sdk)尽量与导入的android.jar包和uiautomator.jar所在的SDK版本一致。

实例:android create uitest-project -n ChangeFont.jar -t 1 -p E:\adt\workspace\AutoTest

运行后会在AutoTest目录下生成如下图的3个文件。

注:这里生成build.xml文件可能会出现如下图问题..Error:Could not access ....

解决:可删除已存在的build.xml文件,再进行编译

2.编译:在AutoTest目录下cmd 中运行ant build。若编译成功,最后会显示BUILD SUCCESS且在AutoTest\bin目录下生成ChangeFont.jar文件;

反之显示BUILD FAILED。

本实例在此步骤出现的问题:显示Class not found:javac 1.8

分析:Ant版本太低,可能与jdk 1.8不匹配。

解决:下载较新版本的Ant,配置好环境变量,重新运行ant build。编译成功

3.将打包好的jar包push到android设备中

adb  push E:\adt\workspaceAutoTest\bin\ChangeFont.jar  data/local/tmp

注:运行脚本时设备会优先到data/local/tmp下寻找jar包

4.运行,命令详解《Android “Command” from work summary

adb shell uiautomator runtest <jars> --nohup -c <packagename.classname>

实例:adb shell uiautomator runtest ChangeFont.jar --nohup -c com.change.display.Display

六、结果分析

先上图看下运行后显示的信息

解释:numtests 运行的所有用例数量  stream 信息流与错误流

id 运行框架  test 用例名字  class 用例完整类名

current 当前正在运行第几条  CODE 状态信息

1.运行前打印当前用例信息

INSTRUMENTATION_STATUS: numtests=1  

INSTRUMENTATION_STATUS: stream=

com.change.display.Display:

INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner

INSTRUMENTATION_STATUS: test=test1

INSTRUMENTATION_STATUS: class="com".change.display.Display

INSTRUMENTATION_STATUS: current=1

INSTRUMENTATION_STATUS_CODE: 1

2.运行时打印运行信息

INSTRUMENTATION_STATUS: numtests=1

INSTRUMENTATION_STATUS: stream=.

INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner

INSTRUMENTATION_STATUS: test=test1

INSTRUMENTATION_STATUS: class="com".change.display.Display

INSTRUMENTATION_STATUS: current=1

INSTRUMENTATION_STATUS_CODE: 0

3.运行后打印结果信息

INSTRUMENTATION_STATUS: stream=

Test results for WatcherResultPrinter=.

Time: 13.147

OK (1 test)

INSTRUMENTATION_STATUS_CODE: -1

附:如果要终止测试该怎么实现呢?

@echo off
for /f "tokens=2 " %%a in ('adb shell ps -A^| findstr uiautomator') do (
adb shell kill %%a > nul
) pause

UI Testing

Android UiAutomator的更多相关文章

  1. Android uiautomator gradle build system

    This will guide you through the steps to write your first uiautomator test using gradle as it build ...

  2. Android UiAutomator 自动化测试编译运行---新手2

    1.首先打开eclipse创建java项目

  3. Appium python自动化测试系列之Android UIAutomator终极定位(七)

    android uiautomator text定位 可能有人不知道为什么说android uiautomator是终极定位,而且android uiautomator和appium有什么关系呢?如果 ...

  4. Android UiAutomator - CTS Frame

    使用UiAutomator进行UI自动化测试后,生成的测试结果并不是很美观.为了生成一份好看的测试结果(报告),本文将使用CTS框架,当然也可以自己编写一份测试报告框架(如:生成html,excel报 ...

  5. Android UiAutomator 快速调试

    背景:在Eclipse中不能直接运行Uiautomator工程,所以每次编写一份用例都要进行手动输入命令,很烦.调试起来不仅繁琐还浪费时间.网上找到一份快速调试的代码UiAutomatorHelper ...

  6. python+Android+uiautomator的环境

    Python+Android+uiautomator的环境搭建 Python 下载适合系统的版本并安装,安装时勾选把路径加入path 验证:windows下打开cmd输入python 出现以下界面说明 ...

  7. Appium+python自动化(十二)- Android UIAutomator终极定位凶“胸”器(七)(超详解)

    简介 乍眼一看,小伙伴们觉得这部分其实在异性兄弟那里就做过介绍和分享了,其实不然,上次介绍和分享的大哥是uiautomatorviewer,是一款定位工具.今天介绍的是一个java库,提供执行自动化测 ...

  8. Android uiautomator实例使用

    转载自:http://blog.csdn.net/huiguixian/article/details/22398193 Android测试工具中,Monkey Runner只要简单几个指令即可,但他 ...

  9. android uiautomator自己主动化測试

    前提是自己电脑上配置好JDK,android和ant的环境 1.命令行下进入\Android-sdk\tools\文件夹下,执行命令:    android list    查看相应android版本 ...

随机推荐

  1. 采用shell脚本定时清理Tomcat日志

    1 Shell脚本案例 删除超过30天的日志文件 #!/bin/bash log_path=/mnt/software/apache-tomcat-.M22/logs d=`date +%Y-%m-% ...

  2. 深入理解内存模型JMM

    JMM(java memory model)java内存模型主要目标是定义程序中的变量,(此处所指的变量是实例字段.静态字段等,不包含局部变量和函数参数,因为这两种是线程私有无法共享)在虚拟机中存储到 ...

  3. EL表达式 EL函数 自定义el函数 《黑马程序员_超全面的JavaWeb视频教程vedio》

    \JavaWeb视频教程_day12_自定义标签JSTL标签库,java web之设计模式\day12_avi\12.EL入门.avi; EL表达式 1. EL是JSP内置的表达式语言! * jsp2 ...

  4. Django中间件基础笔记

    django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法. 在django项目的se ...

  5. 百度统计api 关于搜索引擎返回参数问题

    当 post 的参数: 返回参数为: 很显然没有搜索引擎的相关名称返回,无法分辨相关引擎的数据量: 改:去掉 gran 参数 正常: 关于百度统计文档有很多模糊不清的地方,可以发邮件给官方了解,一般处 ...

  6. 用Vue实现状态列表的操作涵盖所有的知识点

    用Vue实现状态列表的操作涵盖所有的知识点

  7. http 遇到中文表单 转码

    #include <string> #include <vector> inline BYTE toHex(const BYTE x) { return x>9?x+55 ...

  8. git与eclipse集成之代码冲突与解决

    1.1. 代码冲突与解决 目前使用git管理代码,产生冲突的原因,主要是当多个人向特性分支提交代码时,如果两个人修改了同一个文件,第二个人提交代码时就可能会冲突. 举例说明: 创建远程特性分支.远程个 ...

  9. 转载:UML学习(四)-----状态图(silent)

    原文:http://www.cnblogs.com/silent2012/archive/2011/11/01/2178278.html 状态图主要用于描述对象具有的各种状态.状态之间的转换过程以及触 ...

  10. ASP.NET MVC5入门3之登录验证

    参考: HTML页面模版: http://www.ui.cn/detail/70262.html(第38个) MVC后台代码参考: http://www.oschina.net/p/nfine 开发环 ...