android自动化测试之robotium初探

 

对于robotium的使用感觉来说一下吧。使用感觉当然是方便了。因为确实帮助自动化测试开发者提供了很多方便的方法。

 

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

 

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

 

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

 

再来说说robotium的不足,

 

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

 

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

 

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

 

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

 

 

淘宝的牛人说的不足,不光是robotium的不足,而且是android JUnit的不足。所以淘宝希望能又自己的测试框架。这个对于一般中小型软件公司的投入来说是一个不敢想象的问题。所以,坐等淘宝的更高级的测试框架吧。先用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。
 
 
继续学习,把原来的被测试程序修改一下。Activity1 Intent Activity2 ,Activity2 Intent Activity3 触发的方式都是使用button的click事件。修改了测试程序。运行。没有问题。
 
最后确认。再次修改被测试程序。Activity1 Intent Activity2 ,Activity2 Intent Activity3。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。

2  robotium无法操作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

 

发布了21 篇原创文章 · 获赞 1 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/crystal_ooo/article/details/8275933