android的自动化测试方案,弄了好久了。
Monkeyrunner对象引用速度太慢,过于简陋;
Robotium不能跨应用(不知道现在最新情况如何),即便能够跨应用我都不是太想用他,太麻烦,而且毕竟不是亲生的,稍微google搞点动作,就够他一阵忙乱的;
Google在sdk4.0以后提供了一个自动化解决方案uiautomator:
优点:可以跨应用了;这可是亲生的;
缺点:必须sdk4.0以上版本;要想实现的好,最好有开发配合;java项目编译为jar后需要push到手机才能运行,也就是说必须打印日志暴力调试。
一直有研究和简单使用,但是一直没有推向生产使用,理由很简单,性价比不够高,每行代码都需要自己去查看元素对象的引用方法一点点的编写,太麻烦了。
但是这个解决方案毕竟是可以解决android的自动化测试的。
不过要想走得顺畅并不容易,需要关注几个要点:
1. 需要一个工具,打开源码文件后,将所有的布局文件打开,写入contentDescription属性,如果不写这个属性也能对象引用,但是会很麻烦,你需要去找各种不同的属性进行引用,既然人家已经提供了这个属性,目的就是让你方便引用的,所以最好充分利用,写完后,要留心,因为listview的行布局文件是一个,也就是说如果代码运行后,你的listview控件的每行的contentDescription属性都会是一样的,需要使用其他的属性进行引用,最好呢是在代码中修改该属性;
2. 上述方法搞定了静态控件后,找到开发,确定哪些是动态生成的,在代码中加入动态对象的属性,编译通过后,提交到版本库;
3. 建立长效机制,这个是最重要的,以后每次增加了新的模块,开发都要给控件提供该属性的唯一值,开发测试可以约定一个命名方式。
这个解决方案的成败关键是开发测试的充分沟通和长效机制的运作,要不然就会出现下面的情形:
开发把代码扔给测试就不管了,每次版本发布,都需要给所有的静态对象加上contentDescription属性,动态对象测试历尽千辛万苦才引用到,然后执行。试想想,要是版本频繁发布,这样根本就无法正常运转下去。
但是这个方案是一个可行的可用的解决方案。
参考工具:
这个vbs脚本是通过指定项目文件目录,自动搜寻下面所有的layout目录,找到所有的布局文件,将布局文件中的每个元素都加上contentDescription属性,以便uiautomator进行对象识别和引用操作。
http://download.csdn.net/detail/testingba/6931865