• Android 测试 之MonkeyRunner


    一、什么是MonkeyRunner

    monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。

    二、MonkeyRunner工具同Monkey工具的差别

    Monkey:

    Monkey工具直接运行在设备或模拟器的adb shell中,生成用户或系统的伪随机事件流。

    monkeyrunner:

    monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器。

    三、MonkeyRunner的测试类型

    1、多设备控制:monkeyrunner API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。

    2、 功能测试: monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。

    3、 回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。

    4、 可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner API之外,您还可以使用标准的Python os和subprocess模块来调用Android Debug Bridge这样的Android工具。

    四、运行MonkeyRunner

    您可以直接使用一个代码文件运行monkeyrunner,抑或在交互式对话中输入monkeyrunner语句。不论使用哪种方式,您都需要调用SDK目录的tools子目录下的monkeyrunner命令。如果您提供一个文件名作为运行参数,则monkeyrunner将视文件内容为Python程序,并加以运行;否则,它将提供一个交互对话环境。

    monkeyrunner的命令语法为:

    monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

    1. CMD对话框运行方式

      如下图:

    上图中,我们模拟了一次(160,450)的坐标点击和一次返回的按键点击,并分别截图:

    如图可以看出,点击返回后,模拟器UI回到了主界面。

    2.代码文件运行方式

    (1)在$Android_Root\tools下新建一个monkeyrunnerprogram.py文件,里面内容为:

    代码如下:

    # Imports the monkeyrunner modules used by this program

    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

    # Connects to the current device, returning a MonkeyDevice object

    device = MonkeyRunner.waitForConnection()

    device.touch(160,450,"DOWN_AND_UP")

    print "touch"

    MonkeyRunner.sleep(1)

    print "shoting... shot.png"

    # Takes a screenshot

    result = device.takeSnapshot()

    filename = './shot.png'

    # Writes the screenshot to a file

    result.writeToFile(filename,'png')

    print filename

    MonkeyRunner.sleep(1)

    # Do some tests

    # Presses the Menu button

    device.press('KEYCODE_BACK','DOWN_AND_UP')

    print "press BACK"

    print "shoting... shot.png"

    # Takes a screenshot

    result = device.takeSnapshot()

    filename = './shot1.png'

    # Writes the screenshot to a file

    result.writeToFile(filename,'png')

    print filename

    MonkeyRunner.sleep(1)

    (2)打开命令行,转到Android_Root\tools目录下,运行以下命令:

    monkeyrunner monkeyrunnerprogram.py

    可以达到和刚才相同的测试效果

    五、MonkeyRunner详细用法

    1. #导入模块;

    from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice, MonkeyImage

    2. #连接当前设备,并返回一个MonkeyDevice对象;

    device = MonkeyRunner.waitForConnection()

    if not device:

    print "Please connect a device to start!"

    else:

    print "Start "

    3. #安装Android包,注意,此方法返回的返回值为boolean,由此可以判断安装过程是否正常;

    device.installPackage('myproject/bin/MyApplication.apk')

    device.removePackage ('com.example.android.notepad')

    print ('卸载成功')

    device.installPackage('ApiDemos.apk')

    print ('安装成功')

    4. #启动一个Activity;

    device.startActivity(component='com.android.htccontacts/com.android.htccontacts.ContactsTabActivity')

    5. #截图;

    result = device.takeSnapshot()

    result.writeToFile('C:\\Users\\Martin\\Desktop\\test.png','png')

    6. #时延(秒);

    MonkeyRunner.sleep(3)

    7. #滑动屏幕;

    for i in range(1,70):

    device.drag((250,850),(250,110),0.1,10)

         //开始,结束,持续时间,步骤

    for i in range(1,70):

    device.drag((250,110),(250,850),0.1,10)

    MonkeyRunner.sleep(1)

    8. #触击屏幕;

    device.touch(507,72,"DOWN_AND_UP")

    9. #执行adb shell命令;

    device.shell("input text goup01")

    按下HOME键

    device.press('KEYCODE_HOME','DOWN_AND_UP')

    按下BACK键

    device.press('KEYCODE_BACK','DOWN_AND_UP')

    按下下导航键

    device.press('KEYCODE_DPAD_DOWN','DOWN_AND_UP')

    按下上导航键

    device.press('KEYCODE_DPAD_UP','DOWN_AND_UP')

    按下OK键

    device.press('KEYCODE_DPAD_CENTER','DOWN_AND_UP')

    相应的按键对应的名称如下:

    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

  • 相关阅读:
    CF 118E Bertown roads 桥
    hdu 3917 Road constructions 最大权闭合子图
    hdu 4714 Tree2cycle 树形经典问题
    POJ 2516 Minimum Cost 最小费用流
    POJ 3921 Destroying the bus stations 沿着最短路迭代加深搜索
    POJ 3422 Kaka's Matrix Travels K取方格数
    BZOJ 3083: 遥远的国度 dfs序,树链剖分,倍增
    hdu 4010 Query on The Trees LCT
    poj 2455 Secret Milking Machine 二分+最大流 sap
    定制标记---简单标记处理器
  • 原文地址:https://www.cnblogs.com/mcboy/p/8963793.html
Copyright © 2020-2023  润新知