简介
Uiautomator是Android4.1发布的一个测试框架,它可以用来做UI的测试,可以模拟用户的日常操作,如拨打电话,接听电话,发送短信。拍照等等 使用Uiautomator来做自动化测试不需要了解程序的内部结构,不需要程序的源码。不需要对手机做任何额外的设置。 简单来说,UIautomator就是一个用来对UI进行验证的自动化框架,可以模拟任何用户的操作。 本WIKI将简单的介绍Uiautomator的环境搭建和书写一个简单的例子。
测试流程
- 安装测试用的app
- 根据软件来编写测试脚本
- 编译测试脚本并推送到手机
- 运行测试脚本并分析测试报告
环境搭建
- 下载安装JDK
- 配置Java环境
- 下载AndroidSDK
- 配置Android 环境
- 下载ANT
- 配置ANT环境变量
- 下载JAVA IDE,如elcipse
所需工具下载链接:\\10.120.10.100\ckt_cd_share\Test\Training\Harrier\AutoTesting Tools
创建第一个脚本
新建项目
在环境配置好了之后我们来写一个简单的脚本,这里一eclipse ide为例。
- 点击File->New->Java Project(见图1)然后创建一个Java Porject
- 填入Project name然后点击完成(见图2)
添加支持的lib文件
- 在项目名上点击右键(这里项目名为Demo),选择新建一个文件夹用来放库文件,然后选择文件夹(见图3)
- 进入Android SDK的platforms\android-22(根据实际情况选择),复制android.jar和uiautomator.jar,并粘贴上一步创建的lib文件夹里
- 把android和uiautomator.jar添加到Build path里。(见图4)
新建包
- 在项目上点右键,新建一个包。(见图5)
新建类
- 在新建的包上点右键,新建一个类,并输入类名(如Demo),并把Superclass选择为:com.android.uiautomator.testrunner.UiAutomatorTestCase(见图6)
- 点击完成后的代码如下:
package com.demo; import com.android.uiautomator.testrunner.UiAutomatorTestCase; public class Demo extends UiAutomatorTestCase { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub } }
给10086打个电话
这里我们将启动电话并打电话给10086.首先我们来看看在平时测试中我们要打电话给10086是咋做的。
- 点开电话app
- 输入10086
- 点击拨号。
说到这里,也许您就明白了。自动化的操作也是一样的,首先,我们打开电话app,然后输入电话号码,点击拨号。那具体该咋做呢?接下来我们一起来实现打电话给10086.
首先我们需要了解一下uiautomator的界面分析工具:Uiautomatorviewer。通过它我们可以看到界面每个元素的对应信息,如文字属性,描述,资源id。通过对应的属性我们可以在手机上找到对应的控件(如电话的text属性是phone,我可以让自动化脚本点击phone打开电话app)
- Uiautomatorviewer的界面如下图:
使用鼠标在界面区域里选择某个图标,会在空间属性区域里显示所选择对象的属性,常见的属性有,文字属性,描述,资源id等,具体信息在后面的wiki在介绍。
层次结构是您所选择的对象在页面的哪一个层级(android的页面布局是一个xml的文件)。使用Uiautomator来写自动化脚本,需要您能熟练的使用控件的各种属性。
- 选择电话图标,我们可以看到电话图标对应的text属性是Phone(系统语言为英语)
打电话的脚本
这里就做简单的演示,更多的细节在后续的wiki里进行分享。
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 Demo extends UiAutomatorTestCase { public void testPhone() throws UiObjectNotFoundException { // 在当前界面查找text名为Phone的对象,并把他放到名为phone的变量里 UiObject phone = new UiObject(new UiSelector().text("Phone")); // 点击打开Phone。 phone.clickAndWaitForNewWindow(); // 打开拨号盘 UiObject dial = new UiObject( new UiSelector() .resourceId("com.android.dialer:id/floating_action_button")); dial.clickAndWaitForNewWindow(); // 找到对应的按键和拨号键 UiObject one = new UiObject( new UiSelector().resourceId("com.android.dialer:id/one")); UiObject zero1 = new UiObject( new UiSelector().resourceId("com.android.dialer:id/zero")); UiObject zero2 = new UiObject( new UiSelector().resourceId("com.android.dialer:id/zero")); UiObject eight = new UiObject( new UiSelector().resourceId("com.android.dialer:id/eight")); UiObject six = new UiObject( new UiSelector().resourceId("com.android.dialer:id/six")); UiObject call = new UiObject( new UiSelector() .resourceId("com.android.dialer:id/dialpad_floating_action_button")); // 开始点击对应的按键 one.click(); //延迟0.5秒 sleep(500); zero1.click(); sleep(500); zero2.click(); sleep(500); eight.click(); sleep(500); six.click(); sleep(500); call.click(); } }
打包运行脚本
打包脚本:
打包的命令为:android create uitest-project -n <name> -t 1 -p <path> <name>是包含测试代码的项目名称,<path>是包含测试代码的项目文件路径。- t后面的1是Android sdk版本id 例:android create uitest-project -n demo -t 2 -p "O:\0.code\Demo" 查看android id: android list,然后选择api大于16的即可。
安装脚本:
adb push <path>/bin/<name>.jar /data/local/tmp/ 如:adb push "O:\0.code\Demo\bin\demo.jar" /data/local/tmp/ 只需要把脚本push到手机的data/local/tmp/目录即可 运行脚本:adb shell uiautomator runtest xxxx.jar -c xxx方法。 如:adb shell uiautomator runtest demo.jar -c com.demo.Demo#testPhone