近期在复习之前的笔记,在回想MonkeyRunner时看了看google官网的内容,写得不错。就翻译出来分享下。事实上google官网真是一个学习的好地方。

基础知识

MonkeyRunner工具提供了一个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工具。

您还能够向MonkeyRunnerAPI中加入您自己的类。我们将在后面会对此进行具体讨论。

MonkeyRunner工具使用Jython(使用Java编程语言的一种Python实现)。Jython同意MonkeyRunner API与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')

MonkeyRunner 的API

MonkeyRunner 在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  <程序文件名称> <程序选项>
  • -plugin : (可选)指定一个内含MonkeyRunner插件的.jar文件。欲了解很多其他关于monkeyrunner插件的内容。參考下文。要指定多个文件。能够多次使用此參数。

  • <程序文件名称>: 假设您指定此參数,MonkeyRunner将视文件内容为Python程序并予以执行。

    假设此參数未予指定,则开启一个交互式会话。

  • <程序选项>:(可选)<程序文件名称>中所指定的程序所需的參数。

MonkeyRunner提供帮助

您能够用下面命令来生成monkeyrunner的API參考:

monkeyrunner  help.py 

參数说明:

能够为text或html。分别代表纯文本和HTML输出。

指定了输出文件的全路径名称。

使用插件扩展MonkeyRunner

您能够用Java语言创建新的类,并打包成一个或多个.jar文件。以此来扩展 MonkeyRunner API。

您能够使用您自己写的类或者继承现有的类来扩展MonkeyRunner API。

您还能够使用此功能来初始化MonkeyRunner环境。

为了使MonkeyRunner载入一个插件。您应当如使用如前面所述的-plugin參数来调用MonkeyRunner命令。

在您编写的插件中,您能够导入或继承位于com.android.monkeyrunner包中的几个基本的monkeyrunner类:MonkeyDevice, MonkeyImage和MonkeyRunner。

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

插件启动类

用于插件的.jar文件能够指定一个类,使其在脚本执行之前就实例化。如欲指定这个类,您须要在.jar文件的manifest中加入键 MonkeyRunnerStartupRunner。

其值为启动时执行的类的名称。

下面代码段显示了怎样在一个ant构建脚本达到这种目的:

<jar jarfile="myplugin" basedir="${build.dir}">
<manifest>
<attribute name="MonkeyRunnerStartupRunner" value="com.myapp.myplugin"/>
</manifest>
</jar>

如欲訪问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开发有非常大帮助。

最新文章

  1. 移动WEB像素相关知识
  2. 使用curl进行https请求
  3. 如何用MediaCapture解决二维码扫描问题
  4. HDU 2085 核反应堆 --- 简单递推
  5. [转]WPF 获取程序启动路径
  6. asp.net 中给gridview添加自动序号
  7. sublime text3安装、注册及常用插件
  8. dede表前缀不定时,查询表#@__archives
  9. ubuntu启动报/root/.profile mesg:ttyname failed错误的解决办法
  10. day18
  11. 根据要求写SQL 语句
  12. day_10 py
  13. hadoop mapreduce 简单例子
  14. 轻博客类Web原型制作分享——Tumblr
  15. Centos7 安装redis服务
  16. Docker实战(八)之Web服务与应用
  17. NCPC 2016 October 8,2016 Artwork
  18. centos安装sqlserver
  19. 4.querystring属性
  20. Oracle XE自带数据库创建的过程

热门文章

  1. 元组Tuple、数组Array、映射Map
  2. 一键生成Spring MVC + MyBatis + maven项目
  3. 正则表达式 \D 元字符
  4. 3星|《腾讯产业森林:AI时代的创业密码》:后半部分是较详细的创业指南,前面泛泛介绍腾讯、AI
  5. logback日志配置文件
  6. 使用selenium实现模拟淘宝登陆
  7. odoo 权限杂记
  8. pyhton 网络爬取软考题库保存text
  9. 解决WP程序 重复打开出现 “正在加载...” 字样 解决方案
  10. 造成segment fault,产生core dump的可能原因