当前位置:文档之家› android自动化测试之道

android自动化测试之道

android自动化测试之道
android自动化测试之道

Android自动化测试之道

文/杨丰盛

随着越来越多的手机厂商、运营商、开发商加入android阵营,带来了各种美化和定制的android系统,同时android market应用数量增长迅速。这都离不开测试,android 自动化测试的需求愈加迫切。

测试主要分为白盒测试和黑盒测试两大类。Android虽然在测试方面还不够完善,但也提供了各种途径来完成相应的测试模块。白盒测试通常需要配合软件的源码来进行,测试人员须根据产品的功能和性能等需求编写测试用例,并根据测试用例逐一进行测试。这里我们主要探讨在没有源码的情况下如何进行黑盒测试。既然没有源码,那么我们就需要使用android所提供的工具包来获取应用程序上的各种UI元素,并向其发送各种操作事项。此外,我们还可以借助各种开源项目,比如ASE等。下面分别介绍几种目前最可行的自动化测试解决方案。

Android兼容性测试

Android的各个版本之间都有不同程度的差异,因此google专门针对各个版本(android2.1以上)提供了兼容性测试工具CTS(compatibility test suite),其中共有两万多个测试用例,包括功能测试和性能测试等。CTS最初只对OHA联盟开放,后来便和android开源项目一起发布了,并且所有手持设备都必须通过android兼容性测试,才能确保在android上开发的应用程序能够在android设备上运行,才能使用android market。

