您的位置:首页 > 移动开发 > Android开发

android自动化测试之robotium初探

2012-12-09 22:10 375 查看
对于robotium的使用感觉来说一下吧。使用感觉当然是方便了。因为确实帮助自动化测试开发者提供了很多方便的方法。

具体的使用到的方法在这边说一下。

首先,androidJunit提供的实例代码,对于学习好像有一些帮助,但是对于一个实际的涉及到Activity之间有切换的问题,好像提及的不多,反正是没有找到。但是在robotium里面有一个solo.getCurrentActivity()帮助我们很轻松的搞定这个问题。

其次,输入内容。robotium里面的做的很细致,输入是模拟输入并不是简单的setvalue这样的简单粗暴的方法,其次对于控件是否存在和时候能够输入都做了判断。最后,等待控件在方法里面直接封装好了。就是用起来很方便了。

再来说说robotium的不足,

我段数比较低,还没有发现,但是淘宝的牛人们大概说了这么几条。

Robotium提供的API是面向过程的,测试代码的可扩展性差——我觉得robotium可以简单的源码反编译,看到源码,是在不爽了,可以自己重写方法。

让testapp和app运行在两个不同的进程中,这是一个大坑。——太高深的理解不了,但是有一个显而易见的缺点就是app进程不在了,testapp还在断言。呵呵

目前框架中有很多地方硬编码Thread.sleep()去等待一个View加载完成,避免对空的View进行操作,或者是对一个view进行set操作后,也需要等待一段时间让操作生效。希望能找到一种回调机制优雅的解决——这个说的很好,但是android现在真的没有提供。

淘宝的牛人说的不足,不光是robotium的不足,而且是androidJUnit的不足。所以淘宝希望能又自己的测试框架。这个对于一般中小型软件公司的投入来说是一个不敢想象的问题。所以,坐等淘宝的更高级的测试框架吧。先用robotium了。

评论:
robotium本身就是对instrumentation的封装,如果再进行反编译,那你还不如直接去用instrumentation测试.....

我是最近开始了解这个的.也不太清楚.

robotium本身就是对instrumentation的封装,如果再进行反编译,那你还不如直接去用instrumentation测试.....
robotuim之二


首先,robotium有一个getCurrentActivity,这个方法,我觉得那是相当的好用。于是,决定反编译源码好好的学习一下。于是,自己基本在照抄的情况下有了自己的getCurrentActivity方法。一用不好用。然后继续学习。


随着学习发现,robotium的那个getCurrentActivity方法也不好用了。超级纠结。


开始实验,getCurrentActivity方法使用范围。


自己写了一个简单的程序,这个程序由2个Activity组成。Activity1使用Intent方式调用Activity2。

Intent先由button的click事件触发。写了测试程序,getCurrentActivity方法很好用。没有问题。


继续改造,还是原来的程序,Activity1使用Intent方式调用Activity2,Intent由oncreat方法直接调用。

修改了测试程序。发现,我靠,郁闷了,报错了,得不到Activity2。



继续学习,把原来的被测试程序修改一下。Activity1IntentActivity2,Activity2IntentActivity3触发的方式都是使用button的click事件。修改了测试程序。运行。没有问题。


最后确认。再次修改被测试程序。Activity1IntentActivity2,Activity2IntentActivity3。Activity1-》Activity2使用的是button的click事件触发,Activity2-》Activity3直接在oncreat方法调用。修改了测试程序,getCurrentActivity能找到Activity3。


自己重写的getCurrentActivity方法和robotium里面的getCurrentActivity方法表现是一样的。因为基本上就是抄了人家的方法。


总结一下,如果程序刚启动的首个Activity自动Intent另外一个Activity来显示,这个地方不要使用getCurrentActivity方法,想别的办法直接找控件,在robotium里面除了用id找控件的方法,别的方法基本都是延时等待。就这样吧,android在线程方面感觉比较混乱,这个自动化测试做起来比较头大。getCurrentActivity这个方法一定要慎用。不过,这个很可能是android本身的一个bug。就像android在2。2以前的版本,不支持北侧程序不能有C++原生库一样。

robotium初探(三)
在qa.taobao上面看到高手评论robotium的不足,于是记下来实践了一下。
1无法捕获Toast。
2robotium无法操作webview控件。

大概研究了一下。

1无法捕获Toast,这个有点不明白。大概实验了一下,可以使用waitForText这个函数来捕获文字,这个方法返回值是布尔型的,所以返回true就是找到了。
这个方法要注意:(1)找的内容最好别处没有,别到时候别处也有相关的内容就有点悲催了。
(2)这个方法用的是延时等待,所以如果找不到的话,需要超时来处理,程序定义的超时时间为20s,这个有点慢了。所以不太好。

2无法操作webview的问题。大概看了一下robotium是不可以操作webview。但是在开发文档中找到了webview可以通过javascript来互动。互动这个很重要,大概的想法就是利用Javascript来实现操作webview。因为webview里面的结构应该是dom的结构,YUI里面提供了模拟用户操作的相关内容。
这个有时间在研究吧。

顺便说一句,手机方面的自动化测试真变态。android上面还好一些,IOS的那个更变态。IOS那个以后再说吧。

robotium就这样吧,大概能用了。如果遇到问题到时候在研究吧。大概用起来还是很方便的,而且robotium考虑的比较全面,反正比我考虑的全面多了,拿来主义吧。

之后的工作应该主要考虑一下,利用robotium测试android应用的程序架构。

1控件识别方法,包括考虑程序修改和功能变化等;
2测试方法封装,尽可能的减少重复并且在最后一层表现为标准的ATDD的方式
3测试结果展现,从现在查到的资料没有看到直接从手机上看测试结果,这个很不方便。日志(不管是logcat还是自己写文件)个人觉得也不方便。需要自己写一个方法直接捕获测试结果并且展现。手机测试当然要出去测试了,出去测试的时候还要连着电脑有点搞笑有点丢人。
另外:

android是可以装个terminal和bash的,而且可以支持python
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: