官方介绍:
Monkeyrunner工具提供了一个API,用于编写可从Android代码外部控制Android设备或模拟器的程序。使用monkeyrunner,您可以编写一个Python程序来安装Android应用程序或测试包,运行它,向其发送击键,获取其用户界面的屏幕快照,并将屏幕快照存储在工作站上。Monkeyrunner工具主要用于在功能/框架级别测试应用程序和设备以及运行单元测试套件,但是您可以将其自由用于其他目的。
MonkeyRunner工具使用Jython,它是使用Java编程语言的Python实现。Jython允许Monkeyrunner API与Android框架轻松交互。使用Jython,您可以使用Python语法访问API的常量,类和方法。
MonkeyRunner功能
1.多设备控制:Monkeyrunner API可以在多个设备或仿真器上应用一个或多个测试套件。
2.功能测试:monkeyrunner可以运行Android应用程序的自动完成测试。您可以通过击键或触摸事件提供输入值,并将结果作为屏幕截图查看。
3.可扩展的自动化:由于Monkeyrunner是API工具包,因此您可以开发用于控制Android设备的基于Python的模块和程序的整个系统。
MonkeyRunner与monkey的区别
两者没有直接关系
MonkeyRunner:在工作站上通过API定义的特定命令和事件控制设备,可以智能截图进行对比,回溯详细的bug路径,相对比较灵活;
monkey:在设备上直接运行adb shell 命令生成随机的事件进行测试
MonkeyRunner环境搭建
- 安装配置好jdk环境
- 安装android-sdk
- 安装python
- 环境变量的配置 [路径]、Android-SDK ools
安装成功后,在cmd中检测,输入monkeyrunner,有返回java jdk版本就安装成功
C:Usersadmin>monkeyrunner
Jython 2.5.3 (2.5:c56500f08d34+, Aug 13 2012, 14:54:35)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_31
>>>
MonkeyRunner API
1.MonkeyRunner
2.MonkeyDevice
3.MonkeyImage
官方文档:https://www.android-doc.com/tools/help/monkeyrunner_concepts.html
1.MonkeyRunner类:
提供连接真机和模拟器、输入、暂停、警告框等方法。
常用方法(连接设备):waitForConnection(float timeout,string deviceid)
from com.android.monkeyrunner import MonkeyRunner as mr
device = mr.waitForConnection(5,'127.0.0.1:62001')
2.MonkeyDevice类
提供了安装和卸载程序包、开启Activity、发送按键和点击事件、运行测试包等方法
常用方法:
installPackage(pc端存放apk路径) 安装应用
removePackage(apk包名) 卸载应用
startActivity(package+'/'+activity) 启动应用
touch(integer x,integer y, integer type) x,y为坐标值,type(DOWN,UP,DOWN_AND_UP........)
drag(tuple start,tuple end,float duration,integer steps)拖拉控件 float duration拖动持续时间,默认为1s,integer steps拖动的步数默认为10
takeSnapshot()截屏
press(string keycode,dictionary type) 按键 keycode:KEYCODE_HOME、KEYCODE_BACK等等 type(DOWN,UP,DOWN_AND_UP........)
type(string message)输入字符
3.MonkeyImage类
sameAs(MonkeyImage other,float percent)图像对比,对比的相似度,结果boolean类型
writetoFile(string path,string format)图像保存
运行一个淘宝登录实例.
这里用的是夜神模拟器,所以设置等待时间比较长,有条件的同学可以用真机调试
from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi
print("launch connect")#连接设备
device = mr.waitForConnection(5,'127.0.0.1:62001')
if not device:
print("connect fail")
print("install package...")#安装应用
device.installPackage("E:/tao.apk")
print("startActivity")#启动app
device.startActivity(component='com.taobao.taobao/com.taobao.tao.welcome.Welcome')
mr.sleep(20)
print("start agree")#同意用户协议
device.touch(535.5,1273.3,'DOWN_AND_UP')
mr.sleep(15)
#进入我的界面
device.touch(965,1874,'DOWN_AND_UP')
mr.sleep(5)
#输入用户账号、密码
device.touch(175.8,370.4,'DOWN_AND_UP')
device.type('账号')
mr.sleep(2)
device.touch(155.8,501.7,'DOWN_AND_UP')
device.type('密码')
mr.sleep(2)
device.touch(521.5,644.7,'DOWN_AND_UP')
print("Snapshot...")#截图
result = device.takeSnapshot()
result.writeToFile('E:/test.png','png')
#按home键返回桌面
device.press('KEYCODE_HOME','DOWN_AND_UP')
print("remove package")#卸载应用
device.removePackage('com.taobao.taobao')
相应的按键对应的名称如下:
home键:KEYCODE_HOME
back键:KEYCODE_BACK
send键:KEYCODE_CALL
end键:KEYCODE_ENDCALL
上导航键:KEYCODE_DPAD_UP
下导航键:KEYCODE_DPAD_DOWN
左导航:KEYCODE_DPAD_LEFT
右导航键:KEYCODE_DPAD_RIGHT
ok键:KEYCODE_DPAD_CENTER
上音量键:KEYCODE_VOLUME_UP
下音量键:KEYCODE_VOLUME_DOWN
power键:KEYCODE_POWER
camera键:KEYCODE_CAMERA
menu键:KEYCODE_MENU