开发者社区> 咕噜不爱猫> 正文

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

简介: 以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/5050768.html 翻译自 Android Developer 官网:http://developer.android.com/tools/help/monkeyrunner_concepts.html monkeyrunner monkeyrunner工具提供了一套API,在不通过Android代码的情况下编写程序来控制一个Android设备或者模拟器。
+关注继续查看


以下内容为原创,欢迎转载,转载请注明
来自天天博客: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工具与也被称为monkeyUI/Application Exerciser Monkey没有任何关系。Monkey工具是直接在adb shell中运行,通过在设备或者模拟器中产生伪随机流的用户和系统事件的方式。比较之下,monkeyrunner工具在一个工作站中通过API发送指定的命令和事件来控制设备和模拟器。

monkeyrunner工具提供了以下这些在Android测试中独一无二的特性:

  • 多设备控制:monkeyrunner可以应用在一个或者多个测试套件跨越多个设备和模拟器。你可以在物理层面上一次性attach所有的设备或者启动所有的模拟器(或者两者都有),按照程序依次连接上每一个,然后运行一个或者多个测试。

  • 功能性测试:monkeyrunner可以运行从头至尾全自动化地测试Android应用程序。由你提供输入的按键或者触摸事件,并且查看结果截图。

  • 回归测试:monkeyrunner可以通过运行一个应用程序并且把它输出的结果截图与已知正确的截图比较的方式测试应用程序的稳定性。

  • 可扩展的自动化:因为monkeyrunner是一套API工具包,你可以基于Python模块和程序的开发一个完整的系统来控制Android设备。除了使用monkeyrunner自己的API,你可以使用标准的Python ossubprocess模块来调用 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> (可选)中该程序的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中的主要类MonkeyDeviceMonkeyImage、和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;
    }
}

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Hystrix-开源容错系统(上)
开年第一篇文章来自于京东的小伙伴,希望这篇文章能够帮助大家对熔断和降级有所理解。
5 0
JavaScript 各版本介绍和特性
JavaScript 1.1 Netscape Navigator 3.0在1996年8月19发布,是支持JavaScript的浏览器的第二个主要的版本。
6 0
Node.js 安装和入门
什么是 Node? Node(正式名称 Node.js)是一个开源的、跨平台的运行时环境,有了它,开发人员可以使用 JavaScript 创建各种服务器端工具和应用程序。此运行时主要用于浏览器上下文之外(即可以直接运行于计算机或服务器操作系统上)。据此,该环境省略了一些浏览器专用的 JavaScript API,同时添加了对更传统的 OS API(比如 HTTP 库和文件系统库)的支持。
5 0
Hystrix-开源容错系统(下)
Hystrix-开源容错系统(下)
4 0
HTTP访问控制(CORS)
跨域资源共享(CORS) 是一种机制,它使用额外的 HTTP 头来告诉浏览器 让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。
3 0
C语言基础知识(三)-程序设计结构、数组、字符串处理函数(上)
程序设计是什么 顺序结构 实例 1.首先生成一个随机的四位数整数。 2.拆分这个四位整数,获得其各位上的数字。 选择结构 最简单的if语句 if实例 语句块 if else语句 if else实例 多个if else语句 if else语句的嵌套 switch case语句 switch 语句的执行流程 循环结构 循环控制语句 while 循环 实例 do while 循环 实例 while语句和do-while语句的互换 while和do-while小结 for循环 实例 for循环语句的嵌套
5 0
D3 不到20行代码就能实现世界地图的绘制
每到农历年末,相信很多小伙伴和本作者一样,都忍不住会去看江苏卫视的一档脑力比拼节目《最强大脑》,尽管上一季最强大脑喷点确实很多,但依旧没有减弱"追剧"的热情。今年最强大脑(第5季)的赛制有很大的变化,挑战的人数从百人大战,到最强30脑,再到现从第三场的一对一PK,确实与以往有了很大的不同。此外,今年更加强调了选手在生活中的光环,例如本文要引用的一场比赛就是最近一期来自清华的孙勇与北京的陈泽坤的一场以地图投影为背景的比赛,孙勇就是顶着2016安徽省高考理科状元的光环来的。今年没了叨叨魏,节目的流程显得自然了很多。好了,不扯了,来、来、来来来!我们开始说本文要讲的主题--地图。
4 0
Zuul技术分享
ZUUL是Netflix开源的微服务网关,它可以和Eureka、Ribbon、Hystrix等组件配合使用,Zuul组件的核心是一系列的过滤器,这些过滤器可以完成以下功能: 动态路由:动态将请求路由到不同后端集群 压力测试:逐渐增加指向集群的流量,以了解性能 负载分配:为每一种负载类型分配对应容量,并弃用超出限定值的请求 静态响应处理:边缘位置进行响应,避免转发到内部集群 身份认证和安全: 识别每一个资源的验证要求,并拒绝那些不符的请求。Spring Cloud对Zuul进行了整合和增强。 Spring Cloud对Zuul进行了整合和增强
4 0
BTrace 入门教程
很久没发文了,不知道小伙伴们是不是忘记我们了?主要是最近我和znlover在利用业余时间开发一款小程序,一直没时间写文章,小程序目前在内测阶段,在接下来的时间,我们会持续更新文章。在此,给支持我们的读者说声谢谢,感谢你们一直在默默支持我们。
1 0
一款实用的 GitHub Actions 小工具:Gitee Pages Actions
使用 GitHub Pages 时,每当项目有更新,GitHub 会自动帮我们重新部署 GitHub Pages。对于国内的 Gitee Pages,一般情况下无法自动部署,除非我们开通 Gitee Pages Pro 功能。而 Pro 功能的开通,需要满足以下其中一个条件
2 0
+关注
咕噜不爱猫
博客:http://www.cnblogs.com/tiantianbyconan/ Github:https://github.com/wangjiegulu
134
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
OceanBase 入门到实战教程
立即下载
阿里云图数据库GDB,加速开启“图智”未来.ppt
立即下载
实时数仓Hologres技术实战一本通2.0版(下)
立即下载