monkeyrunner为android系统新公开的一个测试工具。有助于开发人员通过脚本部署较大规模的自动化测试。

Monkeyrunner
       
本文档中包含

  1. 一个简单的monkeyrunner示例程序
  2. monkeyrunner API简介
  3. 运行monkeyrunner
  4. monkeyrunner内建帮助
  5. 使用插件扩展monkeyrunner

参见

  1. 测试基础

monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。
monkeyrunner工具与用户界面/应用程序测试工具,也称为monkey工具并无关联。monkey工具直接运行在设备或模拟器的adbshell中,生成用户或系统的伪随机事件流。而monkeyrunner工具则是在工作站上通过API定义的特定命令和事件控制设备或模拟器。

monkeyrunner工具为Android测试提供了以下特性:

  • 多设备控制:monkeyrunner    API可以跨多个设备或模拟器实施测试套件。您可以在同一时间接上所有的设备或一次启动全部模拟器(或统统一起),依据程序依次连接到每一个,然后运行一个或多个测试。您也可以用程序启动一个配置好的模拟器,运行一个或多个测试,然后关闭模拟器。
  • 功能测试:    monkeyrunner可以为一个应用自动贯彻一次功能测试。您提供按键或触摸事件的输入数值,然后观察输出结果的截屏。
  • 回归测试:monkeyrunner可以运行某个应用,并将其结果截屏与既定已知正确的结果截屏相比较,以此测试应用的稳定性。
  • 可扩展的自动化:由于monkeyrunner是一个API工具包,您可以基于Python模块和程序开发一整套系统,以此来控制Android设备。除了使用monkeyrunner    API之外,您还可以使用标准的Python    os和subprocess模块来调用如adb这样的Android工具。您还可以向monkeyrunner API中添加您自己的类。我们将在使用插件扩展monkeyrunner一节中对此进行详细讨论 。

monkeyrunner工具使用Jython(使用Java编程语言的一种Python实现)。Jython允许monkeyrunnerAPI与Android框架轻松的进行交互。使用Jython,您可以使用Python语法来获取API中的常量、类以及方法。

一个简单的monkeyrunner程序实例

以下为一个简单的monkeyrunner程序,它将会连接到一个设备,创建一个MonkeyDevice对象。使用MonkeyDevice对象,程序将安装一个Android应用包,运行其中一个活动,并向其发送按键事件。程序接下来会将结果截图,创建一个MonkeyImage对象,并使用这个对象截图将保存至.png文件。

 # 导入此程序所需的monkeyrunner模块
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# 连接当前设备,返回一个MonkeyDevice对象
device = MonkeyRunner.waitForConnection()
# 安装Android包,注意,此方法返回的返回值为boolean,由此您可以判断安装过程是否正常
device.installPackage('myproject/bin/MyApplication.apk')
# 运行此应用中的一个活动 device.startActivity(component='com.example.android.myapplication.MainActivity')
# 按下菜单按键
device.press('KEYCODE_MENU','DOWN_AND_UP')
# 截取屏幕截图
result = device.takeSnapShot
# 将截图保存至文件
result.writeToFile('myproject/shot1.png','png')

Themonkeyrunner API

monkeyrunnerAPI于com.android.monkeyrunner包中包含三个模块:

  • MonkeyRunner:一个为monkeyrunner程序提供工具方法的类。这个类提供了用于连接monkeyrunner至设备或模拟器的方法。它还提供了用于创建一个monkeyrunner程序的用户界面以及显示内置帮助的方法。
  • MonkeyDevice:表示一个设备或模拟器。这个类提供了安装和卸载程序包、启动一个活动以及发送键盘或触摸事件到应用程序的方法。您也可以用这个类来运行测试包。
  • MonkeyImage:表示一个截图对象。这个类提供了截图、将位图转换成各种格式、比较两个MonkeyImage对象以及写图像到文件的方法。

在python程序中,您将以Python模块的形式使用这些类。monkeyrunner工具不会自动导入这些模块。您必须使用类似如下的from语句:
  fromcom.android.monkeyrunner import
其中,为您想要导入的类名。您可以在一个from语句中导入超过一个模块,其间以逗号分隔。

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

monkeyrunner命令的语法为:
monkeyrunner -plugin  <程序文件名> <程序选项>

表 1阐释了命令的标志和参数
monkeyrunner标志和参数。
                                                                                                           
           
参数                  说明
       
-plugin            (可选)指定一个内含monkeyrunner插件的.jar文件。欲了解更多关于monkeyrunner插件的内容,请参照使用插件扩展monkeyrunner。要指定多个文件,包括多次论证。如欲指定超过一个文件,可以多次使用此参数。
       
<程序文件名>     如果您指定此参数,monkeyrunner将视文件内容为Python程序并予以执行。如果此参数未予指定,则开启一个交互式会话。
        
<程序选项>      (可选)<程序文件名>            所指定的程序所需的参数
       
monkeyrunner内建帮助

您可以用以下命令来生成monkeyrunner的API参考:
monkeyrunner  help.py

参数说明:

  • 可以为text或html,分别代表纯文本和HTML输出。
  • 指定了输出文件的全路经名称。

使用插件扩展monkeyrunner

您可以用Java语言创建新的类,并打包成一个或多个.jar文件,以此来扩展monkeyrunnerAPI。您可以使用您自己写的类或者继承现有的类来扩展monkeyrunnerAPI。您还可以使用此功能来初始化monkeyrunner环境。

