一、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、代码实现自动编译和运行
按照上述的执行步骤,是不是觉得要编译运行一次代码是一件很麻烦的事。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执行自动化测试。
最后,本文写得较简单,后续有空会继续补充,好困,晚安~