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. Centos6.8 下解决服务器被挖矿当肉鸡的方法

    刚上班发现有些服务跑不起来,进入服务器查看原因: 第一部分: 一,#top 因为是刚被我kill 掉一次,kill 掉等会还会自启动,之前yam 进程占cpu 是200% 二,# vim /etc/r ...

  2. Java基础_0302:类和对象

    定义类 class Book { // 定义一个新的类 String title; // 书的名字 double price; // 书的价格 /** * 输出对象完整信息 */ public voi ...

  3. 4-20模块 序列化模块 hashlib模块

    1,模块,py文件就是模块,py之所以好用就是模块多. 2,模块的分类: 1,内置模块,python 安装时自带的模块 2,扩展模块,别人写好的,需要安装之后,可以直接使用.itchat微信模块, b ...

  4. setInterval 传值设参数

    <script type="text/javascript" > window.onload=function(){ for(var i=1;i<3;i++){ ...

  5. 解决Nginx出现403 forbidden

    在之前我修改了nginx.conf,所以/home/ftpuser/www文件夹下应该有index.html或index.htm文件 将index.html或index.htm文件复制到/home/f ...

  6. Navicat for MySQL 12中文版 破解流程

    1.下载  Keygen_Patch 软件 下载地址 pass: saxz 2.启动 Keygen_Patch 软件 3.提示破解成功了,先别着急 4.运行 Navica  软件,输入注册码 5.断网 ...

  7. [转] Implementing a CNN for Text Classification in TensorFlow

    Github上的一个开源项目,文档讲得极清晰 Github - https://github.com/dennybritz/cnn-text-classification-tf 原文- http:// ...

  8. Python open() 函数

    open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=T) 模式 描述 r 以只读方 ...

  9. date命令以及date -d使用

    date -d '2 days ago' //显示2天前的时间,2019年 02月 10日 星期日 08:53:28 CST date -d "2 days ago" +%Y%m% ...

  10. k64 datasheet学习笔记11---Port Control and Interrupts (PORT)

    1.前言 Port Control and Interrupt (PORT)  模块提供了port control,digital filtering,和外部中断功能 每个pin的大部分功能可被独立配 ...