要使用CTS进行兼容性测试,就必须先下载和编译CTS,下载方式可以选择下载完整的android源码(位于$ANDROID/cts目录中)和只下载CTS源码(注:CTS源码下载地址为git://https://www.doczj.com/doc/1d3952534.html,/platform/cts.git);然后可以使用如下命令来编译CTS:

//配置选项

$ build/envsetup.sh

//编译cts

$ make cts

编译完成之后会将结果输出到“$ANDROID/out/host/linux-x86/”目录中,然后可以启动模拟器或手持设备(需使用root权限来操作),并进入其bin目录。使用“./cts”

命令来启动CTS测试,显示CTS测试版本和设备连接状态,这时可以输入“help”命令来查看CTS的操作帮助信息。

如果输入“ls--plan”命令可以查看所有的plan(注:plan文件夹为cts/android-cts/repository/plans),在其中可以看到8个测试基类,比如android.xml、appsecurity.xml、CTS.xml等。其中所有基类里包含的package都给出了相应的uri,cts 将根据这些uri去测试每个基类里的package,可以输入如下一些命令来测试某些

package:

//测试所有cts测试用例

Cts_host > start --plan CTS

//测试android API

Cts_host > start --plan android

//测试java核心库

Cts_host > start --plan java

通常在测试中很可能会出现错误,这时若需要知道是在哪一个plan处出错以及出错的原因,可以使用“-plan”、“-p”、“-t”、“-e”、“-w”等参数来指定某个测试用例,可以节约调试时间,如下命令可以指定测试alertdialog:

Cts_host > start --plan Android -p

Android.app -t android.app.cts.

AlertDialogTest testAlertDialog

当测试结束后,可以通过“ls-r”命令来查看测试的结果(注:CTS测试结果路径cts/android-cts/repository/results),如果觉得现有的测试用例不够完整,也可以根据现有的测试用例来添加自己编写测试用例,但需要注意每次添加或修改CTS任何模块都需要重新编译才能进行测试。

CTS主程序“bin/cts”是一个用sdb来测试的脚本程序,所有的测试用例都是用java 语言编写,其主程序为TestHost.java(注:CTS主函数为cts/tools/host/src/com/android/cts/TestHost.java)。CTS是基于android instrumentation的测试,因此又是基于junit的测试,实际上也就是一套单元测试用例。

Android instrumentation测试

Android整合了junit测试框架和instrumentation机制。Junit是广泛应用于java程序开发中的单元测试框架,定义了特定格式的方法作为测试用例,提供testsuite测试套件和testrunner测试执行器分别用于组织测试用例和运行测试用例,并反馈测试结果。

Instrumentation则是一种操作系统和上层应用程序之间的监控机制。当应用程序运行时,若instrumentation设置为开启,它将在应用程序运行前初始化,与应用程序运行在同一个进程中,监测应用程序与系统之间的交互,并对应用程序进行一定的控制,例如可以监控应用程序中个activity生命周期中的各个状态进行切换,甚至可以向activity发送按键事件和字符,图1展示了android中instrumentation测试的架构

图1 android instrumentation架构图

Instrumentation和activity有点类似,不同的是activity需要一个界面,而instrumentation并不需要,可以将它理解为一种没有图形界面的、具有启动能力的、用于监控其他类(用target package声明)的工具类。

在android中,有关测试的类都继承自test-case抽象类,它实际上就是对junit的instrumentation扩展,其中又包括了instrumentation testcase和android testcase,图2展示了详细的android instrumentation测试框架。

图2 android instrumentation测试框架

当需要测试某个应用程序时,可以直接从上面的类中派生一个子类即可,例如,需要测试一个HelloWorld程序,其activity名称为HelloWorld,就可以创建一个集成自activitytestcase的子类HelloWorldtest来对其activity进行测试;其超类中提供了一些受保护的方法,例如setup()可以用来初始设置,如启动一个activity、初始化资源等;teardown()可以用来垃圾清理与资源回收。

编写完测试用例还需要修改androidmanifest.xml文件,首先需要引入测试库,并指明需要被测试的目标package,代码如下:

Android:name="android.test.instrumentationTestRunner"/>

如果使用eclipse作为开发环境,便可以将android JUnit Test工具和eclipse进行继承,并在LogCat工具中打印日志信息。

Android instrumentation基本上可以测试大部分android API,但也有部分API不能被获取,如toas等;当遇到一些复杂的交互性测试比较难以实现,这时可以考虑模拟键盘、鼠标事件以及使用图像识别技术来完成自动化测试。

Android在操作系统层提供将键盘事件转化为应用程序动作的能力,一个事件的成功触响应需要如下几个步骤:首先,window manager接受来自于linux键盘驱动的按键事件;其次,window manager把scancode映射成keycode;再次,window manager把scancode和keycode都发给应用程序;最后,应用程序对按键事件进行响应。

因此可以通过“adb shell input/sendevent”命令来向设备发送键盘和触摸操作事件。以下命令所发生的时间为在坐标(00000045,00000032)处点击屏幕,并且保持按下状态:

Adb shell sendevent /dev/input/event0:0003 0000 00000045

Adb shell sendevent /dev/input/event0:0003 0001 00000032

Adb shell sendevent /dev/input/event0:0001 014a 00000001

要实现自动化测试,就需要把上述操作都通过程序来自动完成,这时可以使用android工具包中的hierarchyview工具(hierarchyviewer.jar)或者其他脚本程序。同事instrumentation中也提供了以send开头的函数接口来实现模拟键盘鼠标,如下代码所示:

//发送指定keycode的按键

Sendcharactersync(int keycode)

//发送指定keycode的按键

Sendkeydownupsync(int key)

//模拟touch事件

Sendpointersync(MotionEvent event)

//发送字符串

sendstringSync(String text)

如果使用图像识别技术进行检测,可以使用如下两种方案进行检测:

1、利用系统viewserver中提供的接口获得当前界面上控件的属性信息,通过对比测试前后属性信息的变化进行结果校验;

2、利用ddmlib包中提供的接口自动截取测试前后的屏幕截图,通过对比两幅截图相同位置的图像信息是否存在差异来进行结果校验。

无论是使用事件触发还是图像识别技术进行检测,都还需要完成大量的测试用例编写,以便能更好、更高效地完成自动化测试。

Android压力测试

压力测试是任何一个应用程序和操作系统都必须完成的测试,android开发套件中专门为开发者提供了一个用来做压力测试的工具monkey。它可以在模拟器和设备上运行,其原理是通过monkey产生随机脉冲,并随机产生大量时间对软件的负载能力进行测试。

Monkey是一个命令行工具,使用方法非常简单。它提供四个基本的配置,分别是:基本配置选项,运行约束选项(如设置monkey只对单个包进行测试)、时间类型和频率、调试选项。

这里主要对其调试选项进行分析,当monkey运行时,它会生成事件,并把它们发给系统。同时,还会对测试中的系统进行检测,对下列三种情况进行特殊处理。

1、如果限定了monkey运行在一个或几个特定的包上,那么它会检测试图转到其他包

的操作,并对其进行阻止。

2、如果应用程序崩溃或接收到任何失控异常,monkey将停止并报错。

3、如果应用程序产生了应用程序不响应的错误,monkey将会停止并报错。

Monkey工具作为google官方提供的压力测试工具,其效率非常高,无论是应用程序还是系统都可以使用它来测试其负载能力。

ASE测试

ASE(android scripting environment)是google针对android发布的一个小工具。它将脚本语言带入android,允许用户编辑和执行脚本,直接在android设备上运行交互解释器。脚本能大幅度简化任务界面,目前支持python、perl、jruby、lua、beanshell、javascript、tcl、shell,以后将会增加更多的语言的支持。因此,就可以方便快捷的调用android系统中大部分的API,根据官方发布的消息,它可以通过简便的接口快速实现以下功能:handle intents、启动Activities、发送通话请求、发送文字信息、扫描条形码、获取地理信息和返回设备传感器状态信息、使用语音输出文字信息(TTS)。

熟悉上述任何一种脚本语言的测试人员都可以选择使用ASE开源项目来进行测试,操作过程如下:下载ASE(注:下载地址为:

https://www.doczj.com/doc/1d3952534.html,/p/android-scripting/),安装ASE、安装解释器(打开ASE应用,选择自己熟悉的脚本解释器进行在线安装)、编写测试用例(编写脚本程序来操作

android API及其应用程序)。

如果在测试过程中,ASE提供的API接口不能满足其需求时,可以对ASE项目进

行扩展;因为ASE项目的可扩展性非常强,和android instrumentation一样,只需要从AndroidFacade和AndroidProxy中进行派生即可。

总结

本文介绍了android上常用的几种自动化测试解决方案,对各方案的原理和使用方法进行了介绍,基本可以完成android各功能模块的测试。但真正进行自动化测试时,还需要对各种方案进行整合与完善,以发挥出更高的效率。如果上面所介绍的不能满足测试需求,可以考虑使用其他测试方案以及测试管理工具,如Robotium、AutoIT、MantisBT等。

android自动化测试之道

Android自动化测试之道 文/杨丰盛 随着越来越多的手机厂商、运营商、开发商加入android阵营,带来了各种美化和定制的android系统,同时android market应用数量增长迅速。这都离不开测试,android 自动化测试的需求愈加迫切。 测试主要分为白盒测试和黑盒测试两大类。Android虽然在测试方面还不够完善,但也提供了各种途径来完成相应的测试模块。白盒测试通常需要配合软件的源码来进行,测试人员须根据产品的功能和性能等需求编写测试用例,并根据测试用例逐一进行测试。这里我们主要探讨在没有源码的情况下如何进行黑盒测试。既然没有源码,那么我们就需要使用android所提供的工具包来获取应用程序上的各种UI元素,并向其发送各种操作事项。此外,我们还可以借助各种开源项目,比如ASE等。下面分别介绍几种目前最可行的自动化测试解决方案。 Android兼容性测试 Android的各个版本之间都有不同程度的差异,因此google专门针对各个版本(android2.1以上)提供了兼容性测试工具CTS(compatibility test suite),其中共有两万多个测试用例,包括功能测试和性能测试等。CTS最初只对OHA联盟开放,后来便和android开源项目一起发布了,并且所有手持设备都必须通过android兼容性测试,才能确保在android上开发的应用程序能够在android设备上运行,才能使用android market。 要使用CTS进行兼容性测试,就必须先下载和编译CTS,下载方式可以选择下载完整的android源码(位于$ANDROID/cts目录中)和只下载CTS源码(注:CTS源码下载地址为git://https://www.doczj.com/doc/1d3952534.html,/platform/cts.git);然后可以使用如下命令来编译CTS: //配置选项 $ build/envsetup.sh //编译cts $ make cts 编译完成之后会将结果输出到“$ANDROID/out/host/linux-x86/”目录中,然后可以启动模拟器或手持设备(需使用root权限来操作),并进入其bin目录。使用“./cts” 命令来启动CTS测试,显示CTS测试版本和设备连接状态,这时可以输入“help”命令来查看CTS的操作帮助信息。 如果输入“ls--plan”命令可以查看所有的plan(注:plan文件夹为cts/android-cts/repository/plans),在其中可以看到8个测试基类,比如android.xml、appsecurity.xml、CTS.xml等。其中所有基类里包含的package都给出了相应的uri,cts 将根据这些uri去测试每个基类里的package,可以输入如下一些命令来测试某些

Android期末考试复习试卷(仅供参考)

一、选择题(20分,每小题2分) 1、下列不是手机操作系统的是( D )。 A Android B Window Mobile C Apple IPhone IOS D Windows Vista 2、下列选项哪个不是 Activity 启动的方法(B ) A startActivity B goToActivity C startActivityForResult D startActivityFromChild 3、下列哪个不是 Activity 的生命周期方法之一(B ) A onCreate B startActivity C onStart D onResume 4、下列哪个可做 Android 数据存储(A ) A SQlite B M ySql C Oracle D DB2 5、下列哪个可做EditText编辑框的提示信息( D ) A android:inputType B android:text C android:digits D android:hint 6、Math.ceil(99.1) 的结果是(B ) A 99 B 100 C 99.1 D 99.0 7、android 中下列属于Intent的作用的是(C) A实现应用程序间的数据共享 B是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失 C可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带 D处理一个应用程序整体性的工作 8、关于 res/raw 目录说确的是A A这里的文件是原封不动的存储到设备上不会转换为二进制的格式 B这里的文件是原封不动的存储到设备上会转换为二进制的格式 C这里的文件最终以二进制的格式存储到指定的包中 D这里的文件最终不会以二进制的格式存储到指定的包中 9、Math.round(11.5)等于多少(). Math.round(-11.5)等于多少( C) A 11 ,-11 B 11 ,-12 C 12 ,-11 D 12 ,-12 10、我们都知道Hanlder是线程与Activity通信的桥梁,如果线程处理不当,你的机器就会变得越慢,那么线程销毁的方法是(A ) A onDestroy() B onClear() C onFinish() D onStop() 二、填空题(10 分,共10 题,每空1 分) 1、为了使 android 适应不同分辨率机型,布局时字体单位应用( sp ),像素单位应用( sp )和(dip ) 2、定义 LinearLayout 水平方向布局时至少设置的三个属性: ( android:orientation), (android:layout width)和(android:layout height)

Android测试环境搭建

基本安装 一、Java JDK 1、Java JDK下载: 网页: https://www.doczj.com/doc/1d3952534.html,/javase/downloads/index.jsp 选择 Download JDK 只下载JDK,无需下载jre.(因为按照JDK会自动按照jre) 2、JDK 运行 可以不安装在C盘(系统盘) 安装完成后 3、环境变量 如果只是运行eclipse不需要修改环境变量 如果要用到monkeyrunner需要设置环境变量(改系统环境变量),如下 新建系统环境变量JAVA_HOME ,设置为java安装地址"D:\Program Files\java\jdk1.6.0_33" PATH 增加 ";%JAVA_HOME%\bin" CLASSPATH = ".;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar",没有CLASSPATH需要新增

4、验证环境变量 java-version 如果装在C盘直接运行java-version 二、Eclipse 进入该网页: https://www.doczj.com/doc/1d3952534.html,/downloads/下载解压缩后放在根目录,不要放在中文文件夹里面三、Android SDK

地址:https://www.doczj.com/doc/1d3952534.html,/sdk/index.html 说明: Android SDK两种下载版本,一种是包含具体版本的SDK的,一种是只有升级工具,而不包含具体的SDK版本,后一种大概20多M,前一种70多M。 解压android sdk 这个也无需安装,解压后供后面使用 Eclipse配置 一、安装android 开发插件 (1)打开Eclipse, 在菜单栏上选择 E:\eclipse-java-juno-win32-x86_64\eclipse下,可以创建桌面快捷方式help->Install New SoftWare 出现如下界面:

Android期末测试题(附带答案)

一、选择题 1、下列哪项不是Android四大组件( C ) A.Seivice B. Activity C. Handler D. Content Provider 2、Android是如何组织Activity的( B ) A.以堆的方式组织Activity B. 以栈的方式组织Activity C. 以树形方式组织Activity D. 以链式方式组织Activity 3、关于线程说法不正确的是( B ) A. 在 android 中,我们可以在主线程中,创建一个新的线程 B. 在创建的新线程中,它可以操作 UI 组件 C. 新线程可以和 Handler 共同使用 D. 创建的 Handler 对象,它隶属于创建它的线程 4、下列关于内存回收的说明,哪个是正确的(B ) A.程序员必须创建一个线程来释放内存 B.内存回收程序负责释放无用内存 C.内存回收程序允许程序员直接释放内存 D.内存回收程序可以在指定的时间释放内存对象 5、设置xml布局文件中的字体大小一般用什么单位( c ) A.dp B. px C. sp D. pt 6、关于service生命周期的onCreate()和onStart()说法正确的是( D ) A.当第一次启动的时候先后调用onCreate()和onStart()方法 B.当第一次启动的时候只会调用onCreate()方法 C.如果service已经启动,将先后调用onCreate()和onStart()方法 D.如果service已经启动,只会执行onStart()方法,不再执行onCreate()方法 7、Android项目工程下面的assets目录,以下说法正确的是( A ) A.这里的文件是原封不动的存储到设备上不会转换为二进制的格式 B.主要放置多媒体等数据文件 C.主要放置图片文件 D.放置字符串,颜色,数组等常量数据 8、在android中使用SQLiteOpenHelper这个辅助类,生成一个可操作的数据库,调用的方法是( A )A.getReadableDatabase() B.getDatabase() C.getEnbleDatabase() D.createDateBase() 9、Activity从可见状态变为半透明遮盖状态时,生命周期中哪个方法被调用( B )

Android APP测试流程

Android APP测试流程 一、 Monkey测试(冒烟测试) 使用monkey测试工具进行如下操作: 1. APP的安装 2. APP随机操作测试(APP压力测试) 3. APP的卸载 二、安装卸载测试 1. 使用测试真机进行APP的安装与卸载 2. 使用第三方软件辅助安装与卸载

三、升级测试 1. APP的在线升级安装及使用测试 目的: 1. 验证签名是否一致 2. 跨版本升级是否正常 四、功能测试 1. 功能逻辑测试 2. 功能点测试(单元测试) 3. 关联性测试(集成测试) 五、自动化测试 1. monkeyrunner编写python脚本测试(现阶段使用小萝贝与按键精灵代替) 六、联机调试测试 1. 使用Eclipse进行Android Debug真机调试 2. 通过Logcat记录每一步操作,定位错误代码 七、稳定性测试 1. 交互性测试 2. 异常性测试(手机断电、断网情况) 八、手机流量、电量、内存测试

1. 测试机使用监控软件观察APP使用所耗的流量 2. 测试机使用监控软件观察APP耗电量 3. 测试机使用监控软件观察APP占用内存情况(不能泄露内存) 九、性能测试(Loadrunner) 1. 接口测试 2. 服务器压力测试 十、适配性测试(兼容性测试,目前使用testin云测) 1. 分辨率 2. 系统版本 3. 厂商定制系统 4. 屏幕尺寸 十一、界面易用性测试 1. 界面与交互测试(交互规范、用户体验、易用性等) 2. 可用性测试(可用性强、操作简单、出错率低、完成任务时间短等)十二、外网测试 1.使用WIFI和手机网络2G/3G/4G网络测试APP

android试卷A及答案

Android应用试卷A 一、选择题(10分) 1. 下列不是手机操作系统的是?(D) A.Android B. Window Mobile C. Apple IPhone IOS D. windows vista 2. 下列选项哪个不是Activity启动的方法?(B ) A. startActivity B. goToActivity C. startActivityForResult D. startActivityFromChild 3. 下列哪个不是Activity的生命周期方法之一?(B ) A. onCreate B startActivity C. onStart D. onResume 4. 下列哪个可做Android数据存储?( A ) A. SQlite B. MySql C. Oracle D. DB2 5. 下列哪个可做EditText编辑框的提示信息?( D ) A. android:inputType B. android:text C. android:digits D. android:hint 二、真空题(2分) 1. 为了使android适应不同分辨率机型,布局时字体单位应用sp ,像素单位应用sp 和dip 。 2. 定义LinearLayout水平方向布局时至少设置的三个属性: android:orientation ,android:layout_width 和android:layout_height 。 3. 设置 ImageView控件为灰色的方法是:android:background=”#040” 。 4. layout布局文件的命名不能出现字母大写。 5. 设置EditText只能输入”1234567890.+-*/%()”属性:android:digits 。 6. 设置TextView字体的属性是:android:textSize 。 三、简答题(30分) 1. Android项目中的入口Activity怎么写?如何注册一般的Activity? (1) Android项目中的入口Activity:

Android性能分析工具常用汇总

Android性能分析工具常用汇总 Android性能分析工具整理汇总 把做Android开发以来碰到的一些不错的性能分析工具做个整理汇总... Debug GPU Overdraw 类型:系统自带功能UI渲染检测功能(打开Settings,然后到Developer Op tions -> Debug GPU Overdraw 选择Show overdraw areas,手机系统设置中文的孩纸,自行对照翻译进去哈) 作用:用来检测UI的重绘次数,开发者可以用来优化UI的性能。 使用心得:检测UI性能的利器,对于开发者做UI优化的帮助挺大的。因为大量的重绘容易让app造成卡顿或者直接导致丢帧的现象。开发者熟悉View的绘制原理可以结合对一些布局或者自定义控件做相应的优化。诸如:在ListView或GridView里面的item使用layout_weight设置就会造成多余重绘。其他情况还有很多,不一一例举。至于怎么用,可以自行Google Profile GPU Rendering 类型:系统自带功能UI渲染检测功能(打开Settings,然后到Developer Op tions -> Profile GPU Rendering. 选择On screen as bars ) 作用:用来检测UI绘制帧的速率和耗时,同样开发者可以用来优化UI的性能。使用心得:跟Debug GPU Overdraw功能类似,但它反应的是UI绘制帧的速率,同样可以用来检测自己的app是否丢帧或者绘制过度,具体操作可以自行G oogle Hierarchy Viewer 类型:SDK自带工具(打开Settings,然后到Developer Options -> Profil e GPU Rendering. 选择On screen as bars ) 作用:检测UI渲染用的 使用心得:老牌工具了,Google一下

(完整版)Android应用开发期末考试题

试题 一、选择题 1 android虚拟设备的缩写是(AVD) 2 Android SDK目前支持的操作系统(DOS) 3 Android开发工具插件(ADT)没有提供的开发功能(自动更新) 4Android SDK提供一些开发工具可以把应用软件打包成Android格式文件(APK) 5 Android当中基本的所有的UI都是由(view)或者其子类实现的 6以下不是Android中调试项目的正确步骤(测试用例) 7下列不是Activity的生命周期方法之一的是(OnResume) 8以下可以做EditText编辑框的提示信息是(adroid:hint) 9以下不是Activity启动的方法是(gotoActivity) 10以下不是手机操作系统的是(windows vista) 二、填空题 1 Android平台由操作系统,中间件,用户界面和应用软件组成的。 2 Android平台提供了2D,3D的图形支持,数据库支持SQLite,并且集成了浏览器 3目前已知的可以用来搭建Android开发环境的系统有windows,Linux,Mac 等4开发中推荐使用的IDE开发组合为IDE,eclipse,ADI来开发 5 Android SDK主要以java语言为基础 6创建工程时需要填写的信息名称有工程名,包的名字,Activity的名字还有应用的名字

7 Android.jar是一个标准的压缩包,其内容包含的是编译后的class,包含了全部的API 三、简答题 1 Android SDK中API的包结构的划分?至少五个 android.util,android.os,android.content,android.view,android.graphics,android.text 2 Android软件框架结构自上而下可分为哪些层? 应用程序(Application)、应用程序框架(Application Framework)、各种库(Libraries)和Android运行环境(RunTime)、操作系统层(OS) 3 Android应用程序的4大组件是什么? Activity、Broadcast Intent Receiver、Service、Content Provider 4 Android应用工程文件结构有哪些? 源文件(包含Activity),R.java文件,Android Library,assets目录res目录,drawble目录,layout目录,values目录,AndroidManifest.xml 5 Android开发应用程序最有可能使用到的应用框架部分是哪些? 一组View(UI)组件,Content Providers,Resource Manger,Notification Manger,Activiy Manger 6 Android底层库包含哪些? 系统C库,媒体库,Surface Manager,LibWebCore,SGL 四、编程 1实现点击一个按钮,结束当前Activity并将需要返回的数据放置并关闭当前窗体请编写核心代码 Bundle bundle = new Bundle ( ); Bundle.putString(“store”,”数据来自Activity1”) ;

Android_自动化测试

Android自动化测试初探-1:捕获Activity上的Element 第一部分:前言 Android系统下应用程序的测试现在应该还算是个新的领域,网上关于这方面的资料很多都是基于白盒测试的,一般都是基于JUnit框架和Android SDK中android.test等命名空间下的内容进行,但是有一个前提,那就是必须要有应用程序的源代码以提供测试接入点,但是这在很多软件公司中是不现实的。很多测试工程师做的工作是完全黑盒,基本接触不到源代码,白盒测试大部分也是由开发自己完成。 回顾一下Windows下的黑盒测试自动化,先前使用的是微软提供的基于.net framework的UI Automation自动化测试框架(要求版本在.net framework3.0以上,即https://www.doczj.com/doc/1d3952534.html, 2008开发环境),对与擅长C#语言的人来说,使用起来确认比较好用。本人也写了基于UI Automation的轻量级的自动化框架,将在以后的博文中引出。 那在Android操作系统中能不能做类似于UI Automation的事情呢?不幸的是,Android的权限控制分的非常清楚,不同程序之间的数据访问只能通过Intent,content provider类似的功能实现。也就是说你开发的运行在Android中的自动化程序想要捕获当前运行的AUT(Application under Test)界面上的控件等Element(该术语引自UI Automation,觉得翻译成元素有点生硬,故不作翻译)基本不可能,你也拿不到当前active activity的引用(截止本文发帖为止,个人暂时没有找到办法获得此引用)。 无路可走了?模拟器里面不能走,外面能不能走?或许可以。 第二部分:捕获Activity上的Element 在Android的SDK中自带了一个对自动化测试比较有用的工具:hierarchyviewer(位于SDK的tools目录下)。在模拟器运行的情况下,使用该工具可以将当前的Activity上的Element以对象树的形式展现出来,每个Element所含的属性也能一一尽显。这有点像Windows上运行的UI SPY,唯一遗憾的是不支持事件的触发。不过没有关系,可以想办法绕,当务之急是能在自行编写的自动化测试代码里找到Activity上的Element。 第一个想到的办法就是看hierarchyviewer源码,不巧,网上搜了一下,没有资源。或许Google的官网上有,但是上不去。看来只能反编译了,找来XJad,暴力之。虽然反编译出来的代码很多地方提示缺少import,但代码基本上是正确的。看了一下,确实也知道了许多。后来在编写代码的过程中,确实也证明了如果想引用hierarchyviewer.jar这个包并调试,还是需要知道里面的一些设置的。 创建基于hierarchyviewer.jar这个包的调用,需要将它和另外两个包,ddmlib.jar(在hierarchyviewer.jar同级目录中有)和org-netbeans-api-visual.jar(需要下载并安装netbeans,在其安装目录中有)一并导入到工程项目中,因为hierarchyviewer的实现依附于这两个包。 想在代码中获取Activity上的Element需要进行如下几个步骤(如果使用过hierarchyviewer这个工具后会发现,自动化代码所要写的就是该工具上的使用步骤):

Android基础阶段 测试题

一、选择题(每题2分,共20分) 1.给定java代码,如下: public byte count(byte b1,byte b2){ return______; } 要使用这段代码能够编译成功,横线处可以填入()。(选择一项)a)(byte) (b1-b2) b)(byte) b1-b2 c) b1-b2 d) (byte) b1/b2 2.在Java中,下列()语句不能通过编译。 (选择一项) a) String s= “join”+ “was”+ “here”; b) String s= “join”+3; c) int a= 3+5 d) float f=5+5.5; 3.给定如下java代码,编译运行之后,将会输出()。 public class Test{ public staticvoid main(String args[]){ int a=5; System.out.println(a%2==1) ?(a+1) /2:a/2) ; } } a)1 b)2 c)2.5 d)3 4. 有关线程的哪些叙述是对的?( ) A、当一个线程因为抢先机制而停止运行,它被放在可运行队列的前面。 B、使用Start()方法可以使一个线程成为可运行的,但它不一定立即开始运行。 C、一个线程可能因为不同的原因停止并进入就绪状态。 D、一旦一个线程被创建,它立即开始运行。 5.下列属于Intent的作用的是( ) A、实现应用程序间的数据共享

