MonkeyRunner简介
来源:互联网 发布:在线电影下载软件 编辑:程序博客网 时间:2024/06/15 02:17
一、什么是monkeyrunner
monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。
二、monkeyrunner工具同Monkey工具的差别
Monkey:
Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。
monkeyrunner:
monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器。
三、monkeyrunner的测试类型
1、多设备控制:monkeyrunner API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
2、 功能测试: monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
3、 回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
4、 可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用Android Debug Bridge这样的Android工具。
四、Python环境搭建1、下载安装Python
下载网址:https://www.python.org/
2、环境变量配置 计算机 -> 属性 -> 高级系统设置 -> 环境变量 -> 系统变量 -> 找到Path,添加 ;C:\Python27
3、安装SDK,配置SDK环境变量
五、MonkeyRunner模块简介MonkeyRunner:一个为monkeyrunner程序提供工具方法的类。这个类提供了用于连接monkeyrunner至设备或模拟器的方法。它还提供了用于创建一个monkeyrunner程序的用户界面以及显示内置帮助的方法。
waitForConnection (float timeout, string deviceId)sleep (float seconds)
help (string format)
MonkeyImage :表示一个截图对象。这个类提供了截图、将位图转换成各种格式、比较两个MonkeyImage对象以及写图像到文件的方法。
MonkeyImage创建对象的方法如下:newimage =MonkeyDevice.takeSnapshot()
writeToFile (string path, string format)
MonkeyDevice :表示一个设备或模拟器。可以实现应用安装、卸载,按键、触击、拖拽,Activity的启动,输入等操作。
MonkeyDevice的常用方法:
press(‘按键值’, 动作)
按键值为Andriod键值表中有的值:http://developer.android.com/reference/android/view/KeyEvent.html
动作:DOWN, UP, DOWN_AND_UP。大部分时间用DOWN_AND_UP来模拟按键、松手的过程。比如要进行一个返回键操作:
device.press('KEYCODE_BACK', MonkeyDevice.DOWN_AND_UP)
touch(x坐标, y坐标,动作)
这里的坐标值要通过hierarchyviewer工具来获取,动作同上。
drag((x, y),(x, y),持续时间,轨迹点)
第一组是起始坐标,第二组终点坐标。这里的坐标值要通过hierarchyviewer工具来获取,轨迹点类似采样。
shell(‘string’)
这里可以输入adb shell命令,是对monkeyrunner的有效拓展,利用shell方法,可以进行am操作。
启动Activity:
startActivity(‘string’)
六、示例 test.py
# 导入此程序所需的monkeyrunner模块 from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice MonkeyImage# 连接当前设备,返回一个MonkeyDevice对象 device = MonkeyRunner.waitForConnection() # 安装Android包,注意,此方法返回的返回值为boolean,由此您可以判断安装过程是否正常 device.installPackage('myproject/bin/MyApplication.apk') # 运行此应用中的一个活动device.startActivity(component='com.example.android.myapplication.MainActivity') # 按下菜单按键 device.press('KEYCODE_MENU','DOWN_AND_UP') # 截取屏幕截图 result = device.takeSnapshot()# 将截图保存至文件 result.writeToFile('myproject/shot1.png','png')#时延(秒):MonkeyRunner.sleep(3) #滑动屏幕(Python脚本):for i in range(1,70):device.drag(start,end,0.1,10) #触击屏幕: device.touch(94,34,'DOWN_AND_UP') # 运行此应用中的一个活动device.startActivity(component='com.example.android.myapplication.MainActivity') # 按下菜单按键 device.press('KEYCODE_MENU','DOWN_AND_UP') # 截取屏幕截图 result = device.takeSnapshot()# 将截图保存至文件 result.writeToFile('myproject/shot1.png','png')
配置sdk环境变量,直接在cmd下运行
monkeyrunner -plugin <程序文件名> <程序选项>
未配置环境变量的需要手动切换到monkeyrunner所在路径sdk\tools目录下运行
例:monkeyrunner test.py
八、MonkeyRunner缺陷:
- 1.不支持中文字符的输入(只能输入ASC码中存在的字符)
- 2.基于UI操作,一旦遇到复杂的应用,测试代码的复杂度指数增长;测试设备性能不同,需要根据设备的快慢对操作加时延;脚本的运行速度慢
- 3.无法将测试结果抓取出来,只能采用截图比较。无法准确统计测试数据。
- 4.drag方法只能实现简单的滑动屏幕的操作,不能进行复杂的拖拽。微博客户端的下拉刷新操作无法模拟出来。
- 5.monkeyrunner提供的操作有限,适合处理反复点击等小范围的操作,用来测试一个点是比较好的。可以做软件跑分、浏览器跑分等稳定性测试,或是用来安装JUnit写好的测试app。
- 6.monkeyrunner不适合处理连续的操作。一旦进入到应用层,因为drag方法的不稳定,跳转就需要用点击按钮来代替,这样无法模拟用户真实的操作。 用工具来定位坐标、查找各个按钮的id,消耗时间。一旦UI改变,脚本可能就无法使用。
- 7.monkeyrunner或者其他基于UI的脚本测试,对所测试系统的稳定性要求比较高。如果系统或者软件非常容易奔溃,就会终端测试脚本,无法自动化。
- MonkeyRunner简介
- MonkeyRunner简介
- MonkeyRunner简介
- MonkeyRunner简介
- Android测试教程(16):monkeyrunner简介
- monkeyrunner
- monkeyrunner
- 【monkeyrunner】
- 【monkeyrunner】
- Monkeyrunner
- Monkeyrunner
- MonkeyRunner
- MonkeyRunner
- MonkeyRunner
- Monkeyrunner
- Monkeyrunner
- monkeyrunner
- MonkeyRunner
- crontab 定时任务没有执行
- Codeforces Round #311 (Div. 2) C. Arthur and Table
- sip协议内容解析
- Android BatteryStatsHelper深入理解(and5.1)
- Yii 表模型类具备的方法的一个例子(必须+可选)
- MonkeyRunner简介
- 总帐凭证和总帐余额
- 一篇讲解端口的很不错的一篇文章-------------
- 南邮 OJ 1087 A + B Problem (4)
- C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)
- 计算机程序模型
- HDU - 1269 - 迷宫城堡 (tarjan求强连通分量)
- Google翻译是如何把深度学习“塞进”手机的?
- Java线程调度器ScheduledThreadPoolExecutor 分析