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. ASP.NET Core 3.x Razor视图运行时刷新实时编译

    前言: 很长一段时间没有写过ASP.NET Core Razor(.cshtml)视图开发WEB页面了,今天刚好把之前做的一个由ASP.NET Core 2.2+Razor开发的项目升级到ASP.NE ...

  2. 《Offer一箩筐》求职之前你必须知道的 4 件事!!

    「MoreThanJava」 宣扬的是 「学习,不止 CODE」. 如果觉得 「不错」 的朋友,欢迎 「关注 + 留言 + 分享」,文末有完整的获取链接,您的支持是我前进的最大的动力! Hi~ 这里是 ...

  3. C#知识点:抽象类和接口浅谈

    首先介绍什么是抽象类? 抽象类用关键字abstract修饰的类就是叫抽象类,抽象类天生的作用就是被继承的,所以不能实例化,只能被继承.而且 abstract 关键字不能和sealed一起使用,因为se ...

  4. shell小技巧(1)计算一个文件中空行数量

    方法1: grep -E "^$" 1.txt | wc -l 详解:在网上摘抄,个人觉得不使用-E参数也行,利用正则^$可帅选出空行 方法2: file="1.txt& ...

  5. pwnable.kr之fd

    题目如图: 在终端输入:ssh fd@pwnable.kr -p2222 连接到远程终端,如图: 输入ls -l,查看文件: 输入whoami,查看自身用户名称: 根据题目意思我们只要打开flag文件 ...

  6. cookie和session讲解

    1.cookie是什么? 保存在浏览器本地上的一组组键值对 2.session是什么? 保存在服务器上的一组组键值对 3.为什么要有cookie? HTTP是无协议状态,每次请求都是互相独立的,没有办 ...

  7. 操作BOM对象

    操作BOM对象 目录 操作BOM对象 1. 浏览器介绍 2. window 3. Navigator(不建议使用) 4. screan 5. location(重要) 6. document(内容:D ...

  8. 备忘录:SQL SERVER2014 出现:“Cannot find one or more components”

    目录 1. 起因 2. 解决方案 3. 备注 4. 参考 2020年9月13日 00:40:09-shanzm 1. 起因 因为卸载vs2015的时候,使用了一个VS2013/2015卸载工具Tota ...

  9. list列表(也叫数组),以及常用的一些方法

    列表的表达: 元祖tuple,元祖是不可被修改的列表 1.列表的增,list.append(元素).或list.insert(index,元素) 2.列表的删,list.pop(可指定index也可不 ...

  10. [05] 通过P/Invoke加速C#程序

    通过P/Invoke加速C#程序 任何语言都会提供FFI机制(Foreign Function Interface, 叫法不太一样), 大多数的FFI机制是和C API. C#提供了P/Invoke来 ...