B、是一段长的生命周期,没有用户界面的程序,可以保持应用在后台运行,而不会因为切换页面而消失 C、可以实现界面间的切换,可以包含动作和动作数据,连接四大组件的纽带 D、处理一个应用程序整体性的工作 6.关于下列程序段的输出结果,说法正确的是:() public class MyClass{ static int i; public static void main(String argv[]){ System.out.println(i); } } A、有错误,变量i没有初始化。 B、null C、1 D、0 7.下列属于SAX解析xml文件的优点的是() A、将整个文档树在内存中,便于操作,支持删除,修改,重新排列等多种功能 B、不用事先调入整个文档,占用资源少 C、整个文档调入内存,浪费时间和空间 D、不是长久驻留在内存,数据不是持久的,事件过后,若没有保存数据,数据就会 消失 8.下列哪些语句关于内存回收的说明是正确的? ( ) A、程序员必须创建一个线程来释放内存 B、内存回收程序负责释放无用内存 C、内存回收程序允许程序员直接释放内存 D、内存回收程序可以在指定的时间释放内存对象 9.下面在AndroidManifest.xml文件中注册BroadcastReceiver方式正确的是() A、 B、

Android测试教程(全)

Android测试教程 目录 Android测试教程 (1) Android测试教程(1):概述 (1) Android测试教程(2):测试基础 (2) Android测试教程(3):测试项目 (3) Android测试教程(4):测试相关API (6) Android测试教程(5):第一个测试项目HelloWorldTest (8) Android测试教程(6):测试Activity (11) Android测试教程(7):测试Content Provider (12) Android测试教程(8):测试Service (13) Android测试教程(9):ApplicationTestCase示例 (13) Android测试教程(10):ActivityInstrumentationTestCase2示例 (17) Android测试教程(11):ActivityUnitTestCase示例 (18) Android测试教程(12):ServiceTestCase示例 (20) Android测试教程(13):TestCase示例 (22) Android测试教程(14):ActivityInstrumentationTestCase2示例 (23) Android测试教程(15):AndroidTestCase示例 (25) Android测试教程(16):monkeyrunner简介 (27) Android测试教程(17):Monkey 命令行工具 (28) Android测试教程(18):总结 (32) 来源: csdn 作者:mapdigit Android测试教程(1):概述 测试也是开发过程中一个重要组成部分,Android开发环境集成一个测试框架可以用来测试Android应用的各个方面,单元测试,UI测试等。 本教程基于Android 开发教程英文版。 基本概念包括 ?Android测试的基础知识 ?Activity Testing 侧重于Activity的测试,介绍了如果使用Instrumentation 在正常Activity生命周期之外来控制Activity,然后测试Activity的特定的功能和测试UI 的一些技巧。

