android UI自动化测试工具Robotium VS NativeDriver VS Calabash

时间:2021-04-08 19:59:49

http://kongqingyun123.blog.163.com/blog/static/6377283520126294029822/

自从上次对Robotium和nativedriver这两个工具做对比已经过去将近一年的时间了(上次内容见http://kongqingyun123.blog.163.com/blog/static/637728352011614111010446/),一年时间对于一个开源的工具来说变化肯定是很多的。同时很多当初对于工具的看法也会有些不同,当初选择了NativeDriver来做一些手机上的自动化测试,但是在后续的使用过程中也发现了一些问题,现在主要是在用Robotium来写一些测试用例。

Robotium:
http://code.google.com/p/robotium/
当前已经发布了最新的3.3版本,robotium的社区还是挺活跃的,会有很多人提问题,以及帮助你解决问题。可以加入groups,http://groups.google.com/group/robotium-developers 
先简单说一下后面使用robotium的原因。
1、支持滑动操作,测试项目中很多地方只能通过滑动屏幕来实现,robotium支持,但是nativedriver不支持
2、robotium支持获取toast的,nativedriver不支持
3、关于robotium需要为应用重签名的问题,这个其实问题不大,实现的话也比较简单,完全可以实现自动化来实现,windows下自动化为应用重签名的bat脚本可以参考http://kongqingyun123.blog.163.com/blog/static/63772835201243143159515/
4、关于之前说的api中很多都使用index索引的问题,其实robotium也提供了通过R.java文件中的id来获取元素,不过前提是你能够获取到被测应用的R.java文件,我们测试自己公司的应用,可以方便的让开打打包时也保留一份和apk匹配的R.java文件即可
通过View button = solo.getView(R.id.button) ;  solo.clickOnView(button ); 来实现,只要开发不更改空间id的名称,每次只需要使用最新的R.java文件覆盖即可,对于后续的测试用例维护会方便一些。


当然每个工具你在使用的过程中也会发现一些不好用的地方:
关于下面的具体实习方式,后续写一篇文章介绍一些我们基于Robotium的用例,外围在PC端写了一套框架来解决这些问题,同时可以通过简单的配置来实现自动化的运行不同版本模拟器上的自动测试。
关于PC端的框架可以实现原理可以参考:http://kongqingyun123.blog.163.com/blog/static/63772835201262534056673/
1、robotium在运行测试用例的时候有时候会crash,直接导致测试停止,然后你的测试结果也收集不到了。
关于这个问题个人的解决方案是运行测试用例的时候通过cmd发送adb shell am instrument 命令, 每次只执行一个测试用例,然后通过获取cmd的返回值来判断是否是crash了,如果crash的话则重跑用例
2、测试用例运行不稳定的问题
有时候你用例写完了没有问题,但是在模拟器上跑的时候还是偶尔的会出现运行失败,当前的解决方案也是按照测试结果返回值获取检测到失败则继续重跑,当前定义的重跑三次。(这里使用了一个开源的android-junit-report工具)
3、不支持WebView控件。(Robotium不支持,Calabash支持)



NativeDriver:
http://code.google.com/p/nativedriver/
具体查看这里http://kongqingyun123.blog.163.com/blog/static/637728352011614111010446/
Nativedriver是google日本的团队开发的,但是团队人员已经去做其它项目,所以NativeDriver基本上已经是不更新了,社区的活跃度也已经是很低。nativedriver存在的一些bug估计也都还没有修复掉。


Calabash:

https://github.com/calabash
calabash-android是Robotium+cucumber实现的,最底层还是用的robotium,加入了对于WebView的支持
这个工具刚开源不久,社区还是挺活跃的,有问题提问的话开源的作者也会很积极的帮助你解决。
该工具的具体效果如果还没实践过,不过支持android和IOS,以及使用cucumber的方式来编写测试用例还是会比较感兴趣,另外还支持webview控件