为了使monkeyrunner加载一个插件,您应当如使用如表1中所述的-plugin参数来调用monkeyrunner命令。

在您编写的插件中,您可以导入或继承位于com.android.monkeyrunner包中的几个主要的monkeyrunner类:MonkeyDevice, MonkeyImage和MonkeyRunner(参见monkeyrunnerAPI )。

请注意,插件无法让你访问Android的SDK。您不能导入com.android.app等包。这是因为monkeyrunner是在框架API层次之下与设备或模拟器进行交互的。

插件启动类

用于插件的.jar文件可以指定一个类,使其在脚本执行之前就实例化。如欲指定这个类,您需要在.jar文件的manifest中添加键MonkeyRunnerStartupRunner。其值为启动时运行的类的名称。以下代码段显示了如何在一个ant构建脚本达到这样的目的:
               
如欲访问monkeyrunner的运行时环境,启动类可以实现com.google.common.base.Predicate。例如,用这个类在默认的命名空间中设置一些变量:
package com.android.example;

 import com.google.common.base.Predicate;
import org.python.util.PythonInterpreter; public class Main implements Predicate {
@Override
public boolean apply(PythonInterpreter anInterpreter) { /*
* Examples of creating and initializing variables in the monkeyrunner environment's
* namespace. During execution, the monkeyrunner program can refer to the variables "newtest"
* and "use_emulator"
*
*/
anInterpreter.set("newtest", "enabled");
anInterpreter.set("use_emulator", 1); return true;
}
}

Monkeyrunner 使用说明的更多相关文章

  1. MonkeyRunner测试工具小结

    一.MonkeyRunner介绍: MonkeyRunner是Google提供的一个基于坐标点的Android黑盒自动化测试工具.Monkeyrunner工具提供了一套API让用户/测试人员来调用,调 ...

  2. Atitit.项目修改补丁打包工具 使用说明

    Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...

  3. awk使用说明

    原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...

  4. monkeyrunner之控件ID不存在或重复

    我们在用monkeyrunner进行Android自动化时,通过获取坐标点或控件ID进行一系列操作.由于使用坐标点时,屏幕分辨率一旦更改,则代码中用到坐标的地方都要修改,这样导致代码的复用率较低.因此 ...

  5. monkeyrunner脚本录制

    1.在窗口输入 monkeyrunner monkey_recorder.py  调用录制脚本工具 2.在窗口输入 monkeyrunner monkey_playback.py  d:\game   ...

  6. “我爱背单词”beta版发布与使用说明

    我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院  拒 ...

  7. Oracle 中 union 和union all 的简单使用说明

    1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...

  8. [Android]官网《monkeyrunner》中文翻译

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5050768.html 翻译自 Android Develope ...

  9. monkeyrunner 自动化测试 图片对比的实现

    这个功能在网上看了好多人的代码,但是总是在image.writeToFile('D:/tmp/images/black.png','png')这一句出错.查了google的API也感觉没错呀. 后来自 ...

随机推荐

  1. /build-impl.xml:1030: The module has not been deployed.(netbean javaweb)

    我在netbean上创建了一个javaweb,这个项目创建成功了,但是运行时却有了错误,错误贴图如下 报错: The module has not been deployed.  See the se ...

  2. LNMP安装与配置之MySQL

    MySQL 是最流行的关系型数据库管理系统之一,今天的安装是在CentOS7环境下进行安装,安装的版本是MySQL5.7,有需要别的版本可点击  官网. 一.安装 1.配置YUM源 # 下载mysql ...

  3. linux基础—课堂随笔07_磁盘存储和文件系统

    磁盘管理 管理分区 列出块设备  lsblk parted命令 高级分区操作 用法:  parted [选项]... [设备 [命令 [参数]...]...]  parted /dev/sdb mkl ...

  4. Linux根文件系统和目录结构及bash特性2

    Linux系统上的文件类型:    -:常规文件,即f    d:directory,目录文件    b:block device,块设备文件,支持以“block”为单位进行随机访问    c:cha ...

  5. BZOJ 1002 生成树计数&高精度

    给你定义一种特殊的图 这种图总共有n个节点 假设编号为0~n-1 首先1~n-1排成环形 每个点与相邻的两个点有边 其次这n-1个节点每个和0节点有一条边 每次询问你一个n 要回到当前n节点的特殊图有 ...

  6. Linux系统用户权限管理

    Linux系统中三种基本权限 用户属主.用户属组及其它人权限 -rw-r--r-- 1 root root 762 11-11 20:34 a.out 文件类型 ls命令中的缩写 应用 一般文件 - ...

  7. (七)zabbix监控nginx

    1.agent端配置 1)nginx编译安装需要加上该选项--with-http_stub_status_module 2)修改nginx配置文件 #vim /usr/local/nginx/conf ...

  8. 【Python网络】网络协议篇

    OSI七层协议 互联网协议按照功能不同分为OSI七层 或 TCP/IP五层 或 TCP/IP四层 每层运行常见物理设备 TCP/IP五层模型讲解 每层都运行特定的协议,越往上越靠近用户,越往下越靠近硬 ...

  9. 获取网卡速率,cpu使用率

    ];//获取网卡名称 PerformanceCounter NetworkR = new PerformanceCounter("Network Interface", " ...

  10. html基础(选择器,font属性 )

    css选择器    css与html的关系   css以html为基础 css主要设置的就是html标签中的属性样式,css进行网页布局.   css语法 选择器{属性:值,属性:值}   css选择 ...