Android练习题及答案

练习题 一、选择题 1. 下面哪个属于体系结构中的应用程序?( ) (A) (B) (C)浏览器(D) 2. 应用程序需要打包成( )文件格式在手机上安装运行。 (A) (B) (C) (D) 3. 在的生命周期中,当被某个覆盖掉一部分后,会处于哪种状态?( ) (A) 暂停(B) 活动(C) 停止(D) 销毁 4. 中下列属于的作用的是( )。 (A) 实现应用程序间的数据共享() (B) 是一段长的生命周期,没有用户界面的程序,可以保持在后台运行,而不会因为切换页面而消失() (C) 可以实现界面间的切换,可以包含动作和动作数据,是连接4大组件的纽带 (D) 处理一个应用程序整体性的工作 5. 项目启动时最先加载的是文件,如果有多个,以下哪个属性决定了该最先被加载?( )。 (A) (B)(没有) (C) (D) 6. 如果需要捕捉某个组件的事件,需要为该组件创建( ) (A)属性(B)监听器(C)方法(D)工程 7.关于描述正确的是( )。 (A)该布局为绝对布局,可以自定义控件的的位置 (B)该布局为切换帧布局,可实现标签切换的功能 (C)该布局为相对布局,其中控件的位置都是相对位置

(D)该布局为表格布局,需要配合一起使用 8.关于的说法不正确的是 ( )。 (A)它实现不同进程间通信的一种机制(B)它采用队列的方式来存储 (C)既是消息的发送者也是消息的处理者(D) 它实现不同线程间通信的一种机制 9. 下列哪种不是的存储方式?( ) (A) (B) (C) (D) 10. 下列关于的描述,不正确的是 ( )。 (A)是系统的后台服务组件,适用于开发无界面、长时间运行的应用功能 (B)比的优先级高,不会轻易被系统终止 (C)有两种不同的使用方式,一种是以启动方式使用,另一种是以绑定方式使用 (D)每个服务都继承自基类 二、填空题 1. 目前,常见的智能手机操作系统有、和等。 2第一次被创建的时候调用的方法是()。 3.为了使系统适应不同分辨率机型,布局时使用的字体和像素单位分别是 和。 4支持的4大重要组件,分别是、、和。 5. 4.0中提供了5种布局管理器:、、、和。 6类不能直接使用关键字来创建类的对象实例,而是首先创建其内部 类类的对象,再调用这个内部类的()方法来显示对话框。

