【Android测试】【第六节】Monkey——认识和使用

时间:2022-09-25 22:11:31

版权声明:本文出自carter_dream的博客,转载必须注明出处。

转载请注明出处:http://www.cnblogs.com/by-dream/p/4688880.html

自动化工具


  接触安卓测试最早听说的一个工具就是Monkey,很有意思的名字,当然也很容易学习。

名词解释


  个人推荐,如果有精力的最后还是读一下这个文档:http://developer.android.com/intl/zh-cn/tools/help/monkey.html

  Monkey是一个运行在你手机上的程序,它可以产生一些伪随机事件流,例如点击(clicks)、触摸(touches )、手势(gestures)以及 一些系统级消息(system-level events),你可以用Monkey来对你程序进行随机而又重复的压力测试。(上面提到的伪随机,这里需要解释一下,意思就是看似像是随机的事件,事实上并不是随机的事件,每次启动monkey测试的时候,你可以设置一个随机数种子,如果种子是一致的话,模拟出的随机事件也是一致的,因此这称为伪随机事件。)

  Monkey包含了若干的操作选项,但大体为四个主要的类别:

  1、基本配置选项(Basic configuration options):

  2、操作约束(Operational constraints):

  3、时间类型和频率(Event types and frequencies)

  4、调试选项(Debugging options)

  当Monkey运行起来的时候,它会产生一些事件发给系统,同时它也会监控系统,并且处理下面的三种情况:

  1、如果你用Monkey指定去跑一个或者多个包名(packages),它就会阻止一些试图想进入其他应用的操作事件;

  2、如果你的应用程序 crashes 或者是收到一些未处理的异常(unhandled exception),Monkey就会停止并且记录下出错时候的日志;

  3、日后你的应用程序产生了应用程序无响应的错误(application not responding),Monkey也会停止并且记录下出错时候的日志;

  另外根据你选择的日至级别的详细情况( verbosity level),你可以从日志中看到Monkey运行的一个进展。

基本用法


  Monkey 命令是通过 adb shell 命令行的方式来进行运行的。

  基本的语法格式:

adb shell monkey [options] <event-count>

  输入一个帮助命令:

【Android测试】【第六节】Monkey——认识和使用

命令参数


  可选参数有些多,不知道该从哪里开始讲,突然想到当年刚开始从C++测试转做Android测试的时候,总是想把所有的工具都做成windows应用程序,当年也确实做了一个Monkey的windows工具,可惜最后没用上,刚才又把代码拿出来改了改,刚好能编译过了,我们就通过这个工具来把Monkey的使用分类给看一下吧。

【Android测试】【第六节】Monkey——认识和使用

  一共分为五部分,我们一个一个来看:

  一、测试对象

    首先要确定你的测试对象,这个测试对象可以是一个应用,也可以是的多个应用,或者是整个手机。

    具体的语法是:

adb shell monkey -p 包名

    注意-p后面跟的是应用程序的包名,比如微信的包名是 com.tencent.mm  手Q的包名是 com.tencent.mobileqq。如何获得一个应用的包名,查看攻略

    我们如果想随机测试qq400次,那么命令就是:adb shell monkey -p com.tencent.mobileqq 400

【Android测试】【第六节】Monkey——认识和使用

  二、日志级别

    Monkey中日志分别有三种级别:精简(默认)、普通、详细,上面运行的结果就是默认的精简。

    语法格式是用 “-v” 来表示日志的级别:

    -v 代表 精简;-vv 或者 -v -v 代表 普通;-vvv 或 -v -v -v 代表 详细。

    例如我们还是想随机测试qq400次,但是这次需要日志的级别是详细的,那么命令就是:adb shell monkey -vvv -p com.tencent.mobileqq 400

【Android测试】【第六节】Monkey——认识和使用

  

  三、事件

    事件中的参数seed和throttle用法需要单独说,剩下的都是一类型的事件,待会只举一个例子。

    -s <seed>    用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。

           例如:adb shell monkey -p com.tencent.mm –s 10 100    运行两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以说Monkey是伪随机的。

    --throttle <milliseconds>  用于指定用户操作(即事件)间的时延,单位是毫秒

           例如:adb shell monkey -p com.tencent.mm –throttle 1000 100    每次随机事件中间的间隔时间为1000毫秒,也就是1秒钟

    --pct-touch <percent> 调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。

                 注意percent代表了这个事件占到所有随机事件的百分比数,多个参数指定的时候,加起来的百分比数不能多于100。剩下的几个参数同理:

    --pct-motion <percent>     motion一般代表的是直线滑动,事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成;

    --pct-trackball <percent>   轨迹事件由一个或几个随机的移动组成,有时还伴随有点击;

    --pct-nav <percent>           早期Android手机上的up/down/left/right按键;

    --pct-majornav <percent>  引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键;

    --pct-syskeys <percent>     这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键;

    --pct-appswitch <percent> 在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法;

    --pct-anyevent <percent>   它包含了所有其它类型的事件,如:按键、其它不常用的设备按钮等等

            例如:adb shell monkey -p com.tencent.mm --pct-touch 50 --pct-trackball 30 100    执行100次的随机事件中,有50%的touch事件和30%的轨迹球事件,其他事件随机比例分布。

【Android测试】【第六节】Monkey——认识和使用

 

   四:调试

     这个里面的参数基本上都不会使用,我只讲一个。

     --ignore-crashes  当应用程序发生crash之后,Monkey会停止发送事件,但是如果你加入了这个参数,即使发生了crash,Monkey也不会停止。

               例子:adb shell monkey -p com.tencent.mm --ignore-crashes 100 

   五:次数

     根据前面的那么例子应该知道这个的含义了吧,就是模拟多少次事件,这个和log中也可以对应起来。

