UIAutomator 1.X 的使用准备
1.在Android 4.1发布的时候包含了一种新的测试工具–uiautomator 首先介绍UIAutomator测试框架的UI工具:uiautomatorviewer
uiautomatorviewer位于sdk/tools目录下,可以扫描、分析待测试应用界面,分析结果可以导出为xml与截图。
通过该工具可以分析出UI控件的id,text,focusable等等各种属性,甚至布局上的层次关系。
可以通过./uiautomatorviewer启动该工具。
工具及原料准备(a.JDK B.集成ADT的Eclipse开发工具 B.SDK)
uiautomator是一个包含一套UI测试API,和支持运行测试程序的JAR包。该JAR包位于sdk/platforms/android-*/uiautomator.jar.
使用时需要注意自己的SDK版本需要大于16, SDK Tools版本需要大于21.
2.开启Eclipse,新建Java Project【Automator】,并设置JRE版本.注意,非Android Project!
3.添加JUnit库--【Java Build Path 】-- Add library -- JUnit
4.添加Android库
找到路径Target平台【Android-sdk\platforms\android-19\】下面的android.jar和uiautomator.jar添加进来:
d://SDK/platforms/android-23
5.在src中添加包,然后添加JAVA文件
测试代码编写过程:
(1).建立一个java项目,新建lib文件夹。
(2).拷贝android.jar和uiautomator.jar到lib文件夹(jar文件的地址:D:\Program Files\adt-bundle-windows-x86_64-20140702\sdk\platforms\android-23)。
(3).开始编写代码,新建一个类继承 UiAutomatorTestCase
package com.zyn.uiautomatortest;
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 Test extends UiAutomatorTestCase {
//注意方法名要以 test开头
public void testDemo() throws UiObjectNotFoundException{
UiDevice.getInstance().pressHome();//回到主界面
UiObject browserObject = new UiObject(new UiSelector().text("UC浏览器"));
browserObject.clickAndWaitForNewWindow();//点击等待新窗口出现
UiObject editObject = new UiObject(new UiSelector().className("android.view.View"));
editObject.clickAndWaitForNewWindow();
UiObject inputObject = new UiObject(new UiSelector().text("搜索或输入网址"));
inputObject.setText("www.baidu.com");
UiDevice.getInstance().pressEnter();//敲下回车
sleep(2000);//等待两秒
getUiDevice().pressBack();// 模拟点击返回键
}
}
6.
(1)目前-- Automator 工程例如在: d://work//JavaTestAutoMator
(2) package + class : com.example.test.test
(3) CMD进入\Android-sdk\tools\目录下,运行命令:android list target
查看API大于15的SDK的ID值 (第一行 ),
然后看Automator当前Target平台对应的id 是几;------此处要求API大于15,原因在于Google引入该AutomatorAPI是在API15之后。
7. 创建build文件
仍然在\Android-sdk\tools\目录下,运行命令:
android create uitest-project -n demo(demo是jar包的名字) -t <android-sdk-ID 第一个SDK版本的id ##查看SDKid列表:android list targets## > -p <path>(k:\UIworkspace\Demo1 这里表示项目地址)
比如:
android create uitest-project -n Automator -t 1 -p D:\workspace-eclipse-non\Automator
上面的name就是将来生成的jar包的名字,可以自己定义,android-sdk-ID就是上面看到的1;path是Eclipse新建的工程的路径;
运行命令后,将会在工程的根目录下生成build.xml文件。如果没生成,请检查以上的步骤。
8.编译生成jar
.将项目中生成的build.xml打开,修改第二排中 default=”help” 为 default=”build”
//点击绿色三角形运行。生成jar文件。
然后运行ant build,将使用ant编译生成jar,成功将会提示:
build successful
然后回在bin目录下生成jar文件
9.将jar包push到手机中。
adb push 文件全路径 /data/local/tmp/ 回车
启动测试:在cmd下输入命令
adb shell uiautomator runtest demo.jar -c 完整的类名(包名+类名)
例如:
adb push D:\workspace-eclipse-non\Automator\bin\Automator.jar data/local/tmp
adb shell uiautomator runtest Automator.jar -c com.example.test.test
UIAutomator 1.X 使用详细 http://blog.chengyunfeng.com/?p=504
基于UiAutomator2.0自动化测试框架搭建
一、准备工作
在开始自己项目的自动化测试之前,我们最好已经完成了下面的准备工作:
1、熟悉待测应用
对待测应用整体功能和业务逻辑有比较清晰的认识。
2、编写应用的自动化测试用例大纲
这一步主要是让我们在编码前,按应用的功能或者操作流程将可实施自动化测试的部分划分出来。
3、选择合适的工具和框架
这里就不用像Web端那样有那么多选择了,基于UiAutomator2.0的话,
使用Android Studio作为开发工具,默认使用的是Junit4来管理用例,不过min SDK还是要选择的,至少得是16以上吧,一般推荐18。
4、在Module:app里的build.gradle,新增 androidTestCompile xxxxxx
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.0', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.+'
testCompile 'junit:junit:4.12'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'
}
二、实现步骤
在androidTest目录下:
1>创建测试用例的父类BaseCase类:
每个测试用例类都继承自BaseCase类,那么就可以将用例中的公共部分放到BaseCase类中去实现,从而简化代码结构和减少代码冗余,比如:
a. 在BaseCase类中实现Junit4中的@BeforeClass,
@AfterClass(整个测试项目中只运行一次,它们对应的方法必须是静态方法)和@Before,@After(每个测试方法开始前后都运行一次)注解对应的方法;
b. 一些常用的与用例相关的方法;
c. 公共变量等。
public class BaseCase {
public static String pkgName= "";
public static UIDevice mDevice;
@BeforeClass
public static void setup(){
//测试项目开始前运行(仅一次),如清除缓存数据、安装应用等
}
@AfterClass
public static void teardown(){
//测试项目结束时运行(仅一次),如卸载应用等
}
@Before
public void initTest(){
//测试开始前运行(每个@Test运行前都会运行一次),如打开应用等
}
@After
public void close(){
//测试结束后(每个@Test结束后都会运行一次),如退出应用等
}
2> 连接设备,点击运行测试代码,就会看见如下Log日志:
$ adb push .......app\build\outputs\apk\app-debug.apk /data/local/tmp/com.example.mandasun.helloui2
$ adb shell pm install -r "/data/local/tmp/......."
pkg: /data/local/tmp/......
Success
$ adb push ........\app\build\outputs\apk\app-debug-androidTest-unaligned.apk /data/local/tmp/com.example.mandasun.helloui2.test
$ adb shell pm install -r "/data/local/tmp/.......test"
pkg: /data/local/tmp/.......test
Success
Running tests
$ adb shell am instrument -w -r -e package ...... -e debug false .......test/android.support.test.runner.AndroidJUnitRunner
Client not ready yet..
Started running tests
Tests ran to completion.
UiAutomator2.0 和1.x 的区别 https://www.cnblogs.com/insist8089/p/6898181.html
1 新增接口:UiObject2、Until、By、BySelector
2 引入方式:2.0中,com.android.uiautomator.core.* 引入方式被废弃。
1.x
import com.android.uiautomator.core.UiCollection;
import com.android.uiautomator.core.UiDevice;
import com.android.uiautomator.core.UiObject;
2.x
import android.support.test.uiautomator.by;
import android.support.test.uiautomator.bySelector;
import android.support.test.uiautomator.UiDevice;
3 构建系统:Maven 和/或 Ant(1.x);Gradle(2.0)
4 产生的测试包的形式:从zip /jar(1.x) 到 apk(2.0)
5 在本地环境以adb命令运行UIAutomator测试,启动方式的差别:
adb shell uiautomator runtest UiTest.jar -c package.name.ClassName(1.x)
adb shell am instrument -e class com.example.app.MyTest com.example.app.test/android.support.test.runner.AndroidJUnitRunner(2.0)
6 Testdroid云端服务中工程的类型(Testdroid 是一项帮助开发者从事手机应用测试的云端服务,由 Bitbar 公司推出。开发者们可以将开发完毕等待测试的应用上传到 Testdriod ,该服务提供了 200 多种不同移动端设备,以供测试,包括智能手机、平板电脑甚至是相机。类似的服务有:TestObject,testCloud。)
用2.0,从云端服务中以apk形式下载2.0的测试包,可以通过的普通的Android project来运行;
用1.x,从云端服务中以apk形式下载2.0的测试包,需要创建一个Android UIAutomator project来运行。
7 能否使用Android服务及接口? 1.x~不能;2.0~能。
8 log输出? 使用System.out.print输出流回显至执行端(1.x); 输出至Logcat(2.0)
9 执行?测试用例无需继承于任何父类,方法名不限,使用注解 Annotation进行(2.0); 需要继承UiAutomatorTestCase,测试方法需要以test开头(1.x)