MonkeyRunner介绍
1.monkeyrunner 工具提供了一个 API,用于编写可从 Android 代码外部控制 Android 设备或模拟器的程序。使用 monkeyrunner,您可以编写一个 Python 程序,以便安装 Android 应用或测试软件包,运行它,向其发送按键,截取其界面的屏幕截图,并将屏幕截图存储到工作站中。monkeyrunner 工具主要用于在功能/框架级测试应用和设备以及运行单元测试套件,但您也可以自由地将其用于其他目的。
monkeyrunner 工具与 UI/Application Exerciser Monkey(即 monkey工具)无关。Monkey工具直接在设备或模拟器上的 adb shell 中运行,并生成伪随机用户和系统事件流。相比之下,monkeyrunner 工具是通过从 API 发送特定命令和事件,从工作站中控制设备和模拟器。
monkeyrunner 工具为 Android 测试提供了以下这些独特功能:
  • 多设备控制:monkeyrunner API 可以跨多个设备或模拟器应用一个或多个测试套件。您可以通过物理方式连接所有设备并/或同时启动所有模拟器,以编程方式依次连接到每个设备,然后运行一个或多个测试。您还可以编程方式启动模拟器配置,运行一个或多个测试,然后关闭模拟器。
  • 功能测试:monkeyrunner 可以对 Android 应用自始至终地运行自动化测试。您可以通过按键或轻触事件提供输入值,并以屏幕截图的形式查看结果。
  • 回归测试 - monkeyrunner 可通过以下方法测试应用稳定性:运行某个应用,然后将它的输出屏幕截图与一组已知正确的屏幕截图进行比较。
  • 可扩展的自动化 - 由于 monkeyrunner 是一个 API 工具包,因此您可以开发一整套系统(包括基于 Python 的模块和用于控制 Android 设备的程序)。除了使用 monkeyrunner API 本身,您还可以使用标准 Python os 和 subprocess模块来调用 Android 工具,例如 Android 调试桥。
此外,您也可以将自己的类添加到 monkeyrunner API 中。
monkeyrunner 工具使用 Jython,这是一种使用 Java 编程语言的 Python 实现。Jython 使 monkeyrunner API 能与 Android 框架轻松交互。借助 Jython,您可以使用 Python 语法访问 API 的常量、类和方法。
2.MonkeyRunner,MonkeyDevice,MonkeyImage
MonkeyRunner包括三个类:MonkeyRunner,MonkeyDevice,MonkeyImage
它们的作用分别是:
MonkeyRunner:包含静态实用程序方法的 monkeyrunner 类。
方法
void
alert (string message, string title, string okTitle)
针对运行当前程序的进程显示一个提醒对话框。
integer
choice(string message, iterable choices, string title)
显示一个对话框,其中列出了针对运行当前程序的进程的选项。
void
help(string format)
使用指定格式以类似于 Python 的 pydoc 工具的样式显示 monkeyrunner API 引用。
string
input (string message, string initialValue, string title, string okTitle, string cancelTitle)
显示一个接受输入的对话框。
void
sleep (float seconds)
将当前程序暂停指定的秒数。
MonkeyDevice
waitForConnection (float timeout, string deviceId)
尝试在 monkeyrunner 后端与指定的设备或模拟器之间建立连接。返回的是MonkeyDeviced实例
 
MonkeyDevice:此类用于控制 Android 设备或模拟器。这些方法会发送界面事件、检索信息、安装和移除应用,以及运行应用。通过如下代码创建
newdevice = MonkeyRunner.waitForConnection()
常量
string
DOWN
将此参数与 press() 或 touch() 的 type 参数一起使用可发送 DOWN 事件。
string
UP
将此参数与 press() 或 touch() 的 type 参数一起使用可发送 UP 事件。
string
DOWN_AND_UP
将此参数与 press() 或 touch() 的 type 参数一起使用可发送 DOWN 事件,紧跟着发送 UP 事件。
 
