• MonkeyRunner简介


    monkeyrunner工具提供了编写控制Android设备或仿真器从Android的代码之外程序的API。随着monkeyrunner,您可以编写安装一个Android应用程序或测试包,运行它,发送击键它,需要它的用户界面截图,并将截图工作站上的Python程序。该monkeyrunner工具主要设计在功能/框架水平和运行单元测试套件来测试应用程序和设备,但你可以自由地将其用于其它用途。

    monkeyrunner工具为Android的测试,这些独特的功能:

    1.多设备控制:monkeyrunner API可以跨多个设备或仿真器应用一个或多个测试套件。您可以物理连接的所有设备或启动了所有的仿真器(或两者兼有)同时,连接到每一个轮流程序,然后运行一个或多个测试。您也可以启动一个模拟器配置编程,运行一个或多个测试,然后关闭模拟器。
    2.功能测试:monkeyrunner可以运行Android应用程序的自动启动到完成测试。您提供的输入值与键盘或触摸事件,并查看结果的截图。
    3.回归测试 - monkeyrunner可以运行一个应用程序,并比较其输出截图一组被称为是正确的截图测试应用程序的稳定性。
    4.可扩展的自动化-由于monkeyrunner是一个API工具包,你可以开发基于Python模块和控制Android设备程序的整个系统。除了 ​​使用monkeyrunner API本身,你可以使用标准的Python OS和 子 模块的调用Android的工具,比如 Android的调试桥。

    monkeyrunner 的三个模块

    所述monkeyrunner API被包含在包中的三个模块 com.android.monkeyrunner:
    1.MonkeyRunner:一类为monkeyrunner程序的实用方法。这个类提供了用于连接monkeyrunner至设备或模拟器的方法。它也提供了用于创建用户界面的monkeyrunner程序和用于显示内置帮助的方法。
    2.MonkeyDevice:表示一个设备或模拟器。这个类提供了安装和卸载程序包,启动一个活动以及发送键盘或触摸事件到应用程序的方法。您也可以使用这个类来运行测试包。
    3.MonkeyImage:表示一个屏幕捕获图像。这个类提供了捕捉屏幕,将位图图像,以各种不同的格式,比较两个MonkeyImage对象,写一个图像文件的方法。

    1
    2
    3
    4
    #导入三个模块MonkeyRunner,MonkeyDevice,MonkeyImage
    from com.android.monkeyrunner import MonkeyRunner as mr
    from com.android.monkeyrunner import MonkeyDevice as md
    from com.android.monkeyrunner import MonkeyImage as mi

    monkeyrunner的接入设备API

    adb devices 命令可以获取设备对象的名称

    1
    2
    3
    #获取接入的设备,前面的为等待时间(s),后面正则或者设备的全名,返回一个device对象
    #device=mr.WaitForConnection(1,'ss1z1')
    device=mr.WaitForConnection()

    安装apk

    device.startActivity("package名/activity名")

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

    卸载,这应该是应用的包名

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

    启动入口活动

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

    等待时间,秒

    1
    mr.sleep(3)

    唤醒屏幕

    1
    mr.wake()

    触摸屏幕,x,y坐标,触摸类型三种,UP,DOWN,DOWN_AND_UP

    1
    device.touch(10,20,DOWN_AND_UP)

    设备屏幕上模拟拖曳

    用法:MonkeyDevice.drag(start,end,duration,steps)
    start:拖曳开始坐标 - The starting point for the drag (a tuple (x,y) in pixels)
    end:拖曳结束坐标点- The end point for the drag (a tuple (x,y) in pixels
    duration:持续时间 - Duration of the drag in seconds (default is 1.0 seconds)
    steps:拖曳步骤- The number of steps to take when interpolating points. (default is 10)

    1
    device.drag((472,1067),(482,560))  

    按键指令,前面为按键名称,如HOME键

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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.type("你好")

    获取monkeyrunner的帮助

    1
    device.help()

    获取设备系统环境变量的名称

    1
    device.getProperty()

    重启设备

    1
    device.reboot()

    一些图片的操作API

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    #获取截图
    result1=device.takeSnapshot()
    #将结果输出到文件,前面为路径,后面为图片类型,可写可不写
    result1.writeToFile('D:/demo1.png','png')
    #两种写法都可以
    result1.writeToFile('D:\demo1.png','png')
    #将当前图像转换为一个特定的格式并将其作为字符串返回,然后你可以访问的iterable二进制字节。
    result.convertToBytes()
    #图片的对比,先获取第二张截图
    result2=device.takeSnapshot()
    result2.writeToFile('D:/demo2.png','png')
    #判断图片相识度是否是为90%
    if(result1.sameAs(result2,0.9)):

      

  • 相关阅读:
    mysql总结1
    shell 获取结果中的第n列,第n行
    automake中Makefile.am和configure.ac的格式及编译过程
    安卓常见错误解决方案
    kotlin 委托
    Kotlin 对象表达式和对象声明
    Kotlin 枚举类
    angular js自定义service的简单示例
    用angular.element实现jquery的一些功能的简单示例
    js判断中出现两个!!是什么意思?
  • 原文地址:https://www.cnblogs.com/chenwolong/p/MonkeyRunner.html
Copyright © 2020-2023  润新知