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工具。

0 0