monkeyrunner 工具提供了一个 API,用于编写可从 Android 代码外部控制 Android 设备或模拟器的程序。使用 monkeyrunner,您可以编写 Python 程序来安装 Android 应用或测试软件包,运行该应用或软件包,向其发送模拟击键,截取其界面的屏幕截图,并将屏幕截图存储到工作站中。monkeyrunner 工具主要用于在功能/框架级测试应用和设备以及运行单元测试套件,但您也可以自由地将其用于其他目的。

monkeyrunner 工具与 UI/Application Exerciser Monkey(即 monkey 工具)无关。monkey 工具直接在设备或模拟器上的

monkeyrunner 工具为 Android 测试提供了以下独特功能:

多设备控制:monkeyrunner API 可以跨多个设备或模拟器应用一个或多个测试套件。您可以通过物理方式一次连接所有设备并/或启动所有模拟器,以编程方式依次连接到每个设备或模拟器,然后运行一个或多个测试。您也可通过编程方式启动模拟器配置,运行一个或多个测试,然后关闭模拟器。

功能测试:monkeyrunner 可以对 Android 应用运行完全自动化的测试。您可以通过模拟击键或轻触事件提供输入值,并以屏幕截图的形式查看结果。

回归测试 - monkeyrunner 可通过以下方法测试应用的稳定性:运行某个应用,然后将它的输出屏幕截图与一组已知正确的屏幕截图进行比较。

可扩展的自动化 - 由于 monkeyrunner 是一个 API 工具包,因此您可以开发一整套系统(包括基于 Python 的模块和用于控制 Android 设备的程序)。除了使用 monkeyrunner API 本身,您还可以使用标准 Python Android 调试桥。

此外,您也可以将自己的类添加到 monkeyrunner API 中。使用插件扩展 monkeyrunner 部分中对此进行了更详细的介绍。

monkeyrunun 工具使用 Jython,这是一种使用 Java 编程语言的 Python 实现。Jython 使 monkeyrunner API 能与 Android 框架轻松交互。借助 Jython,您可以使用 Python 语法访问 API 的常量、类和方法。

一个简单的 monkeyrunner 程序

下面介绍了一个简单的 monkeyrunner 程序,该程序会连接到一台设备,并创建一个 MonkeyDevice 对象安装 Android 应用软件包,运行其中一个 Activity,并向该 Activity 发送按键事件。然后,该程序会截取结果的屏幕截图,并创建一个 .png 文件。

# Imports the monkeyrunner modules used by this program

from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice

# Connects to the current device, returning a MonkeyDevice object

device = MonkeyRunner.waitForConnection()

# Installs the Android package. Notice that this method returns a boolean, so you can test

# to see if the installation worked.

device.installPackage('myproject/bin/MyApplication.apk')

# sets a variable with the package's internal name

package = 'com.example.android.myapplication'

# sets a variable with the name of an Activity in the package

activity = 'com.example.android.myapplication.MainActivity'

# sets the name of the component to start

runComponent = package + '/' + activity

# Runs the component

device.startActivity(component=runComponent)

# Presses the Menu button

device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)

# Takes a screenshot

result = device.takeSnapshot()

# Writes the screenshot to a file

result.writeToFile('myproject/shot1.png','png')

monkeyrunner API

monkeyrunner API 包含在 com.android.monkeyrunner 软件包的三个模块中:

在 Python 程序中,您可以将每个类作为 Python 模块来使用。monkeyrunner 工具不会自动导入这些模块。要导入模块,请使用 Python from 语句:

from com.android.monkeyrunner import

其中 是要导入的类名称。您可以在同一个 from 语句中导入多个模块,只需用英文逗号分隔各模块名称即可。

运行 monkeyrunner

您既可以通过文件运行 monkeyrunner 程序,也可以在交互式会话中输入 monkeyrunner 语句。您可以通过调用 monkeyrunner 命令(位于 SDK 目录的 tools/ 子目录中)来执行这两项操作。如果您以参数的形式提供文件名,monkeyrunner 命令会将文件的内容作为 Python 程序运行;否则,它会启动一个交互式会话。

monkeyrunner 命令的语法为

monkeyrunner -plugin

表 1 对其中的标志和参数进行了说明。

表 1. monkeyrunner 标志和参数。

参数

说明

-plugin

(可选)指定包含 monkeyryrunner 插件的 .jar 文件。如需详细了解 monkeyrunner 插件,请参阅使用插件扩展 monkeyrunner。如需指定多个文件,请多次添加该参数。

如果您提供此参数,monkeyrunner 命令会将文件的内容作为 Python 程序运行。如果未提供此参数,该命令将启动交互式会话。

(可选)该程序在 中的标志和参数。

monkeyrunner 内置帮助

您可以通过运行以下命令为 monkeyrunner 生成 API 参考文档:

monkeyrunner help.py

参数如下:

为 text(对于纯文本输出)或 html(对于 HTML 输出)。

是输出文件的路径限定名称。

使用插件扩展 monkeyrunner

您可以使用以 Java 编程语言编写的类扩展 monkeyrunner API,并将其构建为一个或多个 .jar 文件。您可以借助此功能使用自己的类扩展 monkeyrunner API,或扩展现有的类。您还可以使用此功能初始化 monongxununner 环境。

如需为 monkeyrunner 提供插件,请在调用 monkeyrunner 命令时使用表 1 中所述的 -plugin 参数。

