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. [C++]2-3 倒三角形

    /* 倒三角形(Triangle) 输入正整数n<=20,输出一个n层的倒等腰三角形. 0 ######### 9 = 2* n-1 1 ####### 7 = 2*(n-1)-1 2 #### ...

  2. Codeforces Round #536 (Div. 2)

    前言 如您所见这又是一篇咕了的文章,直接咕了10天 好久没打CF了 所以还是个蓝名菜鸡 机房所有人都紫名及以上了,wtcl 这次前4题这么水虽然不知道为什么花了1h,结果不知道为什么搞到一半出锅了,后 ...

  3. 玩转Google

    前言: 网上浏览信息,用百度搜索的时候,第一页都是广告,真是槽心到极点,果断放弃百度,现在用谷歌是真舒服,用起一句话用好谷歌.用好搜索引擎.你可以打开世界的大门! 加入特殊字符搜索: | 同时搜索关键 ...

  4. 代码管理工具Git的安装及使用

    一:Git是什么? Git是目前世界上最先进的分布式版本控制系统. 二:SVN与Git的最主要的区别? SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以 ...

  5. day 8 - 2 文件操作练习

    注册登录 需求: 1.对账号密码的长度进行限制并不允许出现特殊字符 2.把账号密码储存进文件中 3.密码最多输入错误三次 #分别判断注册时账号密码的长度与特殊字符 flag=1 while flag: ...

  6. #6278. 数列分块入门 2(询问区间内小于某个值 xx 的元素个数)

    题目链接:https://loj.ac/problem/6278 题目大意:中文题目 具体思路:数列分块模板题,对于更新的时候,我们通过一个辅助数组来进行,对于原始的数组,我们只是用来加减,然后这个辅 ...

  7. div与 css--绝对定位和相对定位

    <10-页面美化专题-div和css基础.avi> Border-topPadding-topMargin-topFloat Position #clear{Both:clear;}//浮 ...

  8. Network Architecture Search Survey

  9. 为什么要重写equals和hashcode方法

    equals hashcode  当新建一个java类时,需要重写equals和hashcode方法,大家都知道!但是,为什么要重写呢? 需要保证对象调用equals方法为true时,hashcode ...

  10. MD5 与 SHA 在 Delphi 中函数实现,加密密码

    MD5 与 SHA 在 Delphi 中函数实现. 为了加密密码,必须使用一种算法,查询资料,比较好的方法是使用:MD5等算法,参考:Delphi XE8 支持MD5 第一种方式是:引用 System ...