MonkeyRunner简介
monkeyrunner工具提供了编写控制Android设备或仿真器从Android的代码之外程序的API。随着monkeyrunner,您可以编写安装一个Android应用程序或测试包,运行它,发送击键它,需要它的用户界面截图,并将截图工作站上的Python程序。该monkeyrunner工具主要设计在功能/框架水平和运行单元测试套件来测试应用程序和设备,但你可以自由地将其用于其它用途。
monkeyrunner工具为Android的测试,这些独特的功能:
1.多设备控制:monkeyrunner API可以跨多个设备或仿真器应用一个或多个测试套件。您可以物理连接的所有设备或启动了所有的仿真器(或两者兼有)同时,连接到每一个轮流程序,然后运行一个或多个测试。您也可以启动一个模拟器配置编程,运行一个或多个测试,然后关闭模拟器。
2.功能测试:monkeyrunner可以运行Android应用程序的自动启动到完成测试。您提供的输入值与键盘或触摸事件,并查看结果的截图。
3.回归测试 - monkeyrunner可以运行一个应用程序,并比较其输出截图一组被称为是正确的截图测试应用程序的稳定性。
4.可扩展的自动化-由于monkeyrunner是一个API工具包,你可以开发基于Python模块和控制Android设备程序的整个系统。除了 使用monkeyrunner API本身,你可以使用标准的Python OS和 子 模块的调用Android的工具,比如 Android的调试桥。
monkeyrunner 的三个模块
所述monkeyrunner API被包含在包中的三个模块 com.android.monkeyrunner:
1.MonkeyRunner:一类为monkeyrunner程序的实用方法。这个类提供了用于连接monkeyrunner至设备或模拟器的方法。它也提供了用于创建用户界面的monkeyrunner程序和用于显示内置帮助的方法。
2.MonkeyDevice:表示一个设备或模拟器。这个类提供了安装和卸载程序包,启动一个活动以及发送键盘或触摸事件到应用程序的方法。您也可以使用这个类来运行测试包。
3.MonkeyImage:表示一个屏幕捕获图像。这个类提供了捕捉屏幕,将位图图像,以各种不同的格式,比较两个MonkeyImage对象,写一个图像文件的方法。
1
2
3
4
#导入三个模块MonkeyRunner,MonkeyDevice,MonkeyImage
from
com.android.monkeyrunner
import
MonkeyRunner as mr
from
com.android.monkeyrunner
import
MonkeyDevice as md
from
com.android.monkeyrunner
import
MonkeyImage as mi
monkeyrunner的接入设备API
adb devices 命令可以获取设备对象的名称
1
2
3
#获取接入的设备,前面的为等待时间(s),后面正则或者设备的全名,返回一个device对象
#device=mr.WaitForConnection(1,'ss1z1')
device
=
mr.WaitForConnection()
安装apk
device.startActivity("package名/activity名")
1
device.installPackage(
'myproject/bin/MyApplication.apk'
)
卸载,这应该是应用的包名
1
device.removePackage (
'com.example.android.notepad'
)
启动入口活动
1
device.startActivity (component
=
'com.android.htccontacts/com.android.htccontacts.ContactsTabActivity'
)
等待时间,秒
1
mr.sleep(
3
)
唤醒屏幕
1
mr.wake()
触摸屏幕,x,y坐标,触摸类型三种,UP,DOWN,DOWN_AND_UP
1
device.touch(
10
,
20
,'DOWN_AND_UP')
设备屏幕上模拟拖曳
用法:MonkeyDevice.drag(start,end,duration,steps)
start:拖曳开始坐标 - The starting point for the drag (a tuple (x,y) in pixels)
end:拖曳结束坐标点- The end point for the drag (a tuple (x,y) in pixels
duration:持续时间 - Duration of the drag in seconds (default is 1.0 seconds)
steps:拖曳步骤- The number of steps to take when interpolating points. (default is 10)
1
device.drag((
472
,
1067
),(
482
,
560
))
按键指令,前面为按键名称,如HOME键
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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
device.press(
'KEYCODE_HOME'
,
'DOWN_AND_UP'
)
输入一个字符串
device.type("你好")
获取monkeyrunner的帮助
1
device.
help
()
获取设备系统环境变量的名称
1
device.getProperty()
重启设备
1
device.reboot()
一些图片的操作API
1
2
3
4
5
6
7
8
9
10
11
12
13
#获取截图
result1
=
device.takeSnapshot()
#将结果输出到文件,前面为路径,后面为图片类型,可写可不写
result1.writeToFile(
'D:/demo1.png'
,
'png'
)
#两种写法都可以
result1.writeToFile(
'D:\\demo1.png'
,
'png'
)
#将当前图像转换为一个特定的格式并将其作为字符串返回,然后你可以访问的iterable二进制字节。
result.convertToBytes()
#图片的对比,先获取第二张截图
result2
=
device.takeSnapshot()
result2.writeToFile(
'D:/demo2.png'
,
'png'
)
#判断图片相识度是否是为90%
if
(result1.sameAs(result2,
0.9
)):
API详解
用python编写脚本
1.导入模块:
MonkeyRunner
MonkeyDevice
MonkeyImage
ps:如果给导入模块起别名,就应该使用别名,而不能使用原名,否则会出现错误。
from com.android.monkeyrunner import MonkeyRunner as mr
from com.android.monkeyrunner import MonkeyDevice as md
from com.android.monkeyrunner import MonkeyImage as mi
例:
device=mr.waitForConnection()
2.MonkeyRunner 模块
2.1 com.android.monkeyrunner.MonkeyRunner.waitForConnection
注释:等待连接设备,与模拟器链接,返回monkeydevice对象,代表链接的设备。没有报错的话说明连接成功。
参数:timeout:超时时间,单位秒,浮点数。默认是无限期等待。
deviceId:指定的设备名称。默认为当前的设备(手机有限,比如手机通过usb线链接到pc、其次为模拟器)。
实例:默认连接:device=MonkeyRunner.waitForConnection()
参数连接:device=mr.waitForConnection(1.0,'emulator-5554')
2.2 com.android.monkeyrunner.MonkeyRunner.installPackage
注释: #参数是相对或绝对APK路径 路径级别用“/”,不能用“\”
参数:path:被安装到设备上的apk包在电脑上的文件路径
实例:device.installPackage('myproject/bin/MyApplication.apk')
2.3 com.android.monkeyrunner.MonkeyRunner.removePackage
注释:删除连接设备中的应用包,删除成功返回true
参数:pachage:将被删除的文件的包名
实例:device.removePackage('myproject/bin/MyApplication.apk')
2.4 com.android.monkeyrunner.MonkeyRunner.startActivity
注释:启动任意的Activity,此时可以向模拟器发送如按键、滚动、截图、存储等操作了。 执行一个adb shell命令,并返回结果,如果有的话
device.shell("...")
参数:uri - The URI for the Intent.
action - The action for the Intent.
data - The data URI for the Intent
mimetype - The mime type for the Intent.
categories - A Python iterable containing the category names for the Intent.
extras - A dictionary of extras to add to the Intent. Types of these extras are inferred from the python types of the values.
component - The component of the Intent.
flags - An iterable of flags for the Intent.All arguments are optional. The default value for each argument is null.
实例:device.startActivity(component="your.www.com/your.www.com.TestActivity")
device.startActivity(component="your.www.com/.TestActivity")
2.5 com.android.monkeyrunner.MonkeyRunner.sleep
注释:暂停目前正在运行的进程相应的时间
参数:second
实例:MonkeyRunner.sleep(秒数,浮点数)
2.6 com.android.monkeyrunner.MonkeyRunner.takeSnapshot
注释:获取设备的屏蔽缓冲区,产生了整个显示器的屏蔽捕获。(截图)
参数:无
实例:result=device.takeSnapshot()
返回一个MonkeyImage对象(点阵图包装),我们可以用一下命令将图保存到文件
result.writeToFile('takeSnapshot\\result1.png','png')
2.7 com.android.monkeyrunner.MonkeyImage.writeToFile
注释:将截图保存到文件 写成功返回true,否则返回false
参数:path:输出文件名和路径
format:目标格式
实例:result.writeToFile('takeSnapshot\\result1.png','png')
2.8 com.android.monkeyrunner.MonkeyDevice.type
注释:键盘上的类型指定字符串,这相当于要求字符中按(键码,DOWN_AND_UP)字符串发送到键盘
参数:message:要键入的字符串
实例:device.type(‘字符串’)
2.9 com.android.monkeyrunner.MonkeyDevice.wake
注释:唤醒设备屏幕(在设备屏幕上唤醒)
参数:无
实例:device.wake()
2.10 com.android.monkeyrunner.MonkeyDevice.reboot
注释:重新引导到指定的引导程序指定的设备
参数:into-the bootloader to reboot into :bootloader,recovery,or None
实例:device.reboot()
3.Monkeyrunner类的方法介绍
3.1 com.android.monkeyrunner.MonkeyRunner.alert
注释:弹出一个对话框直到用户确认为止
参数:message:会话弹出的内容
title:会话标题,默认alert
okTitle:会话确认按钮,默认ok
实例:Alert(string message,string title,string okTile)
3.2 com.android.monkeyrunner.MonkeyRunner.choice
注释:显示一个对话框,选择你要添加的那个py文件
参数:message:显示在对话框中的提示信息
choices:一个迭代的包含一系列选择的python类型
title:对话框的标题,默认input
实例:Choice(string message,iterable choices,string title)
3.3 com.android.monkeyrunner.MonkeyRunner.help
注释:Help(string format)monkeyrunner 的一些帮助,这个和api差不多
3.4com.android.monkeyrunner.MonkeyRunner.input
注释:用户可以在一个对话框里面输入内容
参数:message:对话框显示信息
initialValue:提供给用户的初始化值,默认为空字符串
title:对话标题,默认为input
onTitle: the text to use in the dialog's confirmation button. default is 'OK'.
canceTitle: the text to use in the dialog's 'cancel' button. default is 'Cancel'.
返回:the text entered by the user ,or None if the user canceled the input.
实例:MonkeyRunner.input(string message,initialValue,title,okTitle,cancelTitle)
4 MonkeyDevice类的方法介绍
4.1 com.android.monkeyrunner.MonkeyDevice.ibroadcastIntent
注释:对设备发送一个广播信号
参数:uri - The URI for the Intent.
action - The action for the Intent.
data - The data URI for the Intent
mimetype - The mime type for the Intent.
categories - An iterable of category names for the Intent.
extras - A dictionary of extras to add to the Intent. Types of these extras are inferred from the python types of the values.
component - The component of the Intent.
flags - An iterable of flags for the Intent.All arguments are optional. The default value for each argument is null.(see android.content.Context.sendBroadcast(Intent))
实例:BroadcastIntent (string uri,string action,string data, string mimetype,iterable categories dectionnary extras,component component,iterable flages)
4.2 com.android.monkeyrunner.MonkeyDevice.drag
注释:拖动屏幕,也是划屏的一些操作
参数:start:拖曳开始坐标 (a tuple(x,y)in pixels)
end:拖曳结束坐标点(a tuple(x,y)in pixels)
duration:持续时间(default 1.0 seconds)
steps:拖曳步骤(default is 10)
实例:MonkeyRunner.drag(start,end,duration,steps)
4.3
com.android.monkeyrunner.MonkeyDevice.getProperty(string key)
得到手机上的一些属性
com.android.monkeyrunner.MonkeyDevice.getSystemProperty(string key)
得到一些系统属性
com.android.monkeyrunner.MonkeyDevice.installPackage(string path)
将一个apk安装到手机里面
com.android.monkeyrunner.MonkeyDevice.instrument(string className,dictionary args)
运行测试设备的指定包
com.android.monkeyrunner.MonkeyDevice.press(string name,dectionary type)
按键(一些物理按键)
com.android.monkeyrunner.MonkeyDevice.reboot(string package)
重启手机
com.android.monkeyrunner.MonkeyDevice.removePackage(string package)
删除一些apk
com.android.monkeyrunner.MonkeyDevice.shell(string cmd)执行adb shell
命令并返回结果
com.android.monkeyrunner.MonkeyDevice.takeSnapshot()
截图
com.android.monkeyrunner.MonkeyDevice.touch(integer x,integer y,integer type)
触摸
com.android.monkeyrunner.MonkeyDevice.type(string message)
输入一些字符串
com.android.monkeyrunner.MonkeyDevice.wake()
唤醒手机点亮屏幕
5.MonkeyImage 类的方法介绍
com.android.monkeyrunner.MonkeyImage.convertBytes(string format)
将图片转换为其他特殊的格式,将结果作为字符串返回,用这个方法将像素存取为特殊的格式,输出的字符串是一种更好的表现(format 目标格式 默认值为png)
com.android.monkeyrunner.MonkeyImage.getRawPixel(integer x, integer y)
在x,y位置处获取一个单一的ARGB像素,参数x,y都是基于0坐标,表示一个像素尺寸,x向右增益,y向下增益,得到一个图标的坐标,这个方法返回一个数组
com.android.monkeyrunner.MonkeyImage.getSubImage(tuple rect)
复制一个图片的矩形,rect:A tuple(x,y,w,h),x,y,指定矩形区域的左上角,w为矩形宽,h为矩形高
com.android.monkeyrunner.MonkeyImage.sameAs(MonkeyImage other,float percent)
对比两张照片
com.android.monkeyrunner.MonkeyImage.writeToFile(string path,string format)
将得到的图片保存到一个文件夹里面
com.android.monkeyrunner.MonkeyImage.getHierarchyViewer()
获取设备的显示层次
com.android.monkeyrunner.MonkeyImage.startActivity()
在设备上开始一个活动
转自:
MonkeyRunner简介
monkeyrunner工具提供了编写控制Android设备或仿真器从Android的代码之外程序的API。随着monkeyrunner,您可以编写安装一个Android应用程序或测试包,运行它,发送击键它,需要它的用户界面截图,并将截图工作站上的Python程序。该monkeyrunner工具主要设计在功能/框架水平和运行单元测试套件来测试应用程序和设备,但你可以自由地将其用于其它用途。
monkeyrunner工具为Android的测试,这些独特的功能:
1.多设备控制:monkeyrunner API可以跨多个设备或仿真器应用一个或多个测试套件。您可以物理连接的所有设备或启动了所有的仿真器(或两者兼有)同时,连接到每一个轮流程序,然后运行一个或多个测试。您也可以启动一个模拟器配置编程,运行一个或多个测试,然后关闭模拟器。
2.功能测试:monkeyrunner可以运行Android应用程序的自动启动到完成测试。您提供的输入值与键盘或触摸事件,并查看结果的截图。
3.回归测试 - monkeyrunner可以运行一个应用程序,并比较其输出截图一组被称为是正确的截图测试应用程序的稳定性。
4.可扩展的自动化-由于monkeyrunner是一个API工具包,你可以开发基于Python模块和控制Android设备程序的整个系统。除了 使用monkeyrunner API本身,你可以使用标准的Python OS和 子 模块的调用Android的工具,比如 Android的调试桥。
monkeyrunner 的三个模块
所述monkeyrunner API被包含在包中的三个模块 com.android.monkeyrunner:
1.MonkeyRunner:一类为monkeyrunner程序的实用方法。这个类提供了用于连接monkeyrunner至设备或模拟器的方法。它也提供了用于创建用户界面的monkeyrunner程序和用于显示内置帮助的方法。
2.MonkeyDevice:表示一个设备或模拟器。这个类提供了安装和卸载程序包,启动一个活动以及发送键盘或触摸事件到应用程序的方法。您也可以使用这个类来运行测试包。
3.MonkeyImage:表示一个屏幕捕获图像。这个类提供了捕捉屏幕,将位图图像,以各种不同的格式,比较两个MonkeyImage对象,写一个图像文件的方法。
1
2
3
4
|
#导入三个模块MonkeyRunner,MonkeyDevice,MonkeyImage
from
com.android.monkeyrunner
import
MonkeyRunner as mr
from
com.android.monkeyrunner
import
MonkeyDevice as md
from
com.android.monkeyrunner
import
MonkeyImage as mi
|
monkeyrunner的接入设备API
adb devices 命令可以获取设备对象的名称
1
2
3
|
#获取接入的设备,前面的为等待时间(s),后面正则或者设备的全名,返回一个device对象
#device=mr.WaitForConnection(1,'ss1z1')
device
=
mr.WaitForConnection()
|
安装apk
device.startActivity("package名/activity名")
1
|
device.installPackage(
'myproject/bin/MyApplication.apk'
)
|
卸载,这应该是应用的包名
1
|
device.removePackage (
'com.example.android.notepad'
)
|
启动入口活动
1
|
device.startActivity (component
=
'com.android.htccontacts/com.android.htccontacts.ContactsTabActivity'
)
|
等待时间,秒
1
|
mr.sleep(
3
)
|
唤醒屏幕
1
|
mr.wake()
|
触摸屏幕,x,y坐标,触摸类型三种,UP,DOWN,DOWN_AND_UP
1
|
device.touch(
10
,
20
,'DOWN_AND_UP')
|
设备屏幕上模拟拖曳
用法:MonkeyDevice.drag(start,end,duration,steps)
start:拖曳开始坐标 - The starting point for the drag (a tuple (x,y) in pixels)
end:拖曳结束坐标点- The end point for the drag (a tuple (x,y) in pixels
duration:持续时间 - Duration of the drag in seconds (default is 1.0 seconds)
steps:拖曳步骤- The number of steps to take when interpolating points. (default is 10)
1
|
device.drag((
472
,
1067
),(
482
,
560
))
|
按键指令,前面为按键名称,如HOME键
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
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
device.press(
'KEYCODE_HOME'
,
'DOWN_AND_UP'
)
|
输入一个字符串
device.type("你好")
获取monkeyrunner的帮助
1
|
device.
help
()
|
获取设备系统环境变量的名称
1
|
device.getProperty()
|
重启设备
1
|
device.reboot()
|
一些图片的操作API
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#获取截图
result1
=
device.takeSnapshot()
#将结果输出到文件,前面为路径,后面为图片类型,可写可不写
result1.writeToFile(
'D:/demo1.png'
,
'png'
)
#两种写法都可以
result1.writeToFile(
'D:\\demo1.png'
,
'png'
)
#将当前图像转换为一个特定的格式并将其作为字符串返回,然后你可以访问的iterable二进制字节。
result.convertToBytes()
#图片的对比,先获取第二张截图
result2
=
device.takeSnapshot()
result2.writeToFile(
'D:/demo2.png'
,
'png'
)
#判断图片相识度是否是为90%
if
(result1.sameAs(result2,
0.9
)):
|
API详解
2.1 com.android.monkeyrunner.MonkeyRunner.waitForConnection
2.2 com.android.monkeyrunner.MonkeyRunner.installPackage
2.3 com.android.monkeyrunner.MonkeyRunner.removePackage
实例:device.removePackage('myproject/bin/MyApplication.apk')
2.4 com.android.monkeyrunner.MonkeyRunner.startActivity
2.5 com.android.monkeyrunner.MonkeyRunner.sleep
2.6 com.android.monkeyrunner.MonkeyRunner.takeSnapshot
2.7 com.android.monkeyrunner.MonkeyImage.writeToFile
2.8 com.android.monkeyrunner.MonkeyDevice.type
2.9 com.android.monkeyrunner.MonkeyDevice.wake
2.10 com.android.monkeyrunner.MonkeyDevice.reboot
3.1 com.android.monkeyrunner.MonkeyRunner.alert
3.2 com.android.monkeyrunner.MonkeyRunner.choice
3.3 com.android.monkeyrunner.MonkeyRunner.help
3.4com.android.monkeyrunner.MonkeyRunner.input
4.1 com.android.monkeyrunner.MonkeyDevice.ibroadcastIntent
4.2 com.android.monkeyrunner.MonkeyDevice.drag
com.android.monkeyrunner.MonkeyDevice.getProperty(string key)
com.android.monkeyrunner.MonkeyDevice.getSystemProperty(string key)
com.android.monkeyrunner.MonkeyDevice.installPackage(string path)
com.android.monkeyrunner.MonkeyDevice.instrument(string className,dictionary args)
com.android.monkeyrunner.MonkeyDevice.press(string name,dectionary type)
com.android.monkeyrunner.MonkeyDevice.reboot(string package)
com.android.monkeyrunner.MonkeyDevice.removePackage(string package)
com.android.monkeyrunner.MonkeyDevice.shell(string cmd)执行adb shell
com.android.monkeyrunner.MonkeyDevice.takeSnapshot()
com.android.monkeyrunner.MonkeyDevice.touch(integer x,integer y,integer type)
com.android.monkeyrunner.MonkeyDevice.type(string message)
com.android.monkeyrunner.MonkeyDevice.wake()
5.MonkeyImage 类的方法介绍
com.android.monkeyrunner.MonkeyImage.convertBytes(string format)
com.android.monkeyrunner.MonkeyImage.getSubImage(tuple rect)
com.android.monkeyrunner.MonkeyImage.sameAs(MonkeyImage other,float percent)
com.android.monkeyrunner.MonkeyImage.writeToFile(string path,string format)
com.android.monkeyrunner.MonkeyImage.getHierarchyViewer()
com.android.monkeyrunner.MonkeyImage.startActivity()