以下内容为原创,欢迎转载,转载请注明
来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5050768.html
翻译自 Android Developer 官网:http://developer.android.com/tools/help/monkeyrunner_concepts.html
monkeyrunner
monkeyrunner工具提供了一套API,在不通过Android代码的情况下编写程序来控制一个Android设备或者模拟器。使用monkeyrunner,你可以编写一个Python
程序来安装一个Android应用程序或者测试包,运行它,给它发送按键,使用它的interface来创建一个截图,并保存在工作站上。monkeytunner工具主要是被设计用来在功能/框架级别测试应用程序和设备,并运行单元测试套件,但是你也可以使用它来达到其它的目的。
Monkeyrunner工具与也被称为monkey
的UI/Application Exerciser Monkey没有任何关系。Monkey
工具是直接在adb
shell中运行,通过在设备或者模拟器中产生伪随机流的用户和系统事件的方式。比较之下,monkeyrunner工具在一个工作站中通过API发送指定的命令和事件来控制设备和模拟器。
monkeyrunner工具提供了以下这些在Android测试中独一无二的特性:
多设备控制:monkeyrunner可以应用在一个或者多个测试套件跨越多个设备和模拟器。你可以在物理层面上一次性attach所有的设备或者启动所有的模拟器(或者两者都有),按照程序依次连接上每一个,然后运行一个或者多个测试。
功能性测试:monkeyrunner可以运行从头至尾全自动化地测试Android应用程序。由你提供输入的按键或者触摸事件,并且查看结果截图。
回归测试:monkeyrunner可以通过运行一个应用程序并且把它输出的结果截图与已知正确的截图比较的方式测试应用程序的稳定性。
可扩展的自动化:因为monkeyrunner是一套API工具包,你可以基于
Python
模块和程序的开发一个完整的系统来控制Android设备。除了使用monkeyrunner自己的API,你可以使用标准的Pythonos
和subprocess
模块来调用 Android Debug Bridge 等Android工具。你也可以为monkeyrunner API增加自己的类。这个我们会在 Extending monkeyrunner with plugins 栏中讨论到更多的细节。
monkeyrunner工具使用了Jython,一个使用Java编程语言的Python实现。Jython允许monkeyrunner API很容易地与Android framework交互。使用Jython,你可以使用Python语法去访问API常量、类和方法。
一个简单的monkeyrunner程序
这里有一个简单的monkeyrunner程序,它可以连接到一个设备,创建一个 MonkeyDevice
对象。程序中使用 MonkeyDevice
对象安装一个Android应用程序,运行它其中的一个Activity,并且发送一个按键的事件给这个Activity。然后程序把结果截图,创建了一个 MonkeyImage
对象。通过这个对象,程序把截图输出到一个.png
文件中。
# Import 程序所有使用到的monkeyrunner模块
from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
# 连接当前的设备,返回一个MonkeyDevice对象
device = MonkeyRunner.waitForConnection()
# 安装Android应用。注意这个方法返回一个boolean,所以你需要检查是否安装成功
device.installPackage('myproject/bin/MyApplication.apk')
# 把安装文件的内部包名设置到一个变量中
package = 'com.example.android.myapplication'
# 把Activity的完整类名设置到一个变量中
activity = 'com.example.android.myapplication.MainActivity'
# 设置要启动的component名字
runComponent = package + '/' + activity
# 运行该component
device.startActivity(component=runComponent)
# 按下菜单按钮
device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)
# 截图
result = device.takeSnapshot()
# 把截图写入到一个文件中
result.writeToFile('myproject/shot1.png','png')
The monkeyrunner API
monkeyrunner的API处于com.android.monkeyrunner
中,包括三个模块:
MonkeyRunner
:一个包含monkeyrunner程序实用方法的类。这个类提供了一个方法用来把monkeyrunner连接到一个设备或者模拟器。它也提供了方法为monkeyrunner程序创建UI,还有显示内置的help界面。MonkeyDevice
:代表一个设备或者模拟器。这个类提供了一些方法用于安装和卸载应用、启动一个Activity、发送键盘活着触摸事件到一个应用。你也可以使用这个类来运行一个测试应用。MonkeyImage
:代表一个屏幕截图图片。这个类提供了一些方法用于截图、把bitmap图片转换成各种格式,对比两个MonkeyImage对象、还有把图片写入到文件中。
在一个Python程序中,你可以像一个Python模块一样访问每一个类。monkeyrunner工具不会自动帮你import这些模块。import模块的方式是使用Python的from
语句:
from com.android.monkeyrunner import <module>
<module>
就是你希望import的类名。你可以使用同一个的from
语句通过逗号分隔的方式import多个模块。
运行monkeyrunner
你可以从一个文件中运行monkeyrunner程序,也可以在交互会话模式中输入monkeyrunner语句来运行。两者都需要通过调用monkeyrunner
命令进行,你可以在SDK目录下的tools/
子目录下可以找到这些命令。如果你提供了一个文件名作为草书,monkeyrunner命令会把这个文件中的内容作为Python程序来运行,否则,它就是以交互会话的方式运行。
monkeyrunner命令的语法如下:
monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>
表1解释了flags和参数。
Table 1. monkeyrunner
flags和参数。
参数 | 描述 |
---|---|
-plugin <plugin_jar> |
(可选)指定一个.jar 文件作为monkeyrunner的插件。更多monkeyrunner插件学习,见使用插件扩展monkeyrunner。要指定多个文件,那就多次使用这个参数。 |
<program_filename> |
如果你提供了这个参数,monkeyrunner 命令就会把这个文件中的内容作为Python程序运行。如果该参数没有被提供,则它就是以交互会话的方式运行。 |
<program_options> |
(可选)<program_file>中该程序的flags和参数。 |
monkeyrunner内置的Help
你可以通过以下命令生成monkeyrunner的API reference:
monkeyrunner help.py <format> <outfile>
参数是:
<format>
:text
表示纯文本输出,或者html
表示HTML输出。<outfile>
:输出文件的路径。
使用插件扩展monkeyrunner
你可以使用Java编程语言编写你的类并构建到一个或者多个.jar
中来扩展monkeyrunner的API。你可以使用这个特性通过使用你自己的类或者继承已有的类来扩展monkeyrunner API。你也可以使用这个特性来初始化monkeyrunner环境。
要提供一个插件给monkeyrunner,就要调用在monkeyrunner
命令的时候加上表1中所描述的-plugin <plugin_jar>
参数。
在你的插件代码中,你可以import和继承monkeyrunner在com.android.monkeyrunner
中的主要类MonkeyDevice
、MonkeyImage
、和MonkeyRunner
(见The monkeyrunner API)。
注意插件不能让你去访问Android SDK。你不能import像com.android.app
类似的包。因为monkeyrunner是在framework APIs之外与设备或者模拟器交互的。
插件启动类
.jar
插件文件可以指定一个类会在脚本运行之前被初始化。要指定这个类,就要在.jar
文件的manifest中增加一个MonkeyRunnerStartupRunner
属性。它的值应该就是启动时要运行的类的名字。这面这个片段展示了你怎么在ant
build脚本中去设置:
<jar jarfile="myplugin" basedir="${build.dir}">
<manifest>
<attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/>
</manifest>
</jar>
要去访问monkeyrunner的运行时环境,启动类可以实现com.google.common.base.Predicate<PythonInterpreter>
接口。举个例子,这个类在默认的命名空间中设置了一些变量:
package com.android.example;
import com.google.common.base.Predicate;
import org.python.util.PythonInterpreter;
public class Main implements Predicate<PythonInterpreter> {
@Override
public boolean apply(PythonInterpreter anInterpreter) {
/*
* 一个例子使用来在monkeyrunner环境的命名空间中初始化一些变量。
* 在执行期间,monkeyrunner程序可以使用“newtest”和“use_emulator”这些变量
*
*/
anInterpreter.set("newtest", "enabled");
anInterpreter.set("use_emulator", 1);
return true;
}
}
[Android]官网《monkeyrunner》中文翻译的更多相关文章
-
caffe官网的部分翻译及NG的教程
Caffe原来叫:Convolutional Architecture for Fast Feature Embedding 官网的个人翻译:http://blog.csdn.net/fengbing ...
-
Spark官方文档 - 中文翻译
Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...
-
Spark SQL 官方文档-中文翻译
Spark SQL 官方文档-中文翻译 Spark版本:Spark 1.5.2 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 Data ...
-
一劳永逸搭建android开发环境(android官网reference sample api tutorial全下载)
[摘要]本文简单介绍了android开发环境的搭建,重点介绍了SDK manager和AVD升级问题:并提供了android reference,sample,api,及docs的下载信息. [1]为 ...
-
[Android]官网《UI/Application Exerciser Monkey》中文翻译
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5049041.html 翻译自 Android Develope ...
-
[Android]官网《Testing Support Library》中文翻译
以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5048524.html 翻译自 Android Develope ...
-
Docker的官网在线--中文教程
1.官网界面:https://www.docker.com/tryit/ In this 10-minute tutorial, see how Docker works first-hand: Yo ...
-
Spring boot 1.3.5 RELEASE 官方文档中文翻译--目录
说明: 打算利用闲暇时候翻译一下Spring boot的官方文档,翻译的版本是1.3.5 RELEASE. 做这件事的目的呢有四: 国内中文的Spring boot资料实在不多,希望能给后来人一点小小 ...
-
android官网被封掉了,只好用这个网站进谷歌了!嘎嘎
http://developer.android.com/sdk/index.html 这个可以进去,但是必须是搜狐 .360,uc都不用特意FQ http://173.1 ...
随机推荐
-
攻城狮在路上(陆)-- hadoop分布式环境搭建(HA模式)
一.环境说明: 操作系统:Centos6.5 Linux node1 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 ...
-
Unity3D 自定义事件(事件侦听与事件触发)
先来看下效果图,图中点击 Cube(EventDispatcher),Sphere(EventListener)以及 Capsule(EventListener)会做出相应的变化,例子中的对象相互之间 ...
-
为什么移动Web应用程序很慢(译)
前些日子,看到Herb Sutter在自己的博客中推荐了一篇文章<Why mobile web apps are slow>,在推荐里他这样写道: “I don’t often link ...
-
php yii框架使用MongoDb
1.安装 运行 php composer.phar require --prefer-dist yiisoft/yii2-mongodb or add "yiisoft/yii2-mongo ...
-
使用JavaScript判断图片是否加载完成的三种实现方式
有时需要获取图片的尺寸,这需要在图片加载完成以后才可以.有三种方式实现,下面一一介绍. 一.load事件 <!DOCTYPE HTML> <html> <head> ...
-
我的第一本docker书-阅读笔记
花了三四天看完了我的第一本docker书,话说书写的还是挺简单易懂的.与传统的VM,VirtualBox,或者与那种内核虚拟的xen,kvm相比,docker作为一种容器的虚拟方式,以启动进程的方式来 ...
-
Eclipse工具:常用快捷键记录
Eclipse快捷键: 按键操作 按键作用 输入sysout再按下Ctrl+Space System.out.println() Ctrl+1 当某行出错时时,跳出帮 ...
-
【AtCoder】【思维】【置换】Rabbit Exercise
题意: 有n只兔子,i号兔子开始的时候在a[i]号位置.每一轮操作都将若干只兔子依次进行操作: 加入操作的是b[i]号兔子,就将b[i]号兔子移动到关于b[i]-1号兔子现在所在的位置对称的地方,或者 ...
-
JS浮点计算精度问题分析与解决
问题描述 在JS计算四则运算时会遇到精度丢失的问题,会引起诸多问题,看看以下例子: 例如:在chrome控制台输入 0.1 + 0.7 输出结果是 0.7999999999999999 例如:0.1+ ...
-
使用 IntraWeb (12) - 基本控件之 TIWGradButton、TIWImageButton
TIWGradButton.TIWImageButton 分别是有颜色梯度变化按钮和图像按钮. TIWGradButton 所在单元及继承链: IWCompGradButton.TIWGradButt ...