【Android测试】【第六节】Monkey——认识和使用

写入脚本,每天执行


  Monkey可以说是一个投入产出比非常高的一个工具,你可以将你的Monkey命令写入到批处理当中,然后晚上走的时候打开Monkey跑一晚上,第二天来了之后查看日志,看应用是否发生了崩溃。

  保存日志的方法和Logcat保存的方法一致,采用重定向的方法,不过你可以把它写到你的 “批处理”脚本中。

【Android测试】【第六节】Monkey——认识和使用

  然后每天直接双击 “Monkey测试.bat” 即可。运行完毕,去C盘下查看结果即可。  

  

【Android测试】【第六节】Monkey——认识和使用的更多相关文章

  1. &lbrack;Android 测试&rsqb; 压力稳定性测试之&colon; Monkey 详解分析脚本&lpar;转载&rpar;

    一.什么是稳定性测试? 通过随机点击屏幕一段时间,看看app会不会奔溃,能不能维持正常运行. 二. Money是什么? Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模 ...

  2. Python3 Selenium自动化web测试 &equals;&equals;&gt&semi; 第六节 WebDriver高级应用 -- 操作web页面的滚动条

    学习目的: 掌握页面元素定位以外的其他重要知识点. 正式步骤: 测试Python3代码 # -*- coding:utf-8 -*- from selenium import webdriver fr ...

  3. 【Android测试】【第九节】MonkeyRunner—— 初识

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/4836815.html 不得不说两句,过了这么久才再次更新博 ...

  4. 【Android测试】【第十七节】Instrumentation——App任你摆布(反射技术的引入)

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/5569844.html 前言 学习了上节之后,大家是否已经 ...

  5. monkey测试&equals;&equals;&equals;Android测试工具Monkey用法简介(转载)

    Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压力测试.Monkey ...

  6. Android测试-monkey

    好久以前搞过monkey,最近看了一个monkey+日志录制的一个分享,准备自己也搞一下. monkey的doc文档: https://developer.android.google.cn/stud ...

  7. 【Android测试】【第十五节】Instrumentation——官方译文

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5482207.html 前言 前面介绍了不少Android ...

  8. 【Android测试】【第一节】ADB——初识和用法

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处.  转载请注明出处:http://www.cnblogs.com/by-dream/p/4630046.html 写在前面的话 感觉自己进入Andr ...

  9. 【Android测试】【随笔】获得App的包名和启动页Activity

    ◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5157308.html 前言 经常看到一些刚刚接触Andro ...

随机推荐

  1. 【C&num;进阶系列】28 基元线程同步构造

    多个线程同时访问共享数据时,线程同步能防止数据损坏.之所以要强调同时,是因为线程同步问题实际上就是计时问题. 不需要线程同步是最理想的情况,因为线程同步一般很繁琐,涉及到线程同步锁的获取和释放,容易遗 ...

  2. Maven基础知识和环境搭建

    基本概念和生命周期 Maven是现在流行的构建自动化工具,提供了软件构建过程中全生命周期的管理. 基础目录结构 基础目录结构如下: 根目录:存放pom.xml 和所有的子目录 ${basedir}/s ...

  3. 头文件intrins&period;h

    intrins.h 在C51单片机编程中,头文件INTRINS.H的函数使用起来,就会让你像在用汇编时一样简便. 内部函数 描述 _crol_ 字符循环左移   _cror_ 字符循环右移   _ir ...

  4. mvc mvp mvvm区别

    1 mvc是有视图(view),控制器(controller),模型(model)组成 view(用户界面) controller (业务逻辑)            model(数据存储) 接受指令 ...

  5. CKEditor 案例

    官网下载: http://ckeditor.com/download 将下载的ckeditor整个文件放入项目中 在页面中引用ckeditor.js,并用新建一个<textarea>再建一 ...

  6. 定义 &colon; angular view 和controller 之前的 ng-init 由谁来负责

    在设计view时,会需要default的值,这是会去下ng-init,但是如果发现ng-init没有,这时controller就会有. 概念是当ctrl要用时,就由ctrl负责.

  7. linux的大小端、网络字节序问题 &period;

    1.80X86使用小端法,网络字节序使用大端法. 2.二进制的网络编程中,传送数据,最好以unsigned char, unsigned short, unsigned int来处理, unsigne ...

  8. win7下JAVA环境变量配置方法

    1.首先,根据自己的需要下载1.6或者1.7的JDK,安装JDK.(安装的时候记一下安装目录,后面会用到) 2.右键计算机→属性→高级系统设置→高级→环境变量,在系统变量部分新建名为"JAV ...

  9. 查找-&gt&semi;静态查找表-&gt&semi;分块查找&lpar;索引顺序表&rpar;

    文字描述 分块查找又称为索引顺序查找,是顺序查找的一种改进方法.在此查找算法中,除表本身外, 还需要建立一个”索引表”.索引表中包括两项内容:关键字项(其值为该字表内的最大关键字)和指针项(指示该子表 ...

  10. 什么是CSS hack&quest;

    1.什么是CSS hack? CSS hack是通过在CSS样式中加入一些特殊的符号,让不同的浏览器识别不同的符号(什么样的浏览器识别什么样的符号是有标准的,CSS hack就是让你记住这个标准),以 ...