Android移动应用试题(带答案)

<>试题 一.选择题(2’X12) 1.下面哪一个不属于Android体系结构中的应用程序层 A.电话簿 B.日历 C.SQLite D.SMS程序 2.下面哪种说法不正确 A.Android应用的gen目录下的R.java被删除后还能自动生成; B.res目录是一个特殊目录,包含了应用程序的全部资源,命名规则可以支持数字(0-9) 下横线(_),大小写字母(a-z , A-Z); C.AndroidManifest.xml文件是每个Android项目必须有的,是项目应用的全局描述。其 中指定程序的包名(pack age=”…”)+指定android应用的某个组件的名字(android:name=”…”)组成了该组件类的完整路径 D.assets和res目录都能存放资源文件,但是与res不同的是assets支持任意深度的子目 录,在它里面的文件不会在R.java里生成任何资源ID 3.在一个相对布局中怎样使一个控件居中 A.android:gravity="center" B.android:layout_gravity="center" C.android:layout_centerInParent="true" D.android:scaleType="center" 4.下面是一段生成对话框的代码,哪一行有错误? Builder builder = new Builder(getApplicationContext()); 1 builder.setTitle("提示").setMessage("请选择"); 2 builder.setPositiveButton("重置", new OnClickListener() 3 { 4 public void onClick(DialogInterface dialog, int which) 5 { 6 Log.i("log", "重置被按了!"); 7 } 8 }); 9 builder.setNegativeButton("取消", null); 10 builder.setNeutralButton("确定", new OnClickListener() 11 { 12 public void onClick(DialogInterface dialog, int which) 13 { 14 Toast.makeText(getApplicationContext(), "确定被按了!", 15 Toast.LENGTH_SHORT).show(); 16 } 17

Android自动化测试工具简介

Android自动化测试工具简介随着Android的流行和发展,基于Android的应用开发越来越多,相应的测试方法和测试工具也越来越多,掌握好这些测试工具对测试团队提高工作效率有很大的帮助,本文将就Android平台上的几款常用的测试工具进行简单介绍。Instrumentation Instrumentation是Android系统提供的基于junit的自动化单元测试框架,它提供了对Android系统API和对象的访问接口,可以控制和检查应用程序、模拟用户操作、获取系统状态,实现对应用程序或系统的功能、性能、UI、API 等的自动化测试。Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能。 图1:引用自:

https://www.doczj.com/doc/1d3952534.html,/guide/topics/testing/testing_android.html 1)测试类型 要对Android应用程序进行单元测试有三种方法: 第一,基于Junit的单元测试,这个测试运行在JDK下,测试一些和android 无关的东西,比如业务逻辑,数据封装,数值计算等等。 第二,基于AndroidTestCase,不使用Instrumentation框架,但可以访问系统对象如Context,通过Context可以访问到资源,文件,数据库等。 第三,基于InstrumentationTestCase,使用Instrumentation框架,入口是InstrumentationTestRunner,这是一个没有图形界面的,具有启动能力的,用于监控其他类的工具类。 2)主要测试类 Android系统的单元测试框架位于包android.test中,其核心类图具有如下结构:

在Mac上搭建Android 自动化测试的测试环境 (2)

在Mac上搭建Android 自动化测试的测试环境 一、 1.该环境搭在了本地的一台MacBook上,序列号:C02F302EDC79 2.使用的自动化测试工具是appium 3.搭建环境的步骤 1.在terminal 终端里面运行命令brew install node 2.在terminal 终端里面运行命令npm install -g appium 3.在terminal 终端里面运行命令npm install wd 对这三个命令的解释:第一个是安装node.js,这个命命令需要更新一下.它对版本的要求比较高,为了兼容性考虑,最好安装版本0.12第二个是安装appium ,第三个是安装appium client ,如果运行的时候报错,可以尝试在命令的前面加上sudo 4.安装JDK7 地址: https://www.doczj.com/doc/1d3952534.html,/technetwork/java/javase/downloads/jdk7-downloads-1880260. html 5.安装android sdk地址: https://www.doczj.com/doc/1d3952534.html,/sdk/index.html 对于这个步骤你可以选择安装Android STUDIO 也可以只安装stand-alone sdk tools 然后再添加你需要的sdk packages 比如:platform tools 我是安装了Android studio ,然后又添加了一些sdk packages, 添加sdk packages 的方法: https://www.doczj.com/doc/1d3952534.html,/sdk/installing/adding-packages.html sdk tools 所在的位置是:/users/testuser/Library/Android/sdk 其中的Library 是隐藏文件夹,如果想进去看点击mac 右上角的Go->Go to Folder: 输入~/Library/ 6.在.bash_profilel里面为JAVA_HOME和ANDROID_HOME设置路径: 在terminal 终端里面运行命令vi ~/.bash_profile 进入profile界面后按I 进入编辑模式,然后设置路径为: export JAVA_HOME="$(/usr/libexec/java_home -v 1.7)" export ANDROID_HOME="/users/testuser/Library/Android/sdk" 然后按esc 返回到normal 模式,用命令:wq退出并保存 保存后如果想让它生效用命令source /.bash_file Notes:机器不一样所以遇到的问题也不一样,如果你运行brew install node 提示你每天brew command ,那你需要搜一下把brew给装好。当你运行npm install -g appium的时候有可能安装失败,首先用sudo 试试,如果这样安装还是失败,看看log 我失败一次的经历是安装一个插件失败了好像是什么library 安装不了,这个时候如果有开发就去问问开发,如果不愿意问就自己先在google上搜索下,如果安装这个插件。搭测试环境这步是基础所以一定得搭好,走不下去问开发是正常的。 7.经过上面的1-6步以后基本环境以及搭建完毕。这时候去Download sample code 地址:https://https://www.doczj.com/doc/1d3952534.html,/appium/sample-code 在terminal 终端里面运行命令git clone https://https://www.doczj.com/doc/1d3952534.html,/appium/sample-code 我把sample code 放在了桌面的appium example 里面。里面的内容下面的截图

Android应用软件开发高级工程师考试试题

CEAC国家信息化中心计算机教育认证 (Android应用软件开发高级工程师) 考试试卷(综合) 姓名__________身份证号_______________成绩__________ 单选题 1:以下哪个不是Adapter的子类接口?( 1 分)( ) A:ListAdatper B:SpinnerAdapter C:WrapperListAdapter D:SimpleAdatper 2:定义字符串:String str=”abcdefg”;则str.indexOf(‘d’)的结果是()。(1 分) A:‘d’B:true C: 3 D:4 3:下面关于包的说明正确的是()。( 1 分) A:包把相关的类组织在一个目录下,便于引用 B:只有public 类才能放到包中 C:不同源文件中的类不能放到同一个包中 D:包的申明必须放到程序的第一行 4:一维数组arr,如何获取其数组元素数量()。( 1 分) A:arr.size B:arr.size-1 C:arr.length-1 D:arr.length 5: Android应用程序的四大组件是指()。( 2 分) A:Activity、Dialog、Service和Intent B:Activity、Service、BroadCast Receiver和Content Provider C:Activity、Service、BroadCast Receiver和Intent D:Activity、Dialog、Service和Content Provider

6下面哪个方法不属于InputStream类?( 2 分)( ) A:int read(byte[]) B:void flush() C:int read() D:void close() 7:给定下列代码: public class Person{ static int arr[]=new int[10]; public static void main(String a[]){ System.out.println(arr[1]); } } 下列说法正确的有()。( 2 分) A:编译时程序将发生错误 B:编译时程序正确但是运行时出错 C:输出为0 D:输出为null 8:访问Student类中的number成员之值哪种方式正确?()class Student{ private static int number=1; public static int getNumber(){ return number; } } ( 2 分) A:Student.number; B:new student().number; C:Student.getNumber(); D:new student().getnumber(); 9:Activity中onCreate(Bundle savedInstanceState)方法中的参数为saveInstanceState,关于saveInstanceState的错误的描述是()。( 2 分) A:saveInstanceState参数采用key-value的形式存储数据 B:saveInstanceState保存的是Activity的实例状态

Android自动化测试之Uiautomator_UiDevice-API详解

Android自动化测试之 Uiautomator-UiDevice-API详解 范翰卿整理 联系邮箱:fanhq1@https://www.doczj.com/doc/1d3952534.html, [在此处键入]

目录 UiDevice-API (2) 1.click (2) 2.freezeRotation (2) 3.getCurrentPackageName (3) 4.getDisplayHetght与getDisplayWidth . 3 5.getDisplayRotation (3) 6.getDisplaySizeDp (4) 7.getProductName (5) 8.监听器 (5) 9.按键事件 (8) 10.旋转 (9) 11.锁屏与唤醒 (10) 12.等待对象 (11) 13.截图 (12) 14.拖拽与滑动 (12) 15.通知栏.快速设置 (13) 16.窗口布局结构 (13)

UiDevice-API uidevice提供关于设备的状态信息。你也可以使用这个类来模拟装置上的用户的行为,如按方向键或按菜单按钮。 1.click . 例子: 点击坐标点(300,300) UiDevice.getInstance().click(300,300); 或getUiDevice().click(300,300); 推荐使用上面的UiDevice.getInstance()进行书写,如果使用下面的书写,在同一个类中没问题,如果要在其他类中的方法使用了getUiDevice,调用到本类中不会有语法错误,但是执行的时候会出错。以下也是如此,不再写getUiDevice。 2.freezeRotation 例子:

相关主题
文本预览
相关文档 最新文档