您好,欢迎访问三七文档
当前位置:首页 > 办公文档 > 其它办公文档 > monkeyrunner详细介绍以及编写简单的python脚本
MonkeyRunner:monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。monkeyrunner工具与用户界面/应用程序测试工具,也称为monkey工具并无关联。monkey工具直接运行在设备或模拟器的adbshell中,生成用户或系统的伪随机事件流。而monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器。1、MonkeyRunner的特性1)多设备控制:monkeyrunnerAPI可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。2)功能测试:monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。3)回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。4)可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunnerAPI之外,您还可以使用标准的Pythonos和subprocess模块来调用如adb这样的Android工具。您还可以向monkeyrunnerAPI中添加您自己的类。我们将在使用插件扩展monkeyrunner一节中对此进行详细讨论。2、一个简单的monkeyrunner程序实例以下为一个简单的monkeyrunner程序,它将会连接到一个设备,创建一个MonkeyDevice对象。使用MonkeyDevice对象,程序将安装一个Android应用包,运行其中一个活动,并向其发送按键事件。程序接下来会将结果截图,创建一个MonkeyImage对象,并使用这个对象截图将保存至.png文件。#导入此程序所需的monkeyrunner模块fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice#连接当前设备,返回一个MonkeyDevice对象device=MonkeyRunner.waitForConnection()#安装Android包,注意,此方法返回的返回值为boolean,由此您可以判断安装过程是否正常device.installPackage('myproject/bin/MyApplication.apk')#运行此应用中的一个活动device.startActivity(component='com.android.settings/.Settings')#按下菜单按键device.press('KEYCODE_MENU','DOWN_AND_UP')#截取屏幕截图result=device.takeSnapShot#将截图保存至文件result.writeToFile('myproject/shot1.png','png')#获取指定区域的图像(200,400,200,400),注意两个括号result_static=result.getSubImage((200,400,200,400))#获取d:\shotbegin.png这张图片picture=MonkeyRunner.loadImageFromFile('d:\shotbegin.png','png')#第二截图并获取相同的局部图像result_static2=picture.getSubImage((200,400,200,400))#使用.sameAs()对比两张图片,并输出对比结果True或Falseend=result_static.sameAs(result_static2,1.0)printendmonkeyrunner执行测试时使用.takeSnapshot()截图,默认截取整个屏幕,包含了系统的状态栏。真实手机状态栏中包含如电量/信号量/消息提示等变量,使用.sameAs()对比整个屏幕的截图时就很容易出现错误。而使用.getSubImage()获得局部图像,然后再进行对比,就减少了monkeyrunner执行结果出错的概率。result.getSubImage((200,400,200,400))中的指定区域值使用PixelPerfect获取坐标点,或者截图到本地后获取,先获取区域左上角和右下角坐标,前两个值是左上角左边,后两个值是右下角减左上角的坐标。3、TheMonkeyrunnerAPImonkeyrunnerAPI于com.android.monkeyrunner包中包含三个模块:1)MonkeyRunner:一个为monkeyrunner程序提供工具方法的类。这个类提供了用于连接monkeyrunner至设备或模拟器的方法。它还提供了用于创建一个monkeyrunner程序的用户界面以及显示内置帮助的方法。2)MonkeyDevice:表示一个设备或模拟器。这个类提供了安装和卸载程序包、启动一个活动以及发送键盘或触摸事件到应用程序的方法。您也可以用这个类来运行测试包。3)MonkeyImage:表示一个截图对象。这个类提供了截图、将位图转换成各种格式、比较两个MonkeyImage对象以及写图像到文件的方法。在python程序中,您将以Python模块的形式使用这些类。monkeyrunner工具不会自动导入这些模块。您必须使用类似如下的from语句:Fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage其中,为您想要导入的类名。您可以在一个from语句中导入超过一个模块,其间以逗号分隔。4、Monkeyrunner命令语法4.1导入需要的模块①方式一:importsys,time,datetime,osfromcom.android.monkeyrunnerimportMonkeyRunnerasmrfromcom.android.monkeyrunnerimportMonkeyDeviceasmdfromcom.android.monkeyrunnerimportMonkeyImageasmi如果给导入的模块起了别名,就应该使用别名,而不能使用原名,否则会出现错误。比如连接设备或模拟器,起了以上别名后,命令应该如下:device=mr.waitForConnection()②方式二:fromcom.android.monkeyrunnerimportMonkeyRunner,MonkeyDevice,MonkeyImage③方式三:importcom.android.monkeyrunner但是在使用时,就显得特别麻烦device=com.android.monkeyrunner.MonkeyRunner.waitForConnection()④方式四:我们也可以给它一个别名importcom.android.monkeyrunnerascam但是在使用时,就显得特别麻烦device=cam.MonkeyRunner.waitForConnection()#等待连接到设备,与模拟器连接,返回monkeydevice对象,代表连接的设备。没有报错的话说明连接成功。参数1:超时时间,单位秒,浮点数。默认是无限期地等待。参数2:串deviceid,指定的设备名称。默认为当前设备(手机优先,比如手机通过USB线连接到PC、其次为模拟器)。默认连接:device=MonkeyRunner.waitForConnection()参数连接:device=mr.waitForConnection(1.0,'emulator-5554')4.2向设备或模拟器安装要测试的APKdevice.installPackage('myproject/bin/MyApplication.apk')#参数是相对或绝对APK路径路径级别用“/”,不能用“\”,比如d:\,而应该写成d:/安装成功返回true,此时查看模拟器我们可以在IDLE界面上看到安装的APK的图标了。4.3从设备中删除指定的软件包,包括其相关的数据和调整缓存device.removePackage('myproject/bin/MyApplication.apk')删除成功返回true。4.4启动任意的Activitydevice.startActivity(component=your.)或者device.startActivity(component=your.)此时可以向模拟器发送如按键、滚动、截图、存储等操作了。执行一个adbshell命令,并返回结果,如果有的话device.shell(...)4.5暂停目前正在运行的程序指定的秒数MonkeyRunner.sleep(秒数,浮点数)4.6捕捉屏幕写入文件获取设备的屏蔽缓冲区,产生了整个显示器的屏蔽捕获。(截图)result=device.takeSnapshot()返回一个MonkeyImage对象(点阵图包装),我们可以用以下命令将图保存到文件result.writeToFile('takeSnapshot\\result1.png','png')MonkeyImage.writeToFile(参数1:输出文件名,也可以包括路径,参数2:目标格式)写成功返回true,否则返回false4.7type键盘上的类型指定的字符串,这相当于要求每个字符串中的字符按(键码,DOWN_AND_UP).字符串发送到键盘device.type('字符串')4.8唤醒设备屏幕(在设备屏幕上唤醒)device.wake()4.9重新引导到指定的引导程序指定的设备device.reboot()5、Monkeyrunner类的方法介绍Alert(stringmessage,stringtitle,stringokTitle)弹出一个对话框直到用户确认为止message:会话弹出的内容itle:会话标题,默认为alertokTitle:会话确认按钮,默认为okChoice(stringmessage,iterablechoices,stringtitle)显示一个对话框,选择你要添加那个py文件message:显示在对话框中的提示信息。choices:一个迭代的包含一系列选择的python类型title:对话框的标题,默认为inputHelp(stringformat)monkeyrunner的一些帮助,这个和api差不多Input(stringmessage,stringinitialValue,stringtitle,stringokTiltle,stringcancelTitle)用户可以在一个对话框里面输入内容用法:MonkeyRunner.input(message,initialValue,title,okTitle,cancelTitle)message:对话框显示的信息。Thepromptmessagetodisplayinthedialog.initialValue:提供给用户的初始化值,默认为空字符串。Theinitialvaluetosupplytotheu
本文标题:monkeyrunner详细介绍以及编写简单的python脚本
链接地址:https://www.777doc.com/doc-4917893 .html