移动端测试_MonkeyRunner
工具介绍
Monkey runner用于android系统自带的自动化测试工具,存在于android sdk中。Monkeyrunner提供了一套api,调用api编程可在android代码之外控制android设备和模拟器。通过monkeyrunner可以编写python程序去安装一个android应用程序或者去运行它,发送模拟按键,滑屏,输入字符,截屏保存图片等。MonkeyRunner是基于Jython(Jython为Java和python相互操作提供桥梁)
MonkeyRunner工具的设计目的:用于应用程序测试功能
Monkey和MonkeyRunner的区别:
1.Monkey工具主要是直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流,其支持的命令语句有限。2.MonkeyRunner采用客户端/服务器架构,运行在PC端,逐行解释Jython脚本代码,将其命令发送到Android设备或模拟器。
环境配置
1.正常部署Android环境(网上介绍android环境很多,不再重复)
2.Android sdk目录下tools文件夹包含monkeyrunner的批处理文件
3.正常安装python。并将python.exe的文件目录添加至系统环境变量。
参考:http://www.cnblogs.com/lynn-li/p/5885163.html
脚本录制
脚本源码:http://www.cnblogs.com/tester2test/p/4420056.html
步骤:
1.将脚本monkey_recorder.py置于android sdk下的tools目录。
2. 手机设备连接到电脑,可用adb devices进行查看
3.切换至sdk/tools目录,执行monkeyrunner monkey_recorder.py进行调用
4.界面左侧显示手机屏幕信息,右侧则对应的脚本代码信息。可直接在手机上进行各项操作,右侧会自动生成对应的运行脚本代码。
脚本回放
步骤:
1.下载回放脚本monkey_playback.py
2.通过命令“monkeyrunner monkey_playback.py” + “已保存的脚本录制文件路径及名称”
脚本编写
编写MonkeyRunner脚本主要用monkeyrunner.jar中的MonkeyRunner、MonkeyDevice和MonkeyImage类(com.android.monkeyrunner)。编写之前需要先导入这三个类。脚本编写完后,切换至android sdk/tools目录,执行monkeyrunner test.mr(脚本名)即可执行脚本。
MonkeyRunner
提供连接monkeyrunner到设备或者模拟器的方法
提供创建monkeyrunner程序的用户界面以及显示内置帮助的方法
MonkeyDevice 提供安装和卸载程序包的方法
提供启动一个活动(activity)的方法
提供发送键盘或触摸事件到应用程序的方法
可用于运行测试包
MonkeyImage 提供截图、将位图转化成各种格式的方法
提供比较两个MonkeyImage对象以及写图像到文件的方法。
实例:安装“SimpleApp.apk”应用,运行应用并截屏保存至D盘根目录,文件名为simp.png。
运行方法:
1.控制台输入monkeyrunner,在提示符下直接输入脚本语句运行
2编写一个python脚本,通过运行monkeyrunner +脚本名。在记事本中编写对应脚本,保存至sdk下的tools,文件名为test.mr,脚本如下:
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice,MonkeyImage // 引入类
device = MonkeyRunner.waitForConnection() //等待连接设备
device.installPackage(‘D:\\AndroidProjects\\SimpleApp.apk’) // 安装apk
MonkeyRunner.sleep(3) // 等待3 S
device.shell(‘am force-stop simple.app.SimpleAppActivity’) // 先关闭应用,防止已打开
MonkeyRunner.sleep(3)
device.startActivity(component=’simple.app/simple.app.SimpleAppActivity’) // 启动SimpleAppActivity
device.drag((288,204),(288,1024),3,1) // 滑屏解锁操作,针对具体的手机设备使用
MonkeyRunner.sleep(3)
result = device.takeSnapShot // 截屏并保存图片
result.writeToFile(‘d:\\simp.png’, ’png’)
常用脚本
常用键码如下,
键功能 键值码 键功能 键值码
菜单键 KEYCODE_MENU 搜索键 KEYCODE_SEARCH
HOME键 KEYCODE_HOME 呼叫键 KEYCODE_CALL
返回键 KEYCODE_BACK 结束键 KEYCODE_ENDCALL
上调音量键 KEYCODE_VOLUME_UP 电影键 KEYCODE_POWER
下调音量键 KEYCODE_VOLUME_DOWN 照相键 KEYCODE_CAMERA
常用脚本,
连接设备
device = MonkeyRunner.waitForConnection()
device = MonkeyRunner.waitForConnection(5,’设备序列号’)
Home键
device.press(‘KEYCODE_HOME’, MonkeyDevice.DOWN_AND_UP)
重启设备
device.reboot()
唤醒设备
device.wake()
按菜单键
device.press(‘KEYCODE_MENU’, MonkeyDevice, DOWN_AND_UP)
输入内容
device.type(‘monkeyrunner’)
启动Activity
device.startActivity(component= ‘simple.app/simple.app.SimpleAppActivity’)
安装apk
device.installPackage(“D:\\***.apk”)
卸载apk
device.removePackage(“com.android.chrome”)
控制多个设备
device1 = MonkeyRunner.waitForConnection(5,’设备序列号’)
device2 = MonkeyRunner.waitForConnection(5,’设备序列号’)
device1.press(‘KEYCODE_HOME’, MonkeyDevice.DOWN_AND_UP)
……
Device1.type(‘monkeyrunner’)
Device2.press(‘KEYCODE_HOME’, MonkeyDevice.DOWN_AND_UP)
……
Device2.type(‘testing’)
对比截屏和已存图片 device = MonkeyRunner.waitForConnection(5,’设备序列号’)
result = device.takeSnapshot()
result.writeToFile(‘D:\\result.png’, ‘png’)
Pic2 = MonkeyRunner.loadImageFromFile(‘D:\\picture2.png’)
If(result.sameAs(Pic2, 0.9)): Print(“success”)
Else: Print(“fail”)