入门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说明了标志和参数。
争论 | 描述 |
---|---|
-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类 MonkeyDevice
,MonkeyImage
和MonkeyRunner
在com.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;
}
}