年底总是有些乱乱的感觉,项目有些空闲,所有上班时间必须思考好今天干什么,否则一天都会很痛苦……
最近几天了解了下android自动化测试相关的知识。
以下对几种测试工具的介绍摘自网络:
现在,已经有大量的Android自动化测试架构或工具可供我们使用,其中包括:Activity Instrumentation,MonkeyRunner,Robotium,以及Robolectric。另外LessPainful也提供服务来进行真实设备上的自动化测试。
Android自身提供了对instrumentation测试的基本支持,其中之一就是位于android.test包内的ActivityInstrumentationTestCase2类,它扩展了JUnit的TestCase类来提供Android activities的功能测试。在应用测试中,每一个activity首先会被Instrumentation初始化,然后再加载到Android模拟器或设备的Dalvik虚拟机中来执行。
Android SDK自带一个测试工具MonkeyRunner,它提供的API和执行环境可以运行Python语言编写的测试代码。它提供API来连接设备,安装/卸载应用,运行应用,截屏,比对图片来判断特定命令执行后的屏幕是否包含预期信息,以及运行对应用的测试。MonkeyRunner使用ActivityInstrumentationTestCase2,ProviderTestCase,ServiceTestCase,SingleLaunchActivityTestCase及其他类来定义测试用例,并使用InstrumentationTestRunner类来运行测试。
Robotium是另一种通过InstrumentationTestRunner来完成Android交互式测试的架构,它横跨多个activities,支持功能测试,系统测试和接收测试。Robotium支持Activities、Dialogs、Toasts、Menus、Context Menus甚至Honeycomb,并且它可以同Maven和Ant集成来完成持续集成测试。Robotium被称之为针对Android应用的又一个“Selenium“。
Robolectric另辟蹊径,它并不依赖于Android提供的测试功能,它使用了shadow objects并且运行测试于普通的工作站/服务器JVM,不像模拟器或设备需要dexing(Android dex编译器将类文件编译成Android设备上的Dalvik VM使用的格式),打包,部署和运行的过程,大大减少了测试执行的时间。Pivotal实验室声称使用Robolectric可以在28秒内运行1047个测试。
LessPainful将Android测试又推进了一步,它提供了一个多设备平台自动化测试的服务。用户上传应用(*.apk)和用Cucumber(一种业务相关的DSL)编写的测试文件,选择测试运行需要的设备配置,最后测试将自动执行并生成测试报告。它支持的设备包括Garmin Asus,几款HTC,LG,Samsung Galaxy,Sony Xperia和Motorola Motodefy。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
看了几天android测试相关的东西。从junit开始,之前没有接触过测试相关的知识。
网上有好多junit的资料,我主要看的是 Android、JUnit深入浅出:http://www.moandroid.com/?tag=android%E3%80%81junit%E6%B7%B1%E5%85%A5%E6%B5%85%E5%87%BA 分析的很详细。根据上述的资料了解了junit.framework 包和 android.test 包。
做了一些android下的简单的测试,收获不算很大,个人悟性问题……
之后又了解了robotium 源码和淘宝的测试框架tmts,觉得还不错。
tmts和robotiun的设计思想:利用java的反射机制,得到当前所有的view,并根据条件匹配需要的view;然后利用Instrumentation对控件进行需要的操作。比如点击,滚动等等。
tmts相对与robotium来说,支持了根据控件的id查找控件的功能,支持对webview的操作。同时tmts也支持捕获弹出对话框的内容,输出错误日志等。
从测试代码方面来看, Robotium中采用的是actionMethod(View, arg)的方式,TMTS中采用getView(id).actionMethod(arg)的方式,更加符合java的编程习惯。TMTS测试代码的编写也就是分三步,找到View,调用View的相应的action方法,断言。