monkeyrunner
本文档中包含
一个简单的monkeyrunner示例程序
monkeyrunner API简介
运行monkeyrunner
monkeyrunner内建帮助
使用插件扩展monkeyrunner
参见
测试基础
monkeyrunner工具提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkeyrunner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。monkeyrunner工具的主要设计目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。
monkeyrunner工具与用户界面/应用程序测试工具,也称为monkey
工具并无关联。monkey
工具直接运行在设备或模拟器的adb
shell中,生成用户或系统的伪随机事件流。而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 ,MonkeyImage
#
连接当前设备,返回一个MonkeyDevice对象
device = MonkeyRunner.waitForConnection()
#
安装Android包,注意,此方法返回的返回值为boolean,由此您可以判断安装过程是否正常
device.installPackage('myproject/bin/MyApplication.apk')
#
运行此应用中的一个活动
#注意: 包名和 LunachActivity 中间用./ 隔开
device.startActivity(component='com.example.android./myapplication.MainActivity')
#
按下菜单按键
device.press('KEYCODE_MENU','DOWN_AND_UP')
#截取屏幕截图
#注意:截图的时候一定要导入MonkeyImage
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阐释了命令的标志和参数。
表1.monkeyrunner
标志和参数。
参数 |
说明 |
---|---|
|
(可选)指定一个内含monkeyrunner插件的 |
<程序文件名> |
如果您指定此参数, |
<程序选项> |
(可选)<程序文件名> 所指定的程序所需的参数 |
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 学习的更多相关文章
-
Android自动化测试之Monkeyrunner学习笔记(一)
Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...
-
【转】monkeyrunner学习总结二:连接、安装、启动
一.获取packageName与startActivity 前置条件:已成功安装配置SL4A并连接PC调试(参见:monkeyrunner学习总结一:环境搭建:http://www.amsoft.cn ...
-
monkeyrunner学习笔记
前面部分内容转自http://blog.csdn.net/zm2714/article/details/7980634 Android自动化测试之Monkeyrunner使用方法及实例 目前andro ...
-
MonkeyRunner学习(3)脚本编辑
除了cmd直接操作手机,也可以编辑好脚本后,运行脚本,一次操作多个脚本命令 a) 新建py格式脚本,如iReader.py b) 编辑脚本 #导入模块 from com.android.monkeyr ...
-
MonkeyRunner学习(2)常用命令
目录: 1.截图 2.暂停 (时延秒) 3.屏幕操作 4.打印 5.字符串发送到键盘输入(登录输入) 6.唤醒设备屏幕 7.重起手机 8.按键(系统键) 9.回车键 10.for 循环 11.循环截图 ...
-
MonkeyRunner学习(1)测试连接
前期的环境搭建详见:http://www.cnblogs.com/peng-lan/p/5388488.html 1.打开模拟器 打开模拟器有两种方法,正常的在eclipse 中启动就不介绍了 另一种 ...
-
MonkeyRunner学习笔记(1)
MonkeyRunner是java编程语言实现的Python写出来的一个API调用工具 MonkeyRunner有三个类:MonkeyRunner,MonkeyDevice,MonkeyImage M ...
-
Monkeyrunner学习
可以写一个pyhon工程,安装在android进行测试,还可以截屏操作.Monkeyrunner为framework层开发.MonkeyRunner本身是Java做的,为了和Python连接,做了一个 ...
-
monkeyrunner学习--手机按键
按下HOME键 device.press('KEYCODE_HOME','DOWN_AND_UP') 按下BACK键 device.press('KEYCODE_BACK','DOWN_AND_UP' ...
随机推荐
-
[转载]T-SQL(Oracle)语句查询执行顺序
原文链接:http://blog.sina.com.cn/s/blog_61c006ea0100mlgq.html sql语法的分析是从右到左,where子句中的条件书写顺序,基本上对sql性能没有影 ...
-
Json解析实例
using System; using System.Collections.Generic; using System.Runtime.Serialization; using System.Win ...
-
【全面完美方案】iPhone 4S WiFi变灰 DIY修复方式
这是我在一位*网友usaretama发表的一篇帖子中看到的,原帖我发表在维维网 如果你有WiFi开关变灰不能切换.WiFi遇到搜不到AP或搜到了连不上,那您就要注意这篇了. 家人的 iPhone 4 ...
-
Dede 列表页 缩略图 有显示无则不显示
[field:array runphp='yes']@me = (strpos(@me['litpic'],'defaultpic') ? "" : "<div c ...
-
Selenium 前期学习
一.了解selenium必读文档: 官方文档:http://docs.seleniumhq.org/docs/03_webdriver.jsp 二.公司使用c#开发,配合开发的要求,使用visual ...
-
夜未央Test1题解
T1 积木游戏 树状数组的一个简单应用,建立一个维护左节点的树状数组和一个维护右节点的树状数组,对于add操作,只要在维护左节点的树状数组l处加1,维护右节点的树状数组r处加 ...
-
Java Web整合开发(78) -- Struts 1
在Struts1.3中已经取消了<data-sources>标签,也就是说只能在1.2版中配置,因为Apache不推荐在 struts-config.xml中配置数据源.所以建议不要在st ...
-
hiberate关系映射大全
1. 集合映射 开发流程: 需求分析/数据库设计.项目设计/ 编码/测试/实施部署上线/验收 需求: 用户购买, 填写地址! 数据库: 代码: // javabean设计 public class U ...
-
CAN双机通讯调试小结(SJA1000与MCP2515通讯)
2011-12-07 21:36:02. 效果图: 1,51的SJA1000自收自发测试完成,见上一篇小结. 2,SJA1000自测完成后,再自测MCP2515就非常容易.主要是设置工作模式为回环模式 ...
-
scrpy-cookie
两种方法模拟登陆 1.直接携带cookie import re import scrapy class RenrenSpider(scrapy.Spider): name = 'renren' all ...