Android自动化测试工具简介_第1页
Android自动化测试工具简介_第2页
Android自动化测试工具简介_第3页
Android自动化测试工具简介_第4页
Android自动化测试工具简介_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android自动化测试工具简介随着Android的流行和发展,基于Android的应用开发越来越多,相应的测试方法和测试工具也越来越多,掌握好这些测试工具对测试团队提高工作效率有很大的帮助,本文将就Android平台上的几款常用的测试工具进行简单介绍。InstrumentationInstrumentation是Android系统提供的基于junit的自动化单元测试框架,它提供了对Android系统API和对象的访问接口,可以控制和检查应用程序、模拟用户操作、获取系统状态,实现对应用程序或系统的功能、性能、UI、API等的自动化测试。Instrumentation框架通过将主程序和测试程序运行在同一个进程来实现这些功能。 图1:引用自:/guide/topics/testing/testing_android.html1) 测试类型要对Android应用程序进行单元测试有三种方法:第一,基于Junit的单元测试,这个测试运行在JDK下,测试一些和android无关的东西,比如业务逻辑,数据封装,数值计算等等。第二,基于AndroidTestCase,不使用Instrumentation框架,但可以访问系统对象如Context,通过Context可以访问到资源,文件,数据库等。第三,基于InstrumentationTestCase,使用Instrumentation框架,入口是InstrumentationTestRunner,这是一个没有图形界面的,具有启动能力的,用于监控其他类的工具类。2) 主要测试类Android系统的单元测试框架位于包android.test中,其核心类图具有如下结构:图2: Instrumentation单元测试类结构 1. Android的测试用例组织形式是和junit一样的,也是由TestSuite和TestCase组成,其中TestSuite的实现是InsturmentationTestSuite,而所有测试类都继承了两个类:AndroidTestCase和InstrumentationTestCase。 ApplicationTestCase用于测试应用程序,允许注入一个模拟的Context到应用程序中。 ProviderTestCase2 用于测试ContentProvider,要求使用MockContentResolver,并注入一个IsolatedContext,因此Provider的测试是与OS孤立的。 ServiceTestCase 用于测试Service,可以注入一个模拟的Context或模拟的Application。 ActivityTestCase 对Activity测试的基类 ActivityUnitTestCase对单个Activity进行测试。可以注入模拟的Context或Application,不能注入模拟的Intent。 ActivityInstrumentationTestCase2在正常的系统环境中测试单个Activity,不能注入一个模拟的Context,但你可以注入一个模拟的Intent。可以在UI线程运行测试方法,给UI发送按键和触屏事件。 2. Instrumentation在Assert的基础上提供了两个新的断言类:MoreAsserts和ViewAsserts。 MoreAsserts类包含更多强大的断言方法,如assertContainsRegex(String, String),可以作正则表达式的匹配。ViewAsserts类包含关于Android View的有用断言方法,如assertHasScreenCoordinates(View, View, int, int),可以测试View在可视区域的特定X、Y位置。3. Instrumentation有一些类可以方便的创建模拟的系统对象,如MockApplication,MockContext,MockPackageManager,MockResources等等。4. 在android.test.annotation包里定义了几个annotation,包括LargeTest,MediumTest,SmallTest,Smoke,和Suppress。你可以根据自己的需要用这些annotation来对自己的测试分类。在执行单元测试命令时,可以在-e参数后设置“sizelarge”/“sizemedium”/“sizesmall”来执行具有相应标记的测试。3) 执行方法 要运行Instrumentation测试需要在Manifest文件里加入下面代码(ADT在创建测试工程时会自动添加)Instrumentation是用adb命令完成的(在ADT下直接右键点击选取Run As-Android Junit Test即可),支持具体到测试方法的启动,如下面的例子:A. 运行某个package下所有TestCase:adb shell am instrument -w com.android.foo/android.test.InstrumentationTestRunnerB. 运行某个TestCase:adb shell am instrument -w -e classcom.android.foo.FooTest *TestRunnerC. 运行一个TestCase中的某个功能:adb shell am instrument -w -e classcom.android.foo.FooTest#testFoo *TestRunnerD. 同时测试多个TestCase:adb shell am instrument -w -e class com.android.foo.FooTest,com.android.foo.FooTest2 *TestRunner4) 例子一般Android单元测试要在setUp()中初始化Instrumentation环境和启动被测应用程序Activity,在测试方法中模拟事件,断言结果,然后在tearDown()中销毁应用程序。public class QQLoginTest extends ActivityInstrumentationTestCase2 Instrumentation instru = null; QQLogin loginActivity = null; public QQLoginTest() super(qqpkg, QQLogin.class); public void setUp() super.setUp(); instru = getInstrumentation(); loginActivity = getActivity(); public void testOpenMenu() instru.sendKeySync(KeyEvent); instru.sendKeyDownUpSync(KeyCode); instru.sendPointerSync(MotionEvent) instru.sendStringSync(String) instru.sendTrackballEventSync(MotionEvent) . public void tearDown() if (loginActivity != null) loginActivity.finish(); loginActivity = null; super.tearDown(); 另外,Instrumentation可以触发方法在UI线程中运行,操作具体控件。可以使用UIThreadTest来声明线程,这将会在UI线程里运行方法里所有的语句。也可以创建一个匿名的Runnable对象,把代码放到run()方法中,然后把这个对象传递给activity.runOnUiThread(),让方法中的一部分代码运行在UI线程。下面是一个例子: private Spinner mSpinner; protected void setUp() throws Exception super.setUp(); mInstrumentation = getInstrumentation(); mActivity = getActivity(); mSpinner = (Spinner) mActivity.findViewById( com.android.demo.myactivity.R.id.Spinner01); . public void uiThreadTest() mActivity.runOnUiThread(new Runnable() public void run() mSpinner.requestFocus(); ); mInstrumentation.waitForIdleSync(); this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER); . MonkeyMonkey可以运行在终端设备上,向系统发送伪随机的用户事件流,实现对应用程序进行压力测试。 Monkey通过开发机器上的命令行或脚本来启动,可以通过在每条命令前加上adb shell来达到目的,也可以进入Shell后直接输入Monkey命令。如果不指定选项,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。基本语法如下:$ adb shell monkey options下面是一个典型的命令行示例,它启动指定的应用程序,并向其发送500个伪随机事件:$ adb shell monkey -p -v 500运行Monkey需要许多选项,它们大致分为四大类:l 基本配置选项,如设置尝试的事件数量。l 运行约束选项,如设置只对单独的一个包进行测试l 事件类型和频率。l 调试选项。-v命令行的每一个-v将增加反馈信息的级别。Level 0(缺省值)除启动提示、测试完成和最终结果之外,提供较少信息。Level 1提供较为详细的测试信息,如逐个发送到Activity的事件。Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity事件-s 伪随机数生成器的seed值。相同seed对应相同的事件序列。-throttle 在事件之间插入固定延迟。-pct-touch/motion/trackball/nav/syskeys 调整触摸/动作/轨迹/导航/系统按键事件的百分比。-pct-appswitch 调整启动Activity的百分比。-pct-anyevent 调整其它类型事件的百分比。约束限制-p 指定一个或几个包,只允许启动这些包里的Activity。-c 指定一个或几个类别,只允许启动被这些类别中的Activity。调试-dbg-no-events 启动后不生成事件。-ignore-crashes/timeouts/security-exceptions 忽略崩溃或异常/超时错误/许可错误。-kill-process-after-error 停止发生错误的进程-monitor-native-crashes 监视并报告Android系统中本地代码的崩溃事件。WiMATWiMAT(Wireless Mobile Auto Testkit)终端软件自动化测试集,是无线研发部质量管理组测试开发组开发的一款功能强大终端测试软件,支持多种终端系统,其中就有Android系统。Android版的WiMAT实现了如下功能:1. 资源监控,用以监控CPU,内存,网络流量,电量等指标,支持在PC端以图像的方式动态显示。2. 资源填充,用以填充CPU,内存,磁盘,来模拟极端测试环境。3. MTTF,类似于Monkey测试,支持整个过程的录像和字幕(事件流)合成,支持预先记录脚本以跳过登录等功能。4. 自动化测试,支持通过Python脚本编写测试用例(不需要有应用程序源代码),提供xUnit的用例组织方式和编写方式,可以实现黑盒测试,并能调用前面部分的API在脚本中实现上述功能。图3: Android平台下WiMAT主页面 具体介绍和使用方法请参考测试开发组的相关文档,或者参考另外一片文章“Android平台下WiMAT的使用和实现”。其它1. Robotium是在Instrumentation基础上进行了进一步的封装和扩展,以实现更为强大的黑盒测试功能,官方网站为/p/robotium/,上面有一个例子: solo.sendKey(Solo.MENU); solo.clickOnText(More); solo.clickOnText(Preferences); solo.clickOnText(Edit File Extensions); Assert.assertTrue(solo.searchText(rtf); solo.clickOnText(txt); solo.clearEditText(2); solo.enterText(2, robotium); solo.clickOnButton(Save); solo.goBack(); solo.clickOnText(Edit File Extensions); Assert.assertTrue(solo.searchText(application/robotium); 通过该段代码可以看到,Robotium提供了很多更接近用户行为和方便用户操作的接口,以实现黑盒测试的自

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论