Android系统自动化测试简述
作者:网络转载 发布时间:[ 2013/1/5 10:50:14 ] 推荐标签:
Bug的定位离不开日志,因而日志系统也是一个测试框架重要的组成部分,Android的Log类中提供了一系列的静态方法可以在IDE中打印日志。在TMTS中,提供TmtsLog类,除日志打印外可将日志内容实时保存至SD卡指定目录,在框架代码中的关键部位都加上了这样的日志用来保存异常时的调用栈信息,用户的测试代码中也可以加上对TmtsLog的调用跟踪测试代码执行进度,TmtsLog将为每个测试类保存一份这样的日志文件,同时包含用户的过程日志和框架异常日志,文件名以精确到毫秒的日期加以区分。
项目做到这里远远没有结束,套用屈原的一句话是路漫漫其修远兮。
后面计划解决的问题有:
1.跨进程测试,让testapp和app运行在两个不同的进程中,这是一个大坑。
2.稳定性问题,目前框架中有很多地方硬编码Thread.sleep()去等待一个View加载完成,避免对空的View进行操作,或者是对一个view进行set操作后,也需要等待一段时间让操作生效。希望能找到一种回调机制优雅的解决。
而且Robotium提供的API是面向过程的,测试代码的可扩展性差。
我们需要一个面向对象的,可对WebView进行操作的自动化测试框架,这催生了TMTS(Taobao Mobile Test Studio)框架。
TMTS立项时还试图着重解决另一个问题,是Instrumentation框架下testapp和app运行在一个进程中 ,app crash会导致testapp一并crash。当时和士敦一起研究了Instrumentation、Activity的启动流程,甚至想去研究一下dalvik是如何解析Manifest文件的,后也没有想到好的方法,收获是了解了android更底层一些的细节,这个问题现在先搁置了起来。
从测试代码方面来看, Robotium中采用的是actionMethod(View, arg)的方式,TMTS中采用getView(id).actionMethod(arg)的方式,更加符合java的编程习惯。TMTS测试代码的编写也是分三步,找到View,调用View的相应的action方法,断言。
TMTS框架主要思想是通过反射机制调用Android框架层API拿到当前Activity的所有View,在此基础上返回需要获得的View对象,对获得的View通过Instrumentation封装一些此View常用的操作,后返回,这是TmtsView及其子类。
这种方式缺点也很明显,对每个从android.View继承来的子类,如果其中有特殊的操作,需要封装出一个对应的TmtsView子类。
还有一个缺点是目前是通过View在布局文件中声明的id去寻找,这样测试人员在编写代码时需要对app的源码非常熟悉,了解当前操作的view的id是多少,在传递id参数时还有可能写错。之后我们对这个方式进行了一些改进,使用SDK自带的hierarchyviewer工具获得view的id;对每个布局文件进行解析生成java类,这个类中会提供方法返回布局文件中的所有带id的view,经过讨论,后按view子类型来对一个布局中的view进行归类。
现在测试代码从getView(id).actionMethod(arg)演变成了Layout(layout.class).ViewType().view().actionMethod(arg)的方式,代码虽然变长了,但是出错的可能性大大降低了。
Bug的定位离不开日志,因而日志系统也是一个测试框架重要的组成部分,Android的Log类中提供了一系列的静态方法可以在IDE中打印日志。在TMTS中,提供TmtsLog类,除日志打印外可将日志内容实时保存至SD卡指定目录,在框架代码中的关键部位都加上了这样的日志用来保存异常时的调用栈信息,用户的测试代码中也可以加上对TmtsLog的调用跟踪测试代码执行进度,TmtsLog将为每个测试类保存一份这样的日志文件,同时包含用户的过程日志和框架异常日志,文件名以精确到毫秒的日期加以区分。
项目做到这里远远没有结束,套用屈原的一句话是路漫漫其修远兮。
后面计划解决的问题有:
1.跨进程测试,让testapp和app运行在两个不同的进程中,这是一个大坑。
2.稳定性问题,目前框架中有很多地方硬编码Thread.sleep()去等待一个View加载完成,避免对空的View进行操作,或者是对一个view进行set操作后,也需要等待一段时间让操作生效。希望能找到一种回调机制优雅的解决。
3.设法捕获Toast消息
后面可能会研究的方向,是通过非java的方式来实现android自动化测试。Android目前已经通过ASE(Android Scripting Environment)支持了多种脚本语言,如phyton,lua,perl等,限于目前的人力还没有时间来研究这一块,相信ASE会给Android自动化开辟一片新天地。
后谈一点点感悟,老子曾经曰过:“持而盈之,不如其已;揣而锐之,不可长保。金玉满堂,莫之能守;富贵而骄,自遗其咎。”和“重为轻根,静为躁君。”第一句话说有缺陷才是真正的完美,没有一个方案是真正完美的。第二句话说有时候看起来完美的方案,过段时间之后又不适用了,而且不适用的地方很可能是当初觉得完美的地方,对于软件项目解决方案也是如此。
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11