zoukankan      html  css  js  c++  java
  • android測试工具MonkeyRunner--google官网翻译

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

  • 相关阅读:
    C++隐式推导-auto关键词
    git的几种实用操作(合并代码与暂存复原代码)
    CPU的后记,程序员的未来之计
    CPU中的程序是怎么运行起来的
    nginx-日志切割
    Linux里面使用navicat连接MySQL数据显示2002-Can't connect to local MysQL serverthrough socket'/var/lib/mysq/mysql.sock'(13"权限不够")
    Cacti图形中的方框乱码解决办法
    Cacti1.2.14最新版安装和配置(详细版)
    ERROR 1419 (HY000) at line 9: You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
    Linux服务器查看对应网卡的网口
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7124419.html
Copyright © 2011-2022 走看看