monkeyrunner教程笔记.docx

上传人:b****6 文档编号:8175691 上传时间:2023-01-29 格式:DOCX 页数:18 大小:581.55KB
下载 相关 举报
monkeyrunner教程笔记.docx_第1页
第1页 / 共18页
monkeyrunner教程笔记.docx_第2页
第2页 / 共18页
monkeyrunner教程笔记.docx_第3页
第3页 / 共18页
monkeyrunner教程笔记.docx_第4页
第4页 / 共18页
monkeyrunner教程笔记.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

monkeyrunner教程笔记.docx

《monkeyrunner教程笔记.docx》由会员分享,可在线阅读,更多相关《monkeyrunner教程笔记.docx(18页珍藏版)》请在冰豆网上搜索。

monkeyrunner教程笔记.docx

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 财会金融考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1