Android自动化测试主要分为Monkeyrunner、Rubotium、UiAutomator、Monkey等。主要特点:
1、Monkeyrunner:优点:操作最为简单,可以录制测试脚本,可视化操作;缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限;
2、Rubotium:主要针对某一个APK进行自动化测试,APK可以有源码,也可以没有源码,功能强大;缺点是针对APK操作,而且需要对APK重新签名(有工具),因此操作相对复杂;
3、UiAutomator:优点:可以对所有操作进行自动化,可以跨app操作。操作简单;缺点:Android版本需要高于4.0,无法根据控件ID操作,相对来说功能较为局限,但也够用了;
4、Monkey:准确来说,这不算是自动化测试,因为其只能产生随机的事件,无法按照既定的步骤操作;
由上面介绍可以有这样的结论:测试某个APK,可以选择Rubotium;测试过程可能涉及多个APK,选择UiAutomator;一些简单的测试,选择Monkeyrunner;
- 浏览: 370345 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
haoningabc:
ElementTree(元素树) -
喜欢蓝色的我:
会北京看看
报错django-session key重复 -
haoningabc:
康老师,好想你啊,博客都写这么多了
报错django-session key重复 -
100Continue:
是北京城给人压力太大了。哈哈
重新出发2013 -
100Continue:
喜欢蓝色的我 写道多谢 100Continue 交流,我在看看 ...
实现ab 多url并发的shell脚本
开始介绍uiautomator 框架
1.首先介绍UIAutomator测试框架的UI工具:uiautomatorviewer
uiautomatorviewer位于sdk/tools目录下,可以扫描、分析待测试应用界面,分析结果可以导出为xml与截图。通过该工具可以分析出UI控件的id,text,focusable等等各种属性,甚至布局上的层次关系。
windows下运行tools下的uiautomatorviewer.bat
liunx下运行./uiautomatorviewer 启动该工具。
liunx下运行./uiautomatorviewer 启动该工具。
上图uiautomatorviewer的运行截图,左上角两个手机模样的图标点击后就会开始截图并分析UI组件,分析后的结果如下方所示, 左侧为手机当前画面截图,右侧上部为view控件的层次关系,下部为当前选中控件的各种信息。
2.介绍uiautomator
uiautomator是一个包含一套UI测试API,和支持运行测试程序的JAR包。该JAR包位于sdk/platforms/android-* /uiautomator.jar. 使用时需要注意自己的SDK版本需要大于16, SDK Tools版本需要大于21.Android版本需要高于4.03.例子介绍
下面用一个例子介绍uiautomator的使用。在该例子中我们将启动计算器程序并测试1+1的结果是否正确。 以Eclipse为例: 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.
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 {
}
编写测试用例,通常可以为一个测试用例编写一个单独的方法
package xzy.test.uiautomator;
import java.io.IOException;
import android.os.RemoteException;
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;
//import org.junit.After;
//import org.junit.Before;
//import org.junit.Test;
//import static org.junit.Assert.*;
public class CalTest extends UiAutomatorTestCase {
//@Test
public void testDemo() throws UiObjectNotFoundException, RemoteException {
UiDevice device = getUiDevice();
// wakeup
device.wakeUp();
assertTrue("screenOn: can't wakeup", device.isScreenOn());
// come back HOME
System.out.print("########");
device.pressHome();
sleep(1000);
// running App
try {
Runtime.getRuntime().exec(
"am start -n com.android.calculator2/.Calculator");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sleep(1000);
UiObject oneButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/digit1"));
//UiObject oneButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/digit1"));
//UiObject oneButton = new UiObject(new UiSelector().classNameMatches("android.widget.Button").text("1"));
assertTrue("oneButton not found", oneButton.exists());
//assertEquals(oneButton.getText(),"1");
//assertEquals(oneButton.getText(),"one Button");
//"+"
UiObject plusButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/plus"));
assertTrue("plusButton not found", plusButton.exists());
System.out.print("aaaaaaa");
sleep(100);
UiObject equalButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/equal"));
assertTrue("equalButton not found", equalButton.exists());
oneButton.click();
sleep(100);
plusButton.click();
sleep(100);
oneButton.click();
equalButton.click();
sleep(100);
UiObject switcher = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/formula"));
//UiObject result = switcher.getChild(new UiSelector().index(0));
//System.out.print("text is :" + result.getText());
System.out.print("text is :" + switcher.getText());
assertTrue("result != 2", switcher.getText().equals("2"));
//assertTrue("result != 2", result.getText().equals("2"));
}
}
import java.io.IOException;
import android.os.RemoteException;
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;
//import org.junit.After;
//import org.junit.Before;
//import org.junit.Test;
//import static org.junit.Assert.*;
public class CalTest extends UiAutomatorTestCase {
//@Test
public void testDemo() throws UiObjectNotFoundException, RemoteException {
UiDevice device = getUiDevice();
// wakeup
device.wakeUp();
assertTrue("screenOn: can't wakeup", device.isScreenOn());
// come back HOME
System.out.print("########");
device.pressHome();
sleep(1000);
// running App
try {
Runtime.getRuntime().exec(
"am start -n com.android.calculator2/.Calculator");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sleep(1000);
UiObject oneButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/digit1"));
//UiObject oneButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/digit1"));
//UiObject oneButton = new UiObject(new UiSelector().classNameMatches("android.widget.Button").text("1"));
assertTrue("oneButton not found", oneButton.exists());
//assertEquals(oneButton.getText(),"1");
//assertEquals(oneButton.getText(),"one Button");
//"+"
UiObject plusButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/plus"));
assertTrue("plusButton not found", plusButton.exists());
System.out.print("aaaaaaa");
sleep(100);
UiObject equalButton = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/equal"));
assertTrue("equalButton not found", equalButton.exists());
oneButton.click();
sleep(100);
plusButton.click();
sleep(100);
oneButton.click();
equalButton.click();
sleep(100);
UiObject switcher = new UiObject(new UiSelector().resourceId("com.android.calculator2:id/formula"));
//UiObject result = switcher.getChild(new UiSelector().index(0));
//System.out.print("text is :" + result.getText());
System.out.print("text is :" + switcher.getText());
assertTrue("result != 2", switcher.getText().equals("2"));
//assertTrue("result != 2", result.getText().equals("2"));
}
}
------------------------------------------------------------------------------------------------------------------
小插曲:
例子中有assertTrue方法判断,我就自动添加import junit的
import static org.junit.Assert.*; 在执行ant build 报错。注释掉就可以正常build,但不知道为什么不用import assert,之后百度得知
import static org.junit.Assert.*; 在执行ant build 报错。注释掉就可以正常build,但不知道为什么不用import assert,之后百度得知
创建uiautomator 测试案例
uiautomator 测试案例(Test case)需要继承至UiAutomatorTestCase 类。而UiAutomatorTestCase 类继承至junit.framework.TestCase类,所以可以用JUnit的Assert类来比较测试结果
uiautomator 测试案例(Test case)需要继承至UiAutomatorTestCase 类。而UiAutomatorTestCase 类继承至junit.framework.TestCase类,所以可以用JUnit的Assert类来比较测试结果
需要要在单独import static org.junit.Assert.*;
--------------------------------------------------------------------------------------------------------------------------------------------
4.生产build 文件编译测试用例 uiautomator的编译工具是Ant,在编译之前我们先要生成build.xml,生成方法如下:
<android-sdk>/tools/android create uitest-project -n <name> -t 1 -p <path>
说明一下各个参数的作用,如果已经将android sdk的路径配置到了系统的path中,输入命令“android create uitest-project”就可以查看到相应的帮助
-n --name : Project name. 就是在eclipse中创建的项目的名字。
-t --target : Target ID of the new project. [required] 这个id是本机上android targets的id,可以通过命令 “android list”来查询,得到如下图的结果,选择android-17以上版本前面所对应的id
说明一下各个参数的作用,如果已经将android sdk的路径配置到了系统的path中,输入命令“android create uitest-project”就可以查看到相应的帮助
-n --name : Project name. 就是在eclipse中创建的项目的名字。
-t --target : Target ID of the new project. [required] 这个id是本机上android targets的id,可以通过命令 “android list”来查询,得到如下图的结果,选择android-17以上版本前面所对应的id
我本地路径:D:\Android\adt-bundle-windows-x86-20130917.467161976\adt-bundle-windows-x86-20130917\sdk\tools
D:\Android\adt-bundle-windows-x86-20130917.467161976\adt-bundle-windows-x86-20130917\sdk\tools>android create uitest-project -n UiAutomator -t 1 -p D:\workspace\CalculatorAutoTest
从eclipse中可以看到有3个新增加的文件 build.xml local.properties project.properties
5.生产jar文件
在eclipse 中的build.xml 文件上右键(或者到该工程目录下执行 ant build),运行ant build 提示
Buildfile: D:\workspace\CalculatorAutoTest\build.xml
-check-env:
[checkenv] Android SDK Tools Revision 22.2.1
[checkenv] Installed at D:\Android\adt-bundle-windows-x86-20130917.467161976\adt-bundle-windows-x86-20130917\sdk
-build-setup:
[getbuildtools] Using latest Build Tools: 18.1.0
[echo] Resolving Build Target for CalculatorAutoTest...
[getuitarget] Project Target: Android 4.3
[getuitarget] API level: 18
[echo] ----------
[echo] Creating output directories if needed...
-pre-compile:
compile:
[javac] Compiling 1 source file to D:\workspace\CalculatorAutoTest\bin\classes
[javac] 警告: [options] 源值1.5已过时, 将在未来所有发行版中删除
[javac] 警告: [options] 目标值1.5已过时, 将在未来所有发行版中删除
[javac] 警告: [options] 要隐藏有关已过时选项的警告, 请使用 -Xlint:-options。
[javac] 3 个警告
-post-compile:
-dex:
[dex] input: D:\workspace\CalculatorAutoTest\bin\classes
[dex] Found Deleted Target File
[dex] Converting compiled files and external libraries into D:\workspace\CalculatorAutoTest\bin\classes.dex...
-post-dex:
-jar:
[jar] Building jar: D:\workspace\CalculatorAutoTest\bin\CalculatorAutoTest.jar
-post-jar:
build:
BUILD SUCCESSFUL
Total time: 2 seconds
-check-env:
[checkenv] Android SDK Tools Revision 22.2.1
[checkenv] Installed at D:\Android\adt-bundle-windows-x86-20130917.467161976\adt-bundle-windows-x86-20130917\sdk
-build-setup:
[getbuildtools] Using latest Build Tools: 18.1.0
[echo] Resolving Build Target for CalculatorAutoTest...
[getuitarget] Project Target: Android 4.3
[getuitarget] API level: 18
[echo] ----------
[echo] Creating output directories if needed...
-pre-compile:
compile:
[javac] Compiling 1 source file to D:\workspace\CalculatorAutoTest\bin\classes
[javac] 警告: [options] 源值1.5已过时, 将在未来所有发行版中删除
[javac] 警告: [options] 目标值1.5已过时, 将在未来所有发行版中删除
[javac] 警告: [options] 要隐藏有关已过时选项的警告, 请使用 -Xlint:-options。
[javac] 3 个警告
-post-compile:
-dex:
[dex] input: D:\workspace\CalculatorAutoTest\bin\classes
[dex] Found Deleted Target File
[dex] Converting compiled files and external libraries into D:\workspace\CalculatorAutoTest\bin\classes.dex...
-post-dex:
-jar:
[jar] Building jar: D:\workspace\CalculatorAutoTest\bin\CalculatorAutoTest.jar
-post-jar:
build:
BUILD SUCCESSFUL
Total time: 2 seconds
可见生产一个 路径为:[jar] Building jar: D:\workspace\CalculatorAutoTest\bin\CalculatorAutoTest.jar
下面还需要将这个jar文件拷贝到手机的 /data/local/tmp/ 目录中,拷贝操作可以通过一下命令实现:
C:\Users\kanglimin>adb push D:\workspace\CalculatorAutoTest\bin\CalculatorAutoTest.jar /data/local/tmp
运行jar
C:\Users\kanglimin>adb shell uiautomator runtest CalculatorAutoTest.jar -c xzy.test.uiautomator.CalTest
运行结果:
108 KB/s (1889 bytes in 0.017s)
C:\Users\kanglimin>adb shell uiautomator runtest CalculatorAutoTest.jar -c xzy.
est.uiautomator.CalTest
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
xzy.test.uiautomator.CalTest:
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=testDemo
INSTRUMENTATION_STATUS: class=xzy.test.uiautomator.CalTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
########aaaaaaatext is :2INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=testDemo
INSTRUMENTATION_STATUS: class=xzy.test.uiautomator.CalTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: stream=
Test results for WatcherResultPrinter=.
Time: 7.192
OK (1 test)
C:\Users\kanglimin>adb shell uiautomator runtest CalculatorAutoTest.jar -c xzy.
est.uiautomator.CalTest
INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=
xzy.test.uiautomator.CalTest:
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=testDemo
INSTRUMENTATION_STATUS: class=xzy.test.uiautomator.CalTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 1
########aaaaaaatext is :2INSTRUMENTATION_STATUS: numtests=1
INSTRUMENTATION_STATUS: stream=.
INSTRUMENTATION_STATUS: id=UiAutomatorTestRunner
INSTRUMENTATION_STATUS: test=testDemo
INSTRUMENTATION_STATUS: class=xzy.test.uiautomator.CalTest
INSTRUMENTATION_STATUS: current=1
INSTRUMENTATION_STATUS_CODE: 0
INSTRUMENTATION_STATUS: stream=
Test results for WatcherResultPrinter=.
Time: 7.192
OK (1 test)
发表评论
-
java 面试小问题
2016-08-22 15:13 5621.求从10到100中能被3或5整除的数的和 int su ... -
android系列(四)android四大核心组件Activity
2016-08-16 14:06 720android 生命周期图 -
java json处理
2016-08-03 16:24 672java 解析json数据例子: json数据demo1 ... -
android系列(三)android logcat
2016-07-13 16:53 969一. logcat是Android中一个命令行工具,可以用 ... -
android系列(二)查看android系统信息
2016-07-12 11:08 3581.查看CUP adb shell cat /proc/c ... -
android系列(一)断言
2016-07-08 16:23 976失败:多指用例失败(断言失败)错误:系统类的错误。assert ... -
JSON解析之 getJSONObject 与 optJSONObject 的区别
2016-05-27 15:10 1949看网上说简单的区别是: optJSONObject :当返 ... -
java调用外部程序---- Runtime.getRuntime().exec
2015-11-23 10:33 5488Runtime.getRuntime().exec ... -
adb 基本命令
2015-11-20 15:23 4741、命令 adb devices 这个命令是查看当前连接的 ... -
【第四章】 资源 之 4.4 Resource通配符路径 ——跟我学spring3
2015-07-23 15:49 5054.4.1 使用路径通配符加载Resource ... -
通过Spring Resource接口获取资源(实例一)
2015-07-23 15:46 1004该方法实现读取本地文件--》解析文件(调用其他方法)-》操作 ... -
通过Spring Resource接口获取资源(转)
2015-07-23 14:44 865目录 1 Resource简介 2 ... -
android自动化测试框架(一) uiautomator(3)
2015-07-17 17:45 806UIautomator跨进程操作1.UIAutomatorBr ... -
android自动化测试框架(一) uiautomator(2)
2015-07-17 17:27 3376waitForWindowUpdate(final Str ... -
安装卸载liunx下的java
2015-06-26 16:40 460java的下载地址:http://www.oracle.co ... -
liunx环境下切换java的版本
2015-06-24 11:00 660在linux中有时装了多个版本的java,如果想切换怎么办 ... -
BigDecimal.ROUND_UP和BigDecimal.ROUND_DOWN
2015-06-18 15:09 4204ROUND_HALF_UP: 遇到.5的情况时往上近似,例: ... -
学艺不精
2015-06-18 11:11 526每次遇到环境或者程序搞不定的时候,总觉得自己脑 ... -
Java @override报错的解决方法
2015-06-16 11:02 608有时候Java的Eclipse工程换一台电脑后编译总是@ov ... -
jetty在liunx环境部署
2015-06-15 11:49 609第一步安装jetty: 1.官 ...
相关推荐
Android自动化测试框架是专门针对Android应用程序设计的一系列工具和库,用于编写可执行的测试脚本。这些框架允许开发者编写自动化测试用例,通过模拟用户操作来检查应用的功能、性能和稳定性。自动化测试能够帮助...
UiAutomator 是Android平台上的一种强大的自动化测试工具,由Google提供,用于对Android应用程序进行UI层的自动化测试。它允许开发者编写跨应用的UI测试,能够直接操作和验证任何可见的UI元素,无论这些元素是否在...
Python结合Appium与Android自动化测试框架的构建是一个高效且强大的测试解决方案,尤其在移动应用测试领域。本框架的核心是利用Python作为编程语言,Appium作为跨平台的自动化测试工具,以及Android SDK为运行环境,...
本文将详细介绍几个常用的Android自动化测试框架,包括Monkey、MonkeyRunner、UIAutomator、Robotium和Appium。 1. **Monkey** Monkey是Android SDK自带的一个命令行工具,主要用于压力测试。它通过向系统发送随机...
在Android开发领域,UIAutomator是一款强大的自动化测试框架,它主要用来进行用户界面的UI测试。这个框架允许开发者编写测试脚本来验证应用的UI组件的行为和功能,确保应用在不同设备和Android版本上的表现一致性。...
在Android自动化测试中,JUnit和Espresso是最基础的测试框架。JUnit是一个流行的Java单元测试框架,常用于测试应用的后台逻辑。Espresso则专为Android UI测试设计,它提供了一套强大的API,使得测试人员可以精确地...
UIAutomator 是 Android SDK 提供的一个强大的自动化测试框架,它允许开发者通过编程方式与 Android 应用的 UI 元素进行交互,如点击、滑动等操作,从而验证应用的行为是否符合预期。 UIAutomator 的主要优点在于它...
【标题】中的“自动化测试框架,支持接口自动化、WEB UI自动化、APP UI自动化”涉及到的是软件测试领域的一个重要话题。这个框架集成了多种自动化测试的能力,涵盖了从后端API到前端UI的全方位测试。 首先,接口...
UiAutomator是Android平台上用于进行UI自动化测试的一个框架,它主要设计用来测试应用程序的用户界面。这个框架允许开发者跨越应用程序边界进行元素定位和交互,极大地增强了测试的覆盖率和效率。在本文中,我们将...
UIAutomator框架是Google为了简化和增强Android自动化测试体验而推出的一个工具。与基于Python的Monkey和MonkeyRunner等早期测试工具相比,UIAutomator提供了更丰富的事件操作支持。Monkey是Android SDK自带的测试...
教程名称:Uiautomator自动化框架课程目录:【】Android应用测试与调试实战【】Android自动化测试UIautomator-UiObject【】Android自动化测试UIautomator-UiScrollable【】Android自动化测试UIautomator-UiSelector...
使用uiautomator2+pytest+allure进行Android的UI自动化测试 测试携程旅行App,首页-机票-机票搜索模块 简介 使用uiautomator2+pytest+allure进行Android的UI自动化测试 环境搭建 pytest框架 pip install pytest ...
UI Automator 是 Android 提供的一个 UI 自动化测试框架,可以用来实现自动化测试。UiObject 是这个框架中最常用的工具之一,它可以代表应用程序中的某个 UI 元素,并提供了一系列方法帮助测试人员进行 UI 操作和...
《612931 腾讯Android自动化测试实战》是腾讯公司推出的关于Android自动化测试的专业教程,旨在帮助开发者和测试工程师掌握Android应用的自动化测试技术。这本高清版的教程带有详细的目录,便于读者按照章节进行系统...
【Android自动化-UiAutomator】是Android平台上的一个自动化测试框架,主要针对原生应用进行UI级别的自动化测试。本文将详细介绍UiAutomator的环境安装配置、测试原理以及具体案例。 一、环境安装配置 1. **JDK...
这个名为"Android自动化测试项目"的资源提供了一个全面的框架,专为Android应用程序设计,旨在简化测试流程并增强测试覆盖率。下面我们将深入探讨这个框架所涉及的主要知识点。 首先,**自动化测试** 是一种利用...
【移动UI自动化测试】是软件测试领域的一种重要技术,针对移动应用的用户界面进行自动化测试,以确保其功能和交互的正确性。由于移动设备的特性,如屏幕尺寸、触摸输入和网络条件,移动UI自动化测试需考虑这些因素。...
2. **Android自动化测试**: Android提供了多种自动化测试框架,如Espresso、UIAutomator等。Appium可以看作是这些框架的一个补充,特别是在跨平台测试和使用WebDriver语法上具有优势。 3. **测试框架与工具**: 了解...