Android自动化之uiautomator(一)

一、uiautomator简介

Android SDK提供下述工具来支持自动化的功能界面测试:

1、uiautomatorviewer:扫描、分析待测应用的UI组件的图像工具。

2、uiautomator:包含创建定制功能界面测试API和自动化运行测试用例的引擎的JAVA类库。

优点:可以对所有操作进行自动化,操作简单;

缺点:Android版本需要高于4.0。

 

二、Uiautomator常用API了解

以下是uiautomator最基本最常用到的三个类,这里只是简单地介绍这三个类的作用,后续本人还会写相关随笔详细说明。

1、UiDevice:用于获取设备的各种状态。

获取设备信息:屏幕分辨率、选装状态、亮灭屏......

操作:按键、坐标操作、滑动、拖拽、截图......

监听器功能

2、UiSelector:通过组件的各种属性与节点关系定位组件。

涉及到的android基础:Android常用组件、Android组件的属性

3、UiObject:代表一个组件对象,对象有许多模拟实际操作手机的方法和属性。

文本的编辑

手势操作

获取子类

判断对象是否存在

......

 

 三、使用uiautomator实现自动化

(一)环境搭建

1、配置java开发环境

(1)安装JDK

(2)配置环境变量

JAVA_HOME:jdk的安装目录

CLASSPATH:.%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

PATH:;%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin

[验证配置是否成功]cmd:java -version

 

2、配置Android环境

(1)配置ANDROID_SDK_HOME环境变量

(2)配置PATH路径

ANDROID_SDK_HOME:android-SDK-windows的路径

PATH:.;%ANDROID_SDK_HOME%\platform-tools;%ANDROID_SDK_HOME%\tools;

[验证配置是否成功]cmd:adb

 

3、配置ANT环境

(1)配置ANT_HOME环境变量

(2)配置PATH路径

ANT_HOME:C:\develop\apache-ant-1.9.4

Path: ;%ANT_HOME%\bin

 [验证配置是否成功]cmd:ant -version

 

4、开发工具

eclipse(这里不要用android-studio哦,往下看就知道原因了。)

 

(二)创建测试用例

1、eclipse创建java工程,工程/libs/-->导入 android.jar和uiautomator.jar工具包,执行Build path操作将两个工具包导入Library。

说明:两个工具包所在路径:\sdk\platforms\android-20。

2、在工程中创建测试类,继承UiAutomatorTestCase类。

3、在类中创建测试方法(函数),这里一个测试方法一般就等同于我们待执行的一条测试用例,我们会在该测试方法中使用uiautomator的相关api来实现用例的自动化。

由于uiautomator使用的是Junit3标准,所以测试用例的方法名必须遵循Junit3的规则以test开头来命名。

e.g.

 

(三)编译和运行

1、执行步骤

开启cmd.exe执行以下命令,完成自动化代码的编译和运行。

 

(1)创建build文件

>cd <project-workspace-path>

>android create uitest-project -n <jars> -t 1 -p <workspace path>

【说明】

>:只是用来指代是cmd命令行

-n:指定当前工程最终发布的jar包名。

-t:编译使用的SDK版本在你PC中的targetId号,可通过android list命令查询。(这里有坑,一般移植代码时会踩到,不过踩踩记忆更深,后续会有随笔说明。)

<project-workspace-path>:当前工程的工作空间路径。可通过Eclipse/对工程右键/Properties/Resource/Location查看。

 

(2)修改build文件

进入工程对应的工作空间路径,打开build.xml文件,将第二行的help修改为build。

 

(3)运行build文件,开始编译,生成jar包

>ant -buildfile <build.xml文件路径>

【说明】

编译完成后,DOS窗口会输出编译信息:倒数第5行[jar]Building jar: C:\...\你指定的jar包名.jar。即生成了指定的jar包,在下一步中将该jar包导入手机运行测试用例。

 

(4)push文件(将打好的jar包传入手机)

>adb push <path_to_output_jar> /data/local/tmp/

 

(5)运行测试

>adb shell uiautomator runtest <jars> --nohup -c <包名.类名>#[test方法] -e <NAME> <VALUE>

【说明】

jars:即第(1)步中指定的<jars>。

-c:test方法所在的 包名.类名;可以使用多个-c,如 -c test1 -c test2 -c test3...来指定按照test1-->test2-->test3...顺序执行测试方法。

--nohup:指定此参数,可断开PC进行运行测试用例。

-e:传入一个键值对到测试程序中,可用于一些需要变化的参数的传入。(可省略该参数,后续补充其用法)


2、停止uiautomator进程的运行
>adb shell ps|find "uiautomator"
>adb shell kill <uiautomator的进程号>
【说明】
ps|find "uiautomator"  查询uiautomator的进程号
kill +进程号 直接停止指定的进程

3、代码实现自动编译和运行

按照上述的执行步骤,是不是觉得要编译运行一次代码是一件很麻烦的事。Don’t worry,这里就介绍如何通过代码来实现自动编译和运行,解放双手不再手工执行命令。

(1)执行cmd命令

String cmd = “cmd /c +待执行的cmd命令”;

Process p = Runtime.getRuntime().exec(cmd); //没错,就是这么简单

(2)记录控制台输出的日志(日志是一个很重要的东西,比截屏记录现场更有用,给开发定位问题提供更直接的依据。)

InputStream input = p.getInputStream(); //获取Process的正确信息输出流

InputStream errorInput = p.getErrorString(); //获取Process的错误信息输出流

 

本文的目标:简单了解uiautomator,这里不多啰嗦那些概念性的东西。学会如何使用uiautomator执行自动化测试。

最后,本文写得较简单,后续有空会继续补充~

阅读更多
个人分类: uiautomator
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