android测试:MonkeyRunner
来源:互联网 发布:win10系统ps软件 编辑:程序博客网 时间:2024/06/06 07:45
一、MonkeyRunner的定义
monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件。
二、MonkeyRunner的环境配置
2.1搭建python环境
参考教程:http://jingyan.baidu.com/article/c910274be14d64cd361d2dd8.html
2.2搭建java环境
参考教程:http://jingyan.baidu.com/article/bea41d435bc695b4c41be648.html
2.3配置android环境
参考教程:http://jingyan.baidu.com/article/bea41d437a41b6b4c51be6c1.html
三、MonkeyRunner测试
3.1脚本录制器录制测试
下载monkey_recorder.py和monkey_playback.py文件。在命令行中进入sdk\tools中,见下图:
图表1
输入monkeyrunner D:\Androidsdk\tools\py\monkey_recorder.py,此处应该注意的石monkey_recorder.py的路径应该设置为绝对路径在相同路径下输入名称即可。打开脚本录制器MonkeyRecorder,见图表2.
图表2
MonkeyRecorder有四个选项:Wait中可以设置距离下次操作的延迟为多少秒;Press a Button可以设置点击屏幕上不能点击的按钮(Home、Menu);Type Something可以在屏幕鼠标处输入;Fling用来操作模拟键盘;Export Actions是导出所有动作;Refresh Display是刷新之前动作。
注意:对MonkeyRecorder中的手机映像做任意操作都会被记录下来并且同步到手机上,然后手机上操作会同步到MonkeyRecorder的手机映像中,但操作不会被记录。
采用一个音乐播放器进行测试,在MonkeyRecorder中进行脚本录制并保存名为action.mr中,见图表3:
图表3
然后在命令行中输入monkeyrunner D:\Androidsdk\tools\py\monkey_playback.py action.mr即可以看见手机重复你当时的操作。建议设置延时,因为那些操作是连续的,不像正常你所点击的是隔着时差的。
利用脚本录制器作用是可以直接获取操作,在代码中代入即可直接运行,也可以方便的得出控件的绝对路径对用例编写起了辅助作用;缺点是如果布局改动则难以进行功能测试,以及没有返回键的点击事件。
3.2代码用例编写
首先先打开HierarchyViewer或者UI Automator Viewer进行UI界面的定位。推荐使用UI Automator Viewer,因为真机如果要使用Hierarchy Viewer要root并且添加许多系统文件且容易对硬件造成危害。下图为UI Automator Viewer的视图,以系统计算器为例子:
图表4
从上可以看出包名以及对应控件的ID名(如果控件有ID名)。此时我们可以根绝这些控件以及ID名进行编写用例。
此处有三个类:
MonkeyRunner:这个类提供了用于连接monkeyrunner和设备或模拟器的方法,它还提供了用于创建用户界面显示提供了方法。
MonkeyDevice:代表一个设备或模拟器。这个类为安装和卸载包、开启Activity、发送按键和触摸事件、运行测试包等提供了方法。
MonkeyImage:这个类提供了捕捉屏幕的方法。这个类为截图、将位图转换成各种格式、对比两个MonkeyImage对象、将image保存到文件等提供了方法。
编码实现用例(实现8*9输出72):
from com.android.monkeyrunner importMonkeyRunner,MonkeyDevice
from com.android.monkeyrunner.easy importEasyMonkeyDevice
from com.android.monkeyrunner.easy importBy
from com.android.chimpchat.hierarchyviewerimport HierarchyViewer
from com.android.hierarchyviewerlib.deviceimport ViewNode
device = MonkeyRunner.waitForConnection()
package = 'com.android.calculator2'
activity ='com.android.calculator2.Calculator'
runComponent = package + '/' + activity
device.startActivity(component=runComponent)
MonkeyRunner.sleep(3.0)
easy_device= EasyMonkeyDevice(device)
easy_device.touch(By.id('id/digit8'),MonkeyDevice.DOWN_AND_UP)
easy_device.touch(By.id('id/mul'),MonkeyDevice.DOWN_AND_UP)
easy_device.touch(By.id('id/digit9'),MonkeyDevice.DOWN_AND_UP)
easy_device.touch(By.id('id/equal'),MonkeyDevice.DOWN_AND_UP)
MonkeyRunner.sleep(1.0)
pic= device.takeSnapshot()
pic.writeToFile('D:\\result.png','png')
其中值得注意的是:
device.startActivity(component=runComponent)//包名和启动入口activity
easy_device= EasyMonkeyDevice(device) //获取一个EasyMonkeyDevice对象
easy_device.touch(By.id('id/digit8'),MonkeyDevice.DOWN_AND_UP)//用touch方法(点击事件都是touch方法),俩个参数第一个是id,第二个是动作。
如果跳转到另外一个activity中,一样的选择id进行点击输入测试,只要id不变,所以版本更新都是可以用的,不同绝对坐标一样要求绝对的位置才能测试。
EasyMonkeyDevice有一点弊端,必须是虚拟机或者是经过配置以及root的真机才能使用,也就是配置好HierarchyViewer才能使用。
四、MonkeyRunner的总结
1、多设备控制:monkeyrunnerAPI可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
2、 功能测试:monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
3、 回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
4、 可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用Android Debug Bridge这样的Android工具。
- android 自动化测试 monkeyrunner
- Android测试(一) Monkeyrunner
- android monkeyRunner 自动化测试
- Android自动化测试Monkeyrunner
- android自动化测试MonkeyRunner
- android 自动化测试Monkeyrunner
- android测试:MonkeyRunner
- Android测试-- MonkeyRunner
- MonkeyRunner:Android自动化测试
- Android自动测试之MonkeyRunner之monkeyrunner
- Android自动测试之MonkeyRunner之monkeyrunner
- Android自动化测试之monkeyrunner
- Android自动化测试之monkeyrunner
- Android自动化测试之monkeyrunner
- Android自动化测试之MonkeyRunner
- Android自动化测试之Monkeyrunner
- Android自动化测试之MonkeyRunner
- Android自动化测试之monkeyrunner
- 企业增强型融合通讯解决方案Cnskype
- 浅析linux(centos) 文件新建、删除、移动、复制命令
- 二叉排序树
- 用SQL语言创建AES加解密的存储过程
- toolbar实现标题栏
- android测试:MonkeyRunner
- hdu 1018
- python requests库添加自定义cookie的方法
- 求给定数组的最大子数组
- 得到当前线程
- 关于研究Webservice问题总结与心得体会
- C# 获取SQL Server所有的数据库名称
- 前端问题答案讨论
- Android View之onMeasure流程