zoukankan      html  css  js  c++  java
  • 第5章1节《MonkeyRunner源码剖析》Monkey原理分析-启动运行: 官方简介(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写《深入理解 MonkeyRunner》书籍“。但因为诸多原因,没有如愿。所以这里把草稿分享出来,所以错误在所难免。有需要的就参考下吧,转发的话还请保留每篇文章结尾的出处等信息。

    在MonkeyRunner的框架中,Monkey是作为一个服务来接受来自MonkeyRunner客户端发送过来的命令,然后针对每条命令请求进行相应的处理,所以它并不是作为一个随机压力测试的工具来运作。本书中的Monkey原理描述也不会把重点放在其作为压力测试工具这个方面,而是主要放在它是怎么作为MonkeyRunner的一个服务上。我相信这样已经足够了,因为这两种不同的运行方式只是事件的来源不一样而已,比如直接提供命令行参数选项运行时候的事件源是来自于Monkey自身的算法产生的伪随机事件流;而作为MonkeyRunner服务运行时候的事件源是来自网络MonkeyRunner客户端发送过来的字串格式事件命令。只要了解清楚来自网络的事件源在Monkey中是怎么处理的,那么就可以以点带面很快熟的清楚来自其他事件源的处理方式了。

    这个小节中我们先看下来自Google官方对Monkey的简要介绍,好让没有接触过的读者有个基本的概念,这样才方便我们往下进行分析。

    Monkey是一个运行在Android目标机器的一个应用,是一个基于命令行的应用界面测试工具,它可以独立的运行。根据用户提供的参数,它会根据算法自动生成不同用户事件的伪随机流来驱动测试的进行,比如点击,触控,手势,以及一些系统级别的事件,然后把这些事件发送到Android操作系统来触发事件的发生。用户可以使用Monkey来对你正在开发的应用以一种随机但可复用的方式进行压力测试。

    Monkey支持一系列的参数选项来运行,但总的来所可以把这些选项划分成以下四个基本类别:

    • 基本配置选项: 比如配置将要测试的事件的数量
    • 运行约束选项: 如设置只对单独的一个包进行测试
    • 事件类型和频率:比如手势事件占所有随机产生事件的30%,点击占50%,触控占20%
    • 调试选项

    在Monkey运行的时候,它将会根据输入选项生成相应的事件,然后把它们注入到安卓操作系统。同时Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理:

    • 如果设置了约束,限定了Monkey运行在一个或几个指定的包上,那么它会捕获并阻止试图浏览到其它包的操作
    • 如果应用程序崩溃或接收到任何没有处理的异常,Monkey将停止运行并报告相应的错误
    • 如果应用程序产生了“应用程序没有响应”的错误, Monkey将停止运行并报告相应的错误

    根据用户选定的不同级别的反馈信息,用户可以看到Monkey的执行进度以及事件正在生成的进度。

    用户可以通过在开发机器上的命令行或脚本来启动Monkey。由于Monkey运行在安卓模拟器/设备环境中,所以必须在其shell环境中启动。可以通过在每条命令前加上”adb shell”来实现,也可以在进入Shell后直接输入Monkey命令。基本语法如下:

    $ adb shell monkey [options] 

    如果不指定任何选项(options),Monkey将以静默模式启动,并会把事件发送到Android目标机器上已经安装的所有应用的任意一些包。以下是一个更典型的示例,它启动指定的应用程序,并向其发送500个伪随机事件:

    $ adb shell monkey -p your.package.name -v 500

    以下列出网上同行翻译的Monkey支持的所有选项以供参考,我这里就不做重造轮子的事情了:

    表5-1-1 Monkey命令行选项 
    表5-1-1 Monkey命令行选项 
    表5-1-1 Monkey命令行选项2 
    表5-1-1 Monkey命令行选项3 
    表5-1-1 Monkey命令行选项4 
    表5-1-1 Monkey命令行选项5

    ——— 未完待续———


    作者:天地会珠海分舵 
    微信公众号:TechGoGoGo 
    微博:http://weibo.com/techgogogo 
    CSDN:http://blog.csdn.net/zhubaitian

  • 相关阅读:
    Java 8 CompletableFuture思考
    Math.ceil 笔记
    Python virtual env
    Reactive Stream: 如何将两个数据流接到一起,然后进行操作
    基于Apollo实现.NET Core微服务统一配置(测试环境-单机)
    在ASP.NET Core 2.x中获取客户端IP地址
    Entity Framework Core(3)-配置DbContext
    .NET Core2.1下采用EFCore比较原生IOC、AspectCore、AutoFac之间的性能
    Entity Framework Core 入门(2)
    Entity Framework Core介绍(1)
  • 原文地址:https://www.cnblogs.com/techgogogo/p/4356101.html
Copyright © 2011-2022 走看看