在插件代码中,您可以在 com.android.monkeyrunner 中导入和扩展 monkeyrunner 主类 MonkeyDevice、MonkeyImage 和 MonkeyRunner(请参阅 monkeyrunner API)。

请注意,插件不会授予您对 Android SDK 的访问权限。您无法导入 com.android.app 等软件包。这是因为 monkeyrunner 会与低于框架 API 级别的设备或模拟器交互。

插件启动类

插件的 .jar 文件可以指定在脚本处理开始之前实例化的类。如需指定此类,请将键 MonkeyRunnerStartupRunner 添加到 .jar 文件的清单中。该值应为启动时运行的类的名称。以下代码段展示了如何在 ant 构建脚本中执行此操作:

如需访问 monkeyrunner 的运行时环境,启动类可以实现 com.google.common.base.Predicate。例如,此类会在默认命名空间中设置一些变量:

Kotlin

package com.android.example

import com.google.common.base.Predicate

import org.python.util.PythonInterpreter

class Main: Predicate {

override fun apply(anInterpreter: PythonInterpreter): Boolean {

/*

* 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

}

}Java

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 java_monkeyrunner相关推荐

  1. monkeyrunner java_monkeyrunner简介

    monkeyrunner简介 MonkeyRunner工具是使用Jython(使用Java编程语言实现的Python)写出来的,它提供了多个API,通过monkeyrunner API 可以写一个Py ...

  2. monkey命令_何小伟:Monkey与MonkeyRunner区别

    为了支持黑盒自动化测试的场景,Android SDK提供了monkey和monkeyrunner两个测试工具,这两个测试工具除了名字类似外,还都可以向待测应用发送按键等消息,往往容易产生混淆,以下是他 ...

  3. 老李推荐:第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发 1...

    老李推荐:第14章4节<MonkeyRunner源码剖析> HierarchyViewer实现原理-装备ViewServer-端口转发 在初始化HierarchyViewer的实例过程中, ...

  4. MonkeyRunner实例及使用说明

    文章转自: http://www.ishow.me/2013/02/06/1035/.html 了解了MonkeyRunner,现在上一个简单的实例(理论支持所有Android设备^_^),向左滑动屏 ...

  5. MonkeyRunner的使用二

    MonkeyRunner可以用来做自动化测试,在Android中做动态分析的时候也可以使用它来做行为触发. 不过感觉使用MonkeyRunner来做行为触发还是很局限的.就比如我想实现外界向模拟器拨打 ...

  6. MonkeyRunner 的使用一

    MonkeyRunner的使用 如果您的英语不错那您可以自己看官网的介绍,如果您需要翻译,其实网上有很多很好的翻译,但是为了学习的完整性,自己还是做了一些重复性的劳动. http://develope ...

  7. [转] android自动化之MonkeyRunner测试环境配置(一)

    Android自动化测试之MonkeyRunner 一.Android自动化测试之环境搭建 1.1  Android-sdk介绍 ¢ SDK(Software development kit)软件开发 ...

  8. 老李推荐:第5章5节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 获取系统服务引用 1...

    老李推荐:第5章5节<MonkeyRunner源码剖析>Monkey原理分析-启动运行: 获取系统服务引用 上一节我们描述了monkey的命令处理入口函数run是如何调用optionPro ...

  9. 【转】monkeyrunner学习总结二:连接、安装、启动

    一.获取packageName与startActivity 前置条件:已成功安装配置SL4A并连接PC调试(参见:monkeyrunner学习总结一:环境搭建:http://www.amsoft.cn ...

最新文章

  1. 关于 Python 3.9,那些你不知道的事
  2. 安防企业如何应对市场发展新机遇
  3. Py之any函数【转载】
  4. 通话录音_iOS14,通话录音终于来了!
  5. 多站点IIS的架设:端口法
  6. centos安装最新版的docker-ce(二进制安装)
  7. .Net与 WebAssembly 随笔
  8. 三维重建笔记_SLAM简介
  9. AD09铺铜 (画完PCB后改线与铺铜冲突)
  10. 基于嵌入式linux电子相册代码,基于嵌入式ARM_Linux的电子相册设计方案.docx
  11. Scope参数错误或没有Scope权限解决方法
  12. 美国音乐学院计算机音乐专业排名2015年,美国音乐学院排名
  13. STM32:使用外部中断控制对射式红外传感器并计次
  14. 白鹭小游戏-成语挑战-资源放置
  15. Python3.5 使用 protobuf3.0.0.beta2
  16. 报Warning如下: Warning: The CUDA driver must recompile the GPU librariesbecause your device is more rec
  17. 【图像加密】基于混沌系统的图像加密解密matlab源码含GUI
  18. 是CEE、DCB、DCE还是EEDC?
  19. 如何成为数字化人才?
  20. CUDA: 程序优化的15个策略

热门文章

  1. flutter - 编写 阿里云-金融级实名认证插件
  2. 什么是Portlet
  3. MCC MNC 什么意思
  4. Container killed by the ApplicationMaster, Exit code is 143
  5. DNA聚合酶基因扩增QPCR实验
  6. microsoft jscript 缺少对象
  7. FFT原理与实现(代码)
  8. vue 自定义弹窗组件
  9. android星星评分,Android星星评分控件RatingBar的使用
  10. python串口类_Python中serial的使用