入门monkeyrunner2-monkeyrunner官方文档第一部分

  该monkeyrunner工具提供了编写控制Android设备或仿真器从Android的代码之外程序的API。随着monkeyrunner,您可以编写安装一个Android应用程序或测试包,运行它,发送击键它,需要它的用户界面截图,并将截图工作站上的Python程序。该monkeyrunner工具主要设计在功能/框架水平和运行单元测试套件来测试应用程序和设备,但你可以自由地将其用于其它用途。

  所述monkeyrunner工具是不相关的 用户界面/应用程序训练器猴,也被称为工具。在猴子的工具在运行 ADB壳设备或仿真器上直接生成的用户和系统事件的伪随机流。相比较而言,monkeyrunner工具控制设备和仿真器从工作站通过从API发送特定命令和事件。

该monkeyrunner工具为Android的测试,这些独特的功能:

  • 多设备控制:monkeyrunner API可以跨多个设备或仿真器应用一个或多个测试套件。您可以物理连接的所有设备或启动了所有的仿真器(或两者兼有)同时,连接到每一个轮流程序,然后运行一个或多个测试。您也可以启动一个模拟器配置编程,运行一个或多个测试,然后关闭模拟器。
  • 功能测试:monkeyrunner可以运行Android应用程序的自动启动到完成测试。您提供的输入值与键盘或触摸事件,并查看结果的截图。
  • 回归测试 - monkeyrunner可以运行一个应用程序,并比较其输出截图一组被称为是正确的截图测试应用程序的稳定性。
  • 可扩展的自动化-由于monkeyrunner是一个API工具包,你可以开发基于Python模块和控制Android设备程序的整个系统。除了 ​​使用monkeyrunner API本身,你可以使用标准的Python OS和  模块的调用Android的工具,比如 Android的调试桥

    您也可以添加自己的类的monkeyrunner API。此进行更详细的部分中所述 扩展monkeyrunner与插件

  该monkeyrunner工具使用的Jython,使用Java编程语言实现的Python。的Jython允许monkeyrunner API与Android框架轻松互动。使用Jython,您可以使用Python语法来访问常量,类和API的方法。

一个简单的monkeyrunner程序


  这里是一个连接到设备,创造了一个简单的monkeyrunner程序 MonkeyDevice 对象。使用MonkeyDevice目的,程序将安装一个Android应用程序包,运行其的活动之一,并发送键事件到活性。然后程序需要的结果的截图,创建 MonkeyImage对象。从这个对象,程序写出来的.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

  • MonkeyRunner:一类为monkeyrunner程序的实用方法。这个类提供了用于连接monkeyrunner至设备或模拟器的方法。它也提供了用于创建用户界面的monkeyrunner程序和用于显示内置帮助的方法。
  • MonkeyDevice:表示一个设备或模拟器。这个类提供了安装和卸载程序包,启动一个活动以及发送键盘或触摸事件到应用程序的方法。您也可以使用这个类来运行测试包。
  • MonkeyImage:表示一个屏幕捕获图像。这个类提供了捕捉屏幕,将位图图像,以各种不同的格式,比较两个MonkeyImage对象,写一个图像文件的方法。

  在一个Python程序,您访问的每个类的Python模块。该monkeyrunner工具不会自动导入这些模块。要导入模块,使用Python 语句:

  from com.android.monkeyrunner import <module>

  

  其中,<模块>是要导入的类名。你可以在同一个导入多个模块声明用逗号分隔的模块名称。

运行monkeyrunner


  您可以从文件运行monkeyrunner程序,或在交互式会话中输入monkeyrunner语句。您可以通过调用一举两得monkeyrunner是在发现的命令工具/你的SDK目录的子目录。如果你提供一个文件名 ​​作为参数,则monkeyrunner命令运行该文件的内容作为一个Python程序; 否则,它会启动一个交互式会话。

  所述的语法monkeyrunner命令是

  monkeyrunner -plugin <plugin_jar> <program_filename> <program_options>

  表1说明了标志和参数。

  表1 monkeyrunner标志和参数。

争论描述
-plugin <plugin_jar> (可选)指定的.jar包含插件monkeyrunner文件。要了解更多关于monkeyrunner插件,请参阅 扩展monkeyrunner与插件要指定多个文件,包括参数多次。
<program_filename> 如果你提供这个参数,monkeyrunner命令运行文件作为一个Python程序的内容。如果没有提供参数,该命令启动一个交互式会话。
<program_options> (可选)标志和参数在<program_file>程序。

monkeyrunner内建帮助


  您可以生成monkeyrunner通过运行API参考:

  monkeyrunner help.py <format> <outfile>

  

  这些参数是:

  • <格式>可以是文本的纯文本输出或HTML的HTML输出。
  • <OUTFILE>是输出文件的路径限定名称。

扩展monkeyrunner与插件


  你可以扩展你的Java编程语言编写类的monkeyrunner API构筑成一个或多个的.jar文件。您可以使用此功能将monkeyrunner API扩展与自己的类或扩展现有的类。您也可以使用此功能来初始化monkeyrunner环境。

  为了提供一个插件monkeyrunner,调用monkeyrunner用命令 -plugin <plugin_jar>中所描述的参数 表1

  在你的插件代码,你可以导入和扩展的主要monkeyrunner类 MonkeyDeviceMonkeyImageMonkeyRunnercom.android.monkeyrunner(见的monkeyrunner API)。

需要注意的是插件不给你访问到Android SDK。你不能导入软件包,如com.android.app。这是因为monkeyrunner与设备或仿真器下方的框架的API的水平相互作用。

该插件启动类

  该的.jar文件的插件可以指定一个以前脚本处理开始实例化一个类。要指定这个类,添加键值 MonkeyRunnerStartupRunner的.jar文件的清单。值应该是在启动时运行的类的名字。下面的代码片段展示了如何将内做到这一点蚂蚁构建脚本:

<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) {

        /*
        * 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;
    }
}
posted @ 2014-12-08 20:35  Mr.Dantes  阅读(567)  评论(0编辑  收藏  举报