方法
void
broadcastIntent (string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, iterable flags)
向此设备广播 Intent,就像 Intent 来自应用一样。
void
drag (tuple start, tuple end, float duration, integer steps)
在此设备的屏幕上模拟拖动手势(轻触、按住和移动)。
object
getProperty (string key)
在给定系统环境变量的名称后,返回此设备的相应值。此方法的详细说明中列出了可用的变量名称。
object
getSystemProperty (string key)
. adb shell getprop <key>. This is provided for use by platform developers. 的等效 API
void
installPackage (string path)
将包含在 packageFile 中的 Android 应用或测试软件包安装到此设备上。如果应用或测试软件包已安装,则会被替换。
dictionary
instrument (string className, dictionary args)
在 Android 插桩下运行指定的组件,并在字典中返回结果,该字典的具体格式由正在运行的组件决定。该组件必须已存在于此设备上。
void
press (string name, dictionary type)
将 type 指定的按键事件发送到键码(name)指定的按键。
void
reboot (string into)
将此设备重新启动到 bootloadType 指定的引导加载程序中。
void
removePackage (string package)
从此设备中删除指定的软件包,包括其数据和缓存。
object
shell (string cmd)
执行 adb shell 命令并返回结果(如果有)。
void
startActivity (string uri, string action, string data, string mimetype, iterable categories dictionary extras, component component, flags)
通过发送根据提供的参数构造的 Intent,在此设备上启动一个 Activity。
MonkeyImage
takeSnapshot()
捕获此设备的整个屏幕缓冲区,并生成一个 MonkeyImage 对象,其中包含当前显示内容的屏幕截图。
void
touch (integer x, integer y, integer type)
将 type 指定的轻触事件发送到由 x 和 y 指定的屏幕位置。
void
type (string message)
将消息中包含的字符发送到此设备,就好像这些字符是用设备键盘输入的一样。这等同于使用按键事件类型 DOWN_AND_UP 针对 message 中的每个键码调用 press()。
void
wake ()
唤醒此设备的屏幕。
表 1. 与 getProperty() 和 getSystemProperty() 配合使用的属性变量名称。
属性组
属性
说明
备注
build
board
设备主板的代号
请参阅 Build
brand
为其定制操作系统的运营商或提供商。
device
设备设计名称。
fingerprint
当前正在运行的 Build 的唯一标识符。
host
 
ID
变更清单编号或标签。
model
设备的最终用户可见名称。
product
整体产品名称。
tags
描述 Build 的逗号分隔标记,例如“unsigned”和“debug”。
type
Build 类型,例如“user”或“eng”。
user
 
CPU_ABI
本机代码指令集的名称,格式为 CPU 类型加 ABI 惯例。
manufacturer
产品/硬件制造商。
version.incremental
源代码控制系统用来表示此版本的软件的内部代号。
version.release
此版本的软件的用户可见名称。
version.sdk
与此版本的操作系统相关联的用户可见 SDK 版本。
version.codename
当前开发代号,如果此版本的软件已发布,则为“REL”。
display
width
设备的显示屏宽度(以像素为单位)。
如需了解详情,请参阅 DisplayMetrics。
height
设备的显示屏高度(以像素为单位)。
density
显示屏的逻辑密度。系统会按照此系数调整 DIP(密度无关像素)单位,以适应设备的分辨率。调整 DIP 是为了使 1 DIP 相当于 160 ppi 显示屏上的一个像素。例如,在 160 dpi 屏幕上,密度为 1.0,而在 120 dpi 屏幕上,密度为 0.75。
该值并非与实际屏幕尺寸完全相符,但会根据显示屏 DPI 的大幅变化进行调整。如需了解详情,请参阅 density。
am.current
package
当前正在运行的软件包的 Android 软件包名称。
am.current 键可返回当前正在运行的 Activity 的相关信息。
action
当前 Activity 的操作。其格式与软件包清单中 action 元素的 name 属性相同。
comp.class
启动当前 Activity 的组件的类名称。如需了解详情,请参阅 comp.package。
comp.package
启动当前 Activity 的组件的软件包名称。组件由软件包名称和软件包所包含的类的名称指定。
data
启动当前 Activity 的 Intent 中包含的数据(如果有)。
categories
由启动当前 Activity 的 Intent 指定的类别。
clock
realtime
自设备重新启动后经过的毫秒数,包括深度睡眠时间。
如需了解详情,请参阅 SystemClock。
uptime
自设备重新启动后经过的毫秒数,不包括深度睡眠时间
millis
从 UNIX 纪元开始算起的当前时间(以毫秒为单位)。
 
MonkeyImage:存储设备或模拟器屏幕截图的 monkeyrunner 类。在截图过程中,系统会从屏幕缓冲区复制该图片。此对象的方法可将该图片转换为各种存储格式,将该图片写入文件,复制该图片的某些部分,并将此对象与其他 MonkeyImage 对象进行比较。
无需创建 MonkeyImage 的新实例,而是可以使用 MonkeyDevice.takeSnapshot() 根据屏幕截图创建一个新实例。例如,使用以下命令:
newimage = MonkeyDevice.takeSnapshot()
方法
string
convertToBytes (string format)
将当前图片转换为特定格式并以字符串形式返回该图片,然后您可以将其作为二进制字节的可迭代对象来访问。
tuple
getRawPixel (integer x, integer y)
以 (a,r,g,b) 格式的整数元组形式返回图片位置 (x,y) 处的单个像素。
integer
getRawPixelInt (integer x, integer y)
以 32 位整数形式返回图片位置 (x,y) 处的单个像素。
MonkeyImage
getSubImage (tuple rect)
根据当前图片的矩形选择区创建一个新的 MonkeyImage 对象。
boolean
sameAs (MonkeyImage other, float percent)
将此 MonkeyImage 对象与另一个对象进行比较,并返回比较结果。percent 参数指定两张“等同”的图片之间可以存在
的百分比差异。
void
writeToFile (string path, string format)
将当前图片以 format 指定的格式写入 filename 指定的文件。如果未提供扩展名且未指定格式,则使用默认格式“png”
(Portable Network Graphics)。
 

MonkeyRunner+Python自动化测试一的更多相关文章

  1. Python自动化测试入门

    在当前自动化测试中,最火的语言就是Python,很容易上手.然后就是Java+testng+appium做的UI自动化测试.下面我们就用Python脚本,做自动化集成测试. (1)获取APK文件中ID ...

  2. python自动化测试(2)-自动化基本技术原理

    python自动化测试(2) 自动化基本技术原理 1   概述 在之前的文章里面提到过:做自动化的首要本领就是要会 透过现象看本质 ,落实到实际的IT工作中就是 透过界面看数据. 掌握上面的这样的本领 ...

  3. python自动化测试(4)-使用第三方python库技术实现

    python自动化测试(4)-使用第三方python库技术实现 1   概述 关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 ...

  4. python自动化测试(3)- 自动化框架及工具

    python自动化测试(3) 自动化框架及工具 1   概述 手续的关于测试的方法论,都是建立在之前的文章里面提到的观点: 功能测试不建议做自动化 接口测试性价比最高 接口测试可以做自动化 后面所谈到 ...

  5. (学习网址)Python 自动化测试

    1.Python自动化测试地址 http://www.wtoutiao.com/author/python-selenium.html 2.unittest参考网址: 1)python自动化测试报告H ...

  6. python 自动化测试资料

    python 自动化测试资料: http://yunpan.cn/QXVvwVJsAsPnb

  7. selenium + python 自动化测试环境搭建

    selenium + python 自动化测试 —— 环境搭建 关于 selenium Selenium 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操 ...

  8. android - python 自动化测试 移动互联网 - SegmentFault

    android - python 自动化测试 移动互联网 - SegmentFault splinter

  9. Python自动化测试 -ConfigParser模块读写配置文件

    C#之所以容易让人感兴趣,是因为安装完Visual Studio, 就可以很简单的直接写程序了,不需要做如何配置. 对新手来说,这是非常好的“初体验”, 会激发初学者的自信和兴趣. 而有些语言的开发环 ...

随机推荐

  1. 太刺激了,面试官让我手写跳表,而我用两种实现方式吊打了TA!

    前言 本文收录于专辑:http://dwz.win/HjK,点击解锁更多数据结构与算法的知识. 你好,我是彤哥. 上一节,我们一起学习了关于跳表的理论知识,相信通过上一节的学习,你一定可以给面试官完完 ...

  2. 线上环境去除console

    npm i -D babel-plugin-transform-remove-console babel.config.js // 获取 VUE_APP_ENV 非 NODE_ENV,测试环境依然 c ...

  3. shell小技巧(2)查找文件时,排除几种类型文件

    代码: find -type f ! -name "*.jpg" ! -name "*.png" ! -name "*.jpeg" ! -n ...

  4. 读网文《将20M文件从30秒压缩到1秒,我是如何做到的?》做实验

    先在微信公众号上看到网文<将20M文件从30秒压缩到1秒,我是如何做到的?>,然后在网上搜索了一下,看到了原文:https://www.jianshu.com/p/2e46ccb125ef ...

  5. PHP 安装 扩展时 抛出 /usr/local/Cellar/php@7.1/7.1.25/pecl 异常解决

    liugx@MacBook-Pro  ~/work/php/ext_source/php-xhprof-extension   master  make installmkdir: /usr/ ...

  6. Django+pycharm+mysql 实现用户登录/注册(Django五)

    首先是让Django项目与mysql数据库初步建立连接 具体做法见:pycharm连接mysql(注意其中第二步MySQL驱动最好安装最新版的) 这里讲一下我在做这一步遇到的问题.一般Driver 那 ...

  7. 深度神经网络conda环境下载

    介绍 因为使用conda下载数据有时候因为网络问题下载非常慢,因此我把conda的环境备份好,到时可以直接使用conda的conda create -n 新环境名字 –clone 环境的路径 , 直接 ...

  8. Linux实战(13):Centos8 同步时间

    前言 以下操作是通过ntpdate命令实现同步 timedatectl set-timezone Asia/Shanghai # 设置时区 rpm -ivh http://mirrors.wlnmp. ...

  9. dubbo负载均衡

    dubbo 一.同一个dubbo生产者服务怎么分布在不同服务器,且能进行负载均衡? 只要两个服务的id,接口,实现类一致(且dubbo:application名称一致,表示同一应用),注册到同一zoo ...

  10. RXJAVA之Subject

    RxJava中常见的Subject有4种,分别是 AsyncSubject. BehaviorSubject.PublishSubject. ReplaySubject. AsyncSubject 使 ...