近期在复习之前的笔记,在回想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开发有非常大帮助。

android測试工具MonkeyRunner--google官网翻译的更多相关文章

  1. Android性能測试 一些适用于Android Studio的代码审查和性能測试工具

    导言: Android应用在CPU占用,内存消耗方面的性能指标是影响产品质量的重要因素,因为QQ管家,360手机助手等应用都提供直观的内存消耗,流量监控功能,致使用户比以往更加关注软件的性能,并以此进 ...

  2. Android自己主动化測试之Monkeyrunner用法及实例

    眼下android SDK里自带的现成的測试工具有monkey 和 monkeyrunner两个.大家别看这俩兄弟名字相像,但事实上是完全然全不同的两个工具,应用在不同的測试领域.总的来说,monke ...

  3. Android測试APP工具(一)

    近期面试APP开发者的时候,遇到了技术总监问 APP測试的概念性问题.后面感觉主要的项目流程.项目逻辑.屏幕适配. 測试是全然没有问题的.可是对于APP的性能測试.压力測试等高端的測试.还是存在着美中 ...

  4. 移动測试技术保护源码!解码全球首款移动端白盒測试工具ThreadingTest (文章转自己主动点科技)

    作者 智晓锋 - 2014/07/14 自从斯诺登曝光美监听丑闻事件之后,我国政府就将信息安全问题上升到了国家安全的高度.基于此.国内的一家创业公司推出了智能型Android真机白盒測试以及开发辅助类 ...

  5. (4.5.4)Android測试TestCase单元(Unit test)測试和instrumentationCase单元測试

    Android单元和instrumentation单元測试 Developing Android unit and instrumentation tests Android的单元測试是基于JUnit ...

  6. Linux 性能測试工具

    Linux 性能測试工具 linux performance 查看系统配置 查看CPU信息 lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64- ...

  7. php性能优化(一)压力測试工具篇

    ab使用 Apache附带的压力測试工具ab,很easy使用,而且全然能够摸你各种条件对Webserver发起測试请求.ab能够直接在Webserver本地发起測试请求.这对于须要了解server的处 ...

  8. UnityTestTools測试工具

    由于工作关系,要了解Unity上的測试工具,该工具基于Nunit框架.通过查阅资料了解到在Unity5.3中做出了一些改变,自带的仅仅剩下单元測试工具,假设想用其它的工具比方断言.集成測试,就须要前往 ...

  9. ubuntu 14.04 LTS 安装webbentch压力測试工具

    近期在做 压力測试工具,除了apache的ab測试工具外,发现webbentch工具也不错,这里简介下这两个工具. 一.webbentch安装: wget http://blog.s135.com/s ...

随机推荐

  1. 363 Max Sum of Rectangle No Larger Than K 最大矩阵和不超过K

    Given a non-empty 2D matrix matrix and an integer k, find the max sum of a rectangle in the matrix s ...

  2. 11 在C#中写文件

    在这个练习中,我们来学习如何把我们想要的东西写到文件中.我们在这个练习中还是使用File类中的方法来完成写文件的操作. 在这个练习中我们要用C#创建一个纯文本文件ex11.txt 放到c盘的Exerc ...

  3. 电源管理POWER_SUPPLY_PROP_CAPACITY_LEVEL

    电量计节点中有capacity_level 节点,这个是反应当前电池电流高低水平的参数. 分为critical low full normal 一般是由fg的芯片来判断,通过IIC读取,具体判断可参考 ...

  4. css学习笔记---盒模型,布局

    1.外边距叠加 当一个元素出现在另一个元素上面时第一个元素的底边距与第二个元素的上边距发生叠加,元素被包含时也有可能会发生叠加(如果没有内边距和边框),如果一个空元素没有内边距和边框本身也会发生上下边 ...

  5. Java我来了

    七天的C#集训,第一天接触Java,觉得很多相似的地方,尝试用eclipse码了几句(有些差别,毕竟没有写C#那么流畅),总体来说觉得还不错,对自己接下来要求是,更加熟练并且牢记Java的命令,更加深 ...

  6. python读取单个文件操作

    python读取单个文件,参考<笨方法学python>的第15节. 运行方式是采用:python python文件名 要读取的文件名 代码中 script, filename = argv ...

  7. 【转载】HTTP 响应头与状态码

    原文地址:https://segmentfault.com/a/1190000006689786 HTTP Response Header 响应头域允许服务器传递不能放在状态行的附加信息,这些域主要描 ...

  8. OpenGL第23-26小结

    到后面代码相对而言比较复杂了,因为没有系统的看红宝书(就跟字典一样,兴趣缺缺),很多操作的步骤比较迷糊. 23讲讲解了如何将环境纹理贴在球体.圆柱体等非矩形物体表面,从而达到一个反射周围景色的效果(恩 ...

  9. haproxy故障处理

    1. haproxy 在配置健康检查的时候,默认没有配置页面检查 ,通过端口状态来检测.后端IIS web服务开始可能 是一个站点,或者采用了基于域名的配置方式,导致目前站点停了,后端主机不能被hap ...

  10. TCP:三次握手,URG、ACK、PSH、RST、SYN、FIN 含义

    http://blog.csdn.net/wudiyi815/article/details/8505726 TCP:SYN ACK FIN RST PSH URG简析   三次握手Three-way ...