Monkeyrunner小结
- - 移动开发 - ITeye博客Monkeyrunner----Android tools中的测试工具 ,主要通过脚本,实现模拟用户对appUI界面的操作,完成对app的黑盒测试. 1、可以完成一定复杂程度的测试用例,避免重复的人工工作量;. 2、结合heap、strict mode等工具,可以实现压力测试,性能优化等任务;. 3、某些API对机型兼容不好,例如4.0以下的机型,对viewnode server支持不友善,导致drag api不能正常工作;.
Monkeyrunner----Android tools中的测试工具 ,主要通过脚本,实现模拟用户对appUI界面的操作,完成对app的黑盒测试。
通常实现控件的点击,可以这样子:
easy_device.touch(By.id(id),MonkeyDevice.DOWN_AND_UP)
上面的By.id(id)返回的只是一个PyObject,在easy_device.touch方法中,实现时再回调PyObject中的findView方法,然后再去hierarchyviewer中遍历viewnode,并计算viewnode的坐标,最后就是调用device.touch。咋一眼看,没什么问题,但是从hierarchyviewer遍历viewnode这一节,如果程序的界面十分复杂,hierarchyviewer会十分巨大,从中遍历指定id的viewnode,会超级耗时,由此会引发超时异常,往往会导致点击失败。视图的hierarchyviewer有多大?可以点击eclipse的Load View Hierarchy,即可看到视图控件的层级关系。
根据easy_device.touch(By.id(id),MonkeyDevice.DOWN_AND_UP)的实现原理,我们可以做一下流程的优化:
hierarchy_viewer = device.getHierarchyViewer() print hierarchy_viewer #返回的对象是com.android.chimpchat.hierarchyviewer.HierarchyViewer,见于chimpchat.jar view_node = hierarchy_viewer.findViewById('id/helpinfo_btn') print view_node #返回的对象是com.android.hierarchyviewerlib.models.ViewNode,见于hierarchyviewer2lib.jar point = hierarchy_viewer.getAbsoluteCenterOfView(view_node) #getAbsoluteCenterOfView是HierarchyViewer中的public方法 help_btn_x = point.x help_btn_y = point.y
上面的代码在连接device时执行,下面的点击实现代码,则可以在任何测试逻辑环节中调用,响应时间将大大减少。
device.touch(help_btn_x, help_btn_y, MonkeyDevice.DOWN_AND_UP) #实现view中指定id控件的点击
关于编码
value = device.getProperty('build.version.sdk') print ">>>%s = %s" % ('sdk version', value)
上面在print 这句代码中,会抛出 unknown encoding 'ms936'