写在最前面,因为我们的项目使用aar模块化打包,之前写的appium程序没法用了,原因是页面的id无法识别了。现在正在看怎么处理,or其他类似的框架都是怎么干活的。用了好几天,终于把uiautomator调试通过了。汗,真心复杂。。。
文档:
http://developer.android.com/tools/help/uiautomator/index.html
http://developer.android.com/tools/testing/testing_ui.html
作为亲儿子UiAutomator随Android同步推出,随Android版本同步升级,经过多次迭代目前已经相当稳定。 相比MonkeyRunner,UiAutomator接口丰富易用,可以支持所有Android事件操作,事件操作不依赖于控件坐标,可以通过断言和截图验证正确性,非常适合做UI测试。
UIAutomator不需要测试人员了解代码实现细节,属于功能和黑盒测试。测试代码结构简单,编写容易,学习曲线低。基于JAVA,一次编译可以运行于所有Android设备。
注: UIAutomator不适合OpenGL和HTML为主的程序,因为这类程序未使用Android的view体系。并且手机版本需要在4.1之上。
uiautomatorviewer位于sdk/tools目录下,可以扫描、分析待测试应用界面,分析结果可以导出为xml与截图。通过该工具可以分析出UI控件的id,text,focusable等等各种属性,甚至布局上的层次关系。
可以通过./uiautomatorviewer
启动该工具。
uiautomator是一个包含一套UI测试API,和支持运行测试程序的JAR包。该JAR包位于
sdk/platforms/android-*/uiautomator.jar.
使用时需要注意自己的SDK版本需要大于16, SDK Tools版本需要大于21.
1.创建一个Java工程
File-->New-->Java Project 输入工程名称,例如CalculatorAutoTest. 点击Finish
2.添加必要的Jar包
在Project Explorer中右击刚刚创建的这个工程,选择 Properties-->Java build Path添加如下JAR包:
a.选择Add library -->JUnit选择Junit4
b.选择Add External JARS, 选择sdk/platforms/android-*/
目录下的uiautomator.jar
和android.jar
,路径中的 *
请使用自己下载的最新版本。
3.File-->new-->Class创建一个新的文件,并确保该文件继承自UiAutomatorTestCase.
public class CalTest extends UiAutomatorTestCase {
}
4.编写测试用例,通常可以为一个测试用例编写一个单独的方法:
package automatortest1;
import java.io.IOException;
import android.os.RemoteException;
import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.testrunner.UiAutomatorTestCase;
public class UIAutomatorTest extends UiAutomatorTestCase{
public static final String MAIN_ACTIVITY_NAME =
"com.tmall.wireless/.module.launchalert.TMLaunchAlertActivity";
//用了天猫的启动activity做实验
public void testStart() throws RemoteException{
UiDevice device = getUiDevice();
// 唤醒屏幕
device.wakeUp();
assertTrue("screenOn: can't wakeup", device.isScreenOn());
// 启动App
try {
Runtime.getRuntime().exec(
"am start -n "+MAIN_ACTIVITY_NAME);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sleep(2000);
}
}
5,编译测试用例准备
a,执行 android list target
获取目标平台对应的id
D:\AndroidSDK\sdk\tools>android list targets
Available Android targets:
----------
id: 1 or "android-9"
Name: Android 2.3.1
Type: Platform
API level: 9
Revision: 2
Skins: HVGA, QVGA, WQVGA400, WQVGA432, WVGA800 (default), WVGA854
Tag/ABIs : default/armeabi
----------
id: 10 or "android-18"
Name: Android 4.3.1
Type: Platform
API level: 18
Revision: 3
Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default)
Tag/ABIs : default/armeabi-v7a
----------
id: 21 or "Google Inc.:Google APIs:18"
Name: Google APIs
Type: Add-On
Vendor: Google Inc.
Revision: 3
Description: Android + Google APIs
Based on Android 4.3.1 (API level 18)
Libraries:
* com.google.android.media.effects (effects.jar)
Collection of video effects
* com.android.future.usb.accessory (usb.jar)
API for USB Accessories
* com.google.android.maps (maps.jar)
API for Google Maps
Skins: HVGA, QVGA, WQVGA400, WQVGA432, WSVGA, WVGA800 (default),xxx
Tag/ABIs : default/armeabi-v7a
这里我使用的android4.3,对应id=10
b,uiautomator生成build.xml
<android-sdk>/tools/android create uitest-project -n <projectName> -t targetId -p <projectPath>
命令使用具体如下:
D:\AndroidSDK\sdk\tools>android create uitest-project -n automatortest1 -t 10
-p "D:\\Users\\workspace\\automatortest1"
Added file D:\Users\workspace\automatortest1\build.xml
6,执行 ant build
最开始生成的build.xml中,default是help,修改成build。
<project name="automatortest1" default="build">
然后使用命令行或者在IDE中执行ant build
.
7,将生成的jar包放到app中
D:\Users\workspace\automatortest1\bin>adb push automatortest1.jar /data/local/tmp/
163 KB/s (1336 bytes in 0.008s)
8,执行
D:\Users\workspace\automatortest1\bin>adb shell uiautomator runtest automatortest1.jar
-e outputFormat simple -c automatortest1.UIAutomatorTest#testSt
art
.
Time: 5.048
OK (1 test)
D:\AndroidSDK\sdk\tools>android -h
Usage:
android [global options] action [action options]
Global options:
-h --help : Help on a specific command.
-v --verbose : Verbose mode, shows errors, warnings and all messages.
--clear-cache: Clear the SDK Manager repository manifest cache.
-s --silent : Silent mode, shows errors only.
Valid actions are composed of a verb and an optional direct object:
- sdk : Displays the SDK Manager window.
- avd : Displays the AVD Manager window.
- list : Lists existing targets or virtual devices.
- list avd : Lists existing Android Virtual Devices.
- list target : Lists existing targets.
- list device : Lists existing devices.
- list sdk : Lists remote SDK repository.
- create avd : Creates a new Android Virtual Device.
- move avd : Moves or renames an Android Virtual Device.
- delete avd : Deletes an Android Virtual Device.
- update avd : Updates an Android Virtual Device to match the folders
of a new SDK.
- create project : Creates a new Android project.
- update project : Updates an Android project (must already have an
AndroidManifest.xml).
- create test-project : Creates a new Android project for a test package.
- update test-project : Updates the Android project for a test package (must
already have an AndroidManifest.xml).
- create lib-project : Creates a new Android library project.
- update lib-project : Updates an Android library project (must already have
an AndroidManifest.xml).
- create uitest-project: Creates a new UI test project.
- update adb : Updates adb to support the USB devices declared in the
SDK add-ons.
- update sdk : Updates the SDK by suggesting new platforms to install
if available.
执行 android list target
即可获得已经安装的SDK的平台版本。