monkeyrunner教程笔记.docx
《monkeyrunner教程笔记.docx》由会员分享,可在线阅读,更多相关《monkeyrunner教程笔记.docx(18页珍藏版)》请在冰豆网上搜索。
monkeyrunner教程笔记
monkeyrunner使用笔记
Monkeyrunner简介
常用的安卓功能自动化工具有Monkeyrunner,Robotium,Appium等。
Monkeyrunner是Android自带的自动化黑盒测试工具,允许用户对Android设备的UI界面进行元素提取,执行touch和drag等操作,配合HierarchyViewer等模块可以非常方便地进行自动化操作。
Monkeyrunner工具特性
多设备控制:
monkeyrunnerAPI可以跨多个设备或模拟器实施测试套件。
您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。
您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
功能测试:
monkeyrunner可以为一个应用自动化功能测试。
为您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
回归测试:
monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
可扩展的自动化:
由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。
Monkeyrunner工具同Monkey工具的差别
Monkey:
Monkey工具直接运行在设备或模拟器的adbshell中,生成用户或系统的伪随机事件流。
Monkeyrunner:
Monkeyrunner工具是在工作站上通过API定义的特定命令和事件控制设备或模拟器。
注意:
monkeyrunner工具使用Jython(使用Java编程语言的一种Python实现,并不是Python),虽然脚本需保存为.py文件,但却不能使用python**.py来执行(会报找不到MonkeyRunner模块),必须使用monkeyrunner**.py命令来执行。
运行Monkeyrunner
MonkeyrunnerAPI
主要包括三个模块
1、MonkeyRunner:
这个类提供了用于连接monkeyrunner和设备或模拟器的方法,它还提供了用于创建用户界面显示提供了方法。
2、MonkeyDevice:
代表一个设备或模拟器。
这个类为安装和卸载包、开启Activity、发送按键和触摸事件、运行测试包等提供了方法。
3、MonkeyImage:
这个类提供了捕捉屏幕的方法。
这个类为截图、将位图转换成各种格式、对比两个MonkeyImage对象、将image保存到文件等提供了方法。
#引用导入API
fromcom.android.monkeyrunnerimport
运行monkeyrunner
命令语法为:
monkeyrunner-plugin
方式一:
在CMD命令窗口直接运行monkeyrunner
方式二:
使用Python编写测试代码文件,在CMD中执行monkeyrunnerFindyou.py运行
不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。
注意:
在运行monkeyrunner之前必须先运行相应的模拟器或连接真机,否则monkeyrunner无法连接到设备
运行模拟器有两种方法:
1、通过eclipse中执行模拟器2、在CMD中通过命令调用模拟器
这里介绍通过命令,在CMD中执行模拟器的方法
emulator-avdtest
上面命令中test是指模拟器的名称。
附:
问题:
CMD运行提示monkeyrunner不是内部或外部命令,也不是可运行的程序或批处理文件。
解决:
电脑环境变量未配置,将monkeyrunner所在目录配在环境变量里。
变量名:
Path
变量值:
D:
\android\android-sdk-windows\tools;D:
\android\android-sdk-windows\platform-tools
第一部分:
实例说明
实例一:
使用模拟器测试monkeyrunner
1.用Elipse打开andorid的模拟器或者在CMD中用andorid命令打开模拟器,如下:
命令:
C:
\Users\Administrator>emulator-avdtest1(#test1是在模似器的上名称)
输入cmd命令后,模拟器就会起来(这个时候,如果一切正常的话,模拟器应该可以启动起来了。
运行monkeyrunner之前必须先运行相应的模拟器,不然monkeyrunner无法连接设备)
接着,我们打开另一个CMD窗口(前一个不要关),还是定位到tools目录,输入命令"monkeyrunner",回车,将进入shell命令交互模式
命令:
C:
\Users\Administrator>monkeyrunner
好了,接下来就可以导入monkeyrunner所要使用的模块了。
当然是我们的"From...import..."
直接在shell命令中输入:
fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice回车
命令:
>>>fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice
OK,这步完成之后,我们就可以开始和模拟器“勾兑”了,
命令:
>>>device=MonkeyRunner.waitForConnection()
没有报错的话,就代表和模拟器勾兑成功。
接下来,我们可以在里面装点东西了。
输入如下命令,并传入你的apk所在相对路径即可。
我这安装的是自己的apkhaitao,APK。
成功了会返回true。
如果没有返回true,一般都是语法错误或者你传入的相对路径有问题,仔细检查下就没问题了。
我自己的apk放在了E盘根目录下
命令:
>>>device.installPackage(“E:
\Haitao.apk”)
接下来,我们就可以启动其中的任意activity了,只要传入package和activity名称即可。
命令如下:
命令:
>>>
device.startActivity(component="com.example.android.apis/com.example.android.apis.Haitao")
相关指令:
查看包名,versioncode,versionName,和查看获取Activity下package和入口activity名称
win+R→cmd→命令:
C:
\Users\Administrator>aaptdumpbadginge:
\Haitao.apk
实例二:
连接真机测试monkeyrunner自动化测试
(P.S:
因为模拟器和真机的巨大差距,建议使用真机做Monkeyrunner自动化测试,如果没有真机,自行安装虚拟模拟器。
)
首先检查设备是否已连接
a、winr+R→cmd→C:
\Users\Administrator>adbdevices
b、连接成功后,在CMD中输入adbshell
命令:
C:
\Users\Administrator>adbshell
进入到手机,连接成功
相关学习笔记
#引入程序所用的模块
fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage
#引入程序所用的模块,使用别名
fromcom.android.monkeyrunnerimportMonkeyRunnerasmr
fromcom.android.monkeyrunnerimportMonkeyDeviceasmd
fromcom.android.monkeyrunnerimportMonkeyImageasmi
#如果给导入的模块起了别名,就必须使用别名,否则会出现错误。
#比如连接设备或模拟器,起了以上别名后,命令应该如下:
device=mr.waitForConnection()
#连接到设备或模拟器
#参数1:
超时时间,单位秒,浮点数。
默认是无限期地等待。
#参数2:
串deviceid,指定的设备名称。
默认为当前设备(手机优先,比如手机通过USB线连接到PC、其次为模拟器)。
#默认连接:
device=MonkeyRunner.waitForConnection()
#参数连接:
device=MonkeyRunner.waitForConnection(1.0,'4df74b8XXXXXXX')
c、另开一个CMD,运行monkeyrunner
命令:
C:
\Users\Administrator>monkeyrunner
#导入模块(必须-第一步)
命令:
>>>fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage
#连接当前设备,并返回一个MonkeyDevice对象(必须-第二步);
命令:
>>>device=MonkeyRunner.waitForConnection()
#安装Android包:
命令:
>>>device.installPackage('E:
\Haitao.apk')
#卸载包
命令:
>>>device.removePackage('com.shantao')(#包名)
#启动任意的Activity
使用aapt(apktool安装)获取Activity下package和入口activity名称使用cmd窗口下面,跳转到apktool下,输入aaptdumpbadgingE:
\Haitao.apk
>>>device.startActivity(component="包名/启动Activity")
命令:
>>>device.startActivity(component='com.shantao/com.shantao.LaunchActivity')
(#在输入这窜指令之前,需要重新安装刚才安装的包,因为刚才有把它卸了,所以需要重新安装)
#截图;
获取设备的屏蔽缓冲区,产生了整个显示器的屏蔽捕获。
(截图)
命令 :
>>>result=device.takeSnapshot()
返回一个MonkeyImage对象(点阵图包装),我们可以用以下命令将图保存到指定文夹里,比如:
在E盘下有一个shot文件夹,输入命令回车显示为true后可以在shot文件夹找到刚才截的图
命令:
>>>result.writeToFile('E:
/shot/1.png','png')
#暂停(时延秒)
暂停目前正在运行的程序指定的秒数
命令:
>>>MonkeyRunner.sleep(5)
#滑动屏幕;
命令:
>>>device.drag((180,180),(600,600),0.1,10)//开始,结束,持续时间,步骤
#device.drag(X,Y,D,S)
#X开始坐标
#Y结束坐标
#D拖动持续时间(以秒为单位),默认1.0秒
#S插值点时要采取的步骤。
默认值是10
#连续滑动屏幕;
命令:
>>>foriinrange(1,4):
device.drag((180,180),(600,600),0.1,10)
#触击屏幕;
命令:
>>>device.touch(408,66,"DOWN_AND_UP")
#device.touch(x,y,触摸事件类型)
#x,y的单位为像素
#触摸事件类型,请见下文中Findyou对device.press描述
#打印
命令:
>>>print"insertlogin"
#字符串发送到键盘输入(登录输入)
#device.type('字符串'),例如:
命令:
>>>device.type('longshan')
命令:
>>>device.type('Findyou')
命令:
>>>device.type('123456')
#唤醒设备屏幕
#锁屏后,屏幕关闭,可以用下命令唤醒
命令:
>>>device.wake()
#重起手机
命令:
>>>device.reboot()
#按键(系统键)
#device.press(参数1:
键码,参数2:
触摸事件类型)
#参数1:
见android.view.KeyEvent
#参数2,如有TouchPressType()返回的类型-触摸事件类型,有三种。
#1、DOWN发送一个DOWN事件。
指定DOWN事件类型发送到设备,对应的按一个键或触摸屏幕上。
#2、UP发送一个UP事件。
指定UP事件类型发送到设备,对应释放一个键或从屏幕上抬起。
#3、DOWN_AND_UP发送一个DOWN事件,然后一个UP事件。
对应于输入键或点击屏幕。
以上三种事件做为press()参数或touch()参数
#按下HOME键
device.press('KEYCODE_HOME',MonkeyDevice.DOWN_AND_UP)
#按下BACK键
device.press('KEYCODE_BACK',MonkeyDevice.DOWN_AND_UP)
#按下下导航键
device.press('KEYCODE_DPAD_DOWN',MonkeyDevice.DOWN_AND_UP)
#按下上导航键
device.press('KEYCODE_DPAD_UP',MonkeyDevice.DOWN_AND_UP)
#按下OK键
device.press('KEYCODE_DPAD_CENTER',MonkeyDevice.DOWN_AND_UP)
KeyCode:
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.press('KEYCODE_ENTER')
#for循环
命令:
>>>foriinrange(5,10):
print(i)
#循环截图命名
命令:
>>>result=device.takeSnapshot()
命令:
>>>result.writeToFile('F:
/shot/'+str(i)+'.png','png')
#时间命名
命令:
>>>t=time.strftime("%Y-%m-%d-%X",time.localtime())t=t.replace(":
","-")
命令:
>>>result=device.takeSnapshot()
命令:
>>>result.writeToFile('F:
/shot/'+t+'.png','png')
#if判断
if(device):
print"deviceisOK"
else:
print"deviceis...Please...退出"
sys.exit
(1)
#定义函数
importsys,time,datetime,os
defwrite_result(casename):
t=time.strftime("%Y-%m-%d-%X",time.localtime())
t=t.replace(":
","-")
testfinish=casename+''+'testfinished!
'
new_path_filename=r'F:
\shot\TestResult.txt'
file_object=open(new_path_filename,'a')
file_object.write(t)
file_object.write('\n')
file_object.write(testfinish)
file_object.write('\n')
file_object.close()printtestfinish
#调用函数
命令:
>>>write_result(casename)
综上,常用:
1.print"insertlogin"
2.device.type('longshan')
3.device.press('KEYCODE_ENTER')
4.device.touch(430,220,"DOWN_AND_UP")
5.device.drag((300,670),(300,220),1,10)
6.result=device.takeSnapshot()
7.result.writeToFile('F:
/shot/1.png','png')
8.MonkeyRunner.sleep(10)
9.device.wake()
总结:
第一步:
在cmd窗口下面输入monkeyrunner,进入monkeyrunner版本信息
第二步:
导入模板fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage回车
命令:
>>>fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage
第三步:
连接当前设备,并返回一个MonkeyDevice对象
命令:
>>>device=MonkeyRunner.waitForConnection()
第四步:
按下Home键device.press('KEYCODE_HOME','DOWN_AND_UP')
第五步:
后续操作(按照基本要素操作)
第二部分:
使用Monkeyrunner编辑脚本
除了cmd直接操作手机,也可以编辑好脚本后,运行脚本,一次操作多个脚本命令
a)新建py格式脚本,如record_test.py
b)编辑脚本
#导入模块
fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage
MonkeyRunner.sleep
(1)
#连接设备
device.wake()
#滑动解销
device.drag((360,1008),(616,1016),0.1,10)
MonkeyRunner.sleep
(2)
#点击Home键
device.press('KEYCODE_HOME','DOWN_AND_UP')
#导入安装包并安装
device.installPackage('E"\Haitao.apk')
#启动程序
device.startActivity(component='component='com.shantao/com.shantao.LaunchActivity')
#登录输入
device.type('123456')
c)运行脚本,在cmd窗口下,输入monkeyrunnerD:
\
record_test.py,基本即可运行,脚本运转速度比较快,中间穿插时延比较好
第三部分:
使用Monkeyrunner录制脚本
Monkeyrunner除了编写脚本,也可以录制脚本,再运行,录制的脚本主要基于坐标点,无法测试安装和卸载。
常用功能:
点击,滑动,时延,点击按键:
HomeMENUSearch,
输入主界面:
具体操作步骤如下:
a)新建py格式脚本:
recorder.py
b)在脚本中编写内容如下:
fromcom.android.monkeyrunnerimportMonkeyRunnerasmrfromcom.android.monkeyrunner.recorderimportMonkeyRecorderasrecorderdevice=mr.waitForConnection()recorder.start(device)
c)保存recorder.py后,在cmd窗口下,运行monkeyrunnerD:
\recorder.py,也可以在cmd下,先monkeyrunner再输入上面脚本,启动录制
d)录制脚本:
walt时延(s),pressaButton按下指定系统3个按键中一个,TypeSomething输入文本,Fling滑动RefreshDisplay刷新屏幕(用于断开连接后)
e)录制完成脚本后,点击:
exportAction导出录制的脚本保存,选择保存位置,和脚本名:
如:
record_test.py
f)新建py格式脚本:
recorder_playback.py
g)编辑recorder_playback.py脚本,内容如下:
h)在cmd窗口下,运行:
MonkeyrunnerD:
\recorder_playback.pyD:
\recorder_test.py脚本即可运行,真机安装脚本步骤运行
注:
Monkeyrunner,在运行了录制窗口后,如果device连接不上,需要重启手机和电脑附:
recorder_playback.pyrecorder_test.pyrecorder.py文件MonR-P-1.py基于坐标,MonR-P-2.py基于坐标:
添加判断、函数、循环、截图。
。
。
。
。
备注:
Monkeyrunner运用方便,但是移植性太弱,需要坐标支持,所以Monkeyrunner可以用基于ID控件的方式编写脚本,但是ID得获得和对手机服务要求高附:
MonR-P-3.py基于ID