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(‘按键值’, 动作)

相应的按键对应名称:
  menu键:KEYCODE_MENU
  home键:KEYCODE_HOME
  back键:KEYCODE_BACK
  search键:KEYCODE_SEARCH
  call键:KEYCODE_CALL
  end键:KEYCODE_ENDCALL
  上音量键:KEYCODE_VOLUME_UP
  下音量键:KEYCODE_VOLUME_DOWN
  power键:KEYCODE_POWER
  camera键:KEYCODE_CAMERA

按键值为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')


七、运行monkeyrunner
 配置sdk环境变量,直接在cmd下运行 

monkeyrunner -plugin  <程序文件名> <程序选项>

未配置环境变量的需要手动切换到monkeyrunner所在路径sdk\tools目录下运行

例:monkeyrunner test.py


八、MonkeyRunner缺陷:

  • 1.不支持中文字符的输入(只能输入ASC码中存在的字符)
  • 2.基于UI操作,一旦遇到复杂的应用,测试代码的复杂度指数增长;测试设备性能不同,需要根据设备的快慢对操作加时延;脚本的运行速度慢
  • 3.无法将测试结果抓取出来,只能采用截图比较。无法准确统计测试数据。
    • 4.drag方法只能实现简单的滑动屏幕的操作,不能进行复杂的拖拽。微博客户端的下拉刷新操作无法模拟出来。

  1. 5.monkeyrunner提供的操作有限,适合处理反复点击等小范围的操作,用来测试一个点是比较好的。可以做软件跑分、浏览器跑分等稳定性测试,或是用来安装JUnit写好的测试app。
  2. 6.monkeyrunner不适合处理连续的操作。一旦进入到应用层,因为drag方法的不稳定,跳转就需要用点击按钮来代替,这样无法模拟用户真实的操作。 用工具来定位坐标、查找各个按钮的id,消耗时间。一旦UI改变,脚本可能就无法使用。
  3. 7.monkeyrunner或者其他基于UI的脚本测试,对所测试系统的稳定性要求比较高。如果系统或者软件非常容易奔溃,就会终端测试脚本,无法自动化。

0 0
原创粉丝点击