Monkeyrunner----Android tools中的测试工具 ,主要通过脚本,实现模拟用户对appUI界面的操作,完成对app的黑盒测试。
利弊:
1、可以完成一定复杂程度的测试用例,避免重复的人工工作量;
2、结合heap、strict mode等工具,可以实现压力测试,性能优化等任务;
3、某些API对机型兼容不好,例如4.0以下的机型,对viewnode server支持不友善,导致drag api不能正常工作;
4、由于monkeyrunner的实现基于python脚本,性能比较低下,对脚本的编写有质量要求。
tips:
路径:sdk\tools\monkeyrunner.bat,主要依赖sdk\tools\lib下的:chimpchat.jar, hierarchyviewer2.jar, hierarchyviewer2lib.jar,可以通过分析上述三个jar的源码获得一些高级的API支持:
1. MonkeyRunner和MonkeyDevice是最基础的类.
2. EasyMonkeyDevice提供了一些根据ID进行touch, type, locate, getText的方法
3. By提供了根据ID返回PyObject的方法,使用EasyMonkeyDevice和By的配合可以利用ID做很多事情.
4. HierarchyViewer提供了根据ID找到ViewNode,对viewnode的一些操作等
5. ViewNode类的一个对象就代表了一个控件。控件上的所有属性,包括mID,mText,height,width都可以从这个类得到,从viewnode的java源码中可以得到非常多的信息。
通常实现控件的点击,可以这样子:
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控件的点击
关于编码
MonkeyRunner中负责解析python的其实是Jython,即是Java版本的python解析器,两种语言之间的调用当然就会存在编码问题:
value = device.getProperty('build.version.sdk') print ">>>%s = %s" % ('sdk version', value)
上面在print 这句代码中,会抛出 unknown encoding 'ms936'
打开命令行工具,输入:chcp 437
Active code page: 437
即可解决!
相关推荐
monkeyrunner教程
很全的关于monkeyrunner的中文文档,希望对大家有所帮助。
monkeyrunner+python脚本 monkeyrunner+python脚本 monkeyrunner+python脚本 . monkeyrunner+python脚本 monkeyrunner+python脚本
比较了monkeyrunner和monkey这两个好兄弟,同时把monkeyrunner实现的脚本集成到eclipse-pydev的环境中运行
monkeyrunner简单实用手册,里面介绍了monkeyrunner如何连接固定手机,如何截图,如何进入脚本录制界面,如何运行monkeyrunner等操作
MonkeyRunner-官方Doc
包含两个monkeyrunner小工具,分别为录制和回放工具,希望能够帮到初学Android自动化的朋友。
Monkeyrunner入门使用总结,非常适合初学者学习
MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Python的程序来模拟操作控制Android设备app,测试其稳定性并通过截屏可以方便地记录出现的...
monkeyrunner工具提供一个API来控制Android设备。可以写一个python脚本来安装应用,运行应用,发送键值,截图。monkeyrunner对python进行了封装,加入了一些针对Android设备的类。可以完全用python脚本来实现这些...
android自动化测试monkeyrunner的入门使用教程,讲解了如何使用monkeyrunner进行android的自动化测试
MonkeyRunner的java代码实现,测试例子,以及用到的测试apk
MonkeyRunner是android应用的测试工具, 可以模拟录制屏幕操作,并导出脚本做压力测试.
NULL 博文链接:https://jasonshieh.iteye.com/blog/1169583
主要描述如何使用monkeyrunner,以及脚本的使用
monkeyrunner的源代码,以及googlecommon的源码,hierchyviewer的源码,还有其他的库
monkeyrunner 脚本包括:打印手机屏幕分辨率,阅读页自动翻页功能 下载好以后,首先要确定pc客户端:adb devices 有设备连接
monkeyrunner环境搭建以及monkeyrunner与python的交互简单说明
Monkeyrunner常用操作编程