什么是 Monkey

  Monkey 是一个 Android 自动化测试小工具。主要用于Android 的压力测试, 主要目的就是为了测试app 是否会Crash.

Monkey 特点

  顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲。通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。

Monkey程序介绍

  Monkey 程序是由 Android 系统自带,使用 Java 语言写成。在Android文件系统中的存放路径是: /system/framework/monkey.jar;

  Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;

  Monkey 启动方式:在 cmd 命令提示符里面输入命令行来启动 monkey 测试。

一、Monkey简介:
Monkey是Android中的一个命令行工具,可以运行在模拟器里或者现实设备中,向系统发送伪随机的用户事件流(点击、滑动、Application切换、横竖屏、应用关闭)实现对正在开发的应用程序进行压力测试。monkey测试是一种为了测试软件的稳定性,健壮性的快速有效的方法。只针对Activity做测试,不能对Service做测试。

二、质量要求:
版本release(发布)前,Monkey跑出来的结果中crash要为0,final release前,Monkey跑完的总次数应为25W,结果里不允许有nullPointException出现。

三、Monkey命令参数:
1>  -p
用于约束限制,用此参数指定一个或者多个包,指定包之后,monkey将只允许启动指定app,如果不指定包,monkey将启动系统中所有的app 。

  1. 例:指定一个包 monkey -p com.htc.weather -v
  2. 指定多个包 monkey -p com.htc.weather -p com.htc.pdfreader -p com.htc.photo.widgets -v
  3. 不指定包 monkey -v

2>  -v

用于指定反馈的信息级别(日志的详细程度),分为三个级别,级别越高,日志越详细。

  1. level
  2.  
  3. 例:monkey -p com.htc.weather -v
  4.  
  5. level :
  6. 例:monkey -p com.htc.weather -v -v
  7. level :
  8. 例:monkey -p com.htc.weather -v -v -v

3> -s

指定伪随机数生成器的seed值,如果seed相同,则两次monkey 测试产生的事件序列也相同。

  1. monkey -p com.htc.weather -s -v

4> --throttle(毫秒)

制定每个事件结束后的间隔时间,降低系统压力。(如果不指定系统会尽快的发送事件序列)

  1. monkey --throttle

5> 定制事件

  1. --pct-touch:指定触摸事件的百分比,例:--pct-touch % , 其他相关的:
  2. --pct-motion <percent> (滑动事件)
  3. --pct-trackball <percent> (轨迹球事件)
  4. --pct-nav <percent> (导航事件 up/down/left/right
  5. --pct-majornav <percent> (主要导航事件 back key menu key)
  6. --pct-syskeys <percent> (系统按键事件 Home Back startCall endCall volumeControl)
  7. --pct-appswitch <percent> activity之间的切换)
  8. --pct-anyevent <percent>(任意事件)

6>调试选项

  1. --dbg-no-events:初始化启动的activity,但是不产生任何事件。
  2. --hprof:指定该项后在事件序列发送前后会立即生成分析报告 —— 一般建议指定该项。
  3. --ignore-crashes:忽略崩溃
  4. --ignore-timeouts:忽略超时
  5. --ignore-security-exceptions:忽略安全异常
  6. --kill-process-after-error:发生错误后直接杀掉进程
  7. --monitor-native-crashes:跟踪本地方法的崩溃问题
  8. --wait-dbg:知道连接了调试器才执行monkey测试。

四、使用示例:(本例测试环境Android studio+模拟器Nexus_5_API_23)

  1. >首先配置Android环境,要使用虚拟机测试的话,还要创建模拟器(真机测试就不用管)。
  2. >进入平台工具,我的platform-tools在下图所示路径
  3. Android studio自带的命令行(或者是cmd)里输入以下命令
  4.  
  5. >启动模拟器(执行adb devices命令可以列出已连接的设备),安装待测试apk
  6. 先把apk放在platform-tools文件夹下,执行命令: adb install 文件名.apk
  7. >找到应用程序的主Activity所在的包名,分别执行以下命令:

ls命令执行之后从列出的包名中找到要测试的apk的主Activity的包名。

5>使用monkey进行自动化测试

  1. monkey -p 包名 -v

五、测试结果分析:

1.

  

2.

3.

4.

5>测试完成,没有crash和exception出现的情况

6>测试中间出现crash或者exception,monkey停止会打印相关错误信息。

六、monkey测试停止条件(也可以在命令里设置出现这些停止条件后可以继续跑完测试数量)
1>如果先顶了Monkey运行在一个或几个特定的包上,那么它会检测试图转到它包的操作,并对其进行阻止;

2>如果应用程序崩溃或接收到任何失控异常,Monkey将停止并报错;

3>如果应用程序产生了应用程序不响应(application not responding)的错误,Monkey将会停止并报错。

通过多次并且不同设定下的Monkey测试才算它是一个稳定性和健壮性足够的程序。

七、为保证测试数量的完整进行,一般不会在发生错误时立刻退出压力测试。monkey 测试命令如下
adb shell monkey -p 包名 -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 10000

八、把log导出到本地
这里分为两种情况:
1.如果我们没有进入到shell则直接执行命令:
adb shell monkey -p 包名 -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 10000 > E:\monkey_log\test1.txt

2.
如果已经进入adb shell,正确的导出步骤:(在前边我们执行完adb shell命令之后,进入shell命令相当于进入Linux的root下面,没有权限在里面创建文件。)
执行exit命令退出shell

然后执行adb shell monkey -p 包名 -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v -v 10000 > E:\monkey_log\test1.txt

Android自动化测试--monkey总结的更多相关文章

  1. Android 自动化测试——Monkey测试

    Android自带了很多方便的测试工具和方法,包括我们常用的单元测试.Robotium测试.Monkey测试.MonkeyRunner测试.senevent模拟等.这些方法对于我们编写高质量的APP十 ...

  2. Android自动化测试基础知识——MONKEY测试工具(转的)

    本周开始启动手机输入法simeiji的自动化测试,同时开始接触手机浏览器自动化测试.接下来会对android自动化测试工具和方法做一个专题研究. 第一篇介绍monkey测试工具. 1 自动化测试背景 ...

  3. 解放双手——Android自动化测试

    解放程序猿宝贵的右手(或者是左手) http://blog.csdn.net/eclipsexys/article/details/45622813 --Android自动化测试技巧 Google大神 ...

  4. Android自动化测试框架对比

    1.Monkeyrunner:优点:操作最为简单,可以录制测试脚本,可视化操作:缺点:主要生成坐标的自动化操作,移植性不强,功能最为局限:2.Rubotium:主要针对某一个APK进行自动化测试,AP ...

  5. android之monkey测试

    本文同时发表于本人个人网站 www.yaoxiaowen.com monkey测试算是android自动化测试当中最简单的一种工具了.虽然简单,不过对于测试app的稳定健壮,减少崩溃还是比较有用的.所 ...

  6. Android 自动化测试框架

    Android常用的自动化测试工具框架: Monkey,MonkeyRunner,UIAutomator,Robotium,Appium,Monkey Talk...... 但这些工具框架都是什么呢有 ...

  7. 133、 Android 自动化测试(转载)

    Android 自动化测试--要点概括http://blog.csdn.net/vshuang/article/details/40595233 A/B测试与灰度发布http://blog.csdn. ...

  8. Robotium原理初步--Android自动化测试学习历程

    章节:自动化基础篇——Robotium原理初步(第四讲) 主要讲解内容与笔记: 一.基于控件 1.spinner——下拉菜单 2.TabHost——左右滑动选择菜单,类似电话本 3.Gallery—— ...

  9. 【转】Android自动化测试(UiAutomator)简要介绍

    一.一个BUG引发的问题   如果研发过程中有一个BUG:“不断的切换手机语言出现花屏现象”.这个问题我们如何验证呢?我想,最好的方式应该是自动化测试.    那么,自动化测试可以完成哪些任务呢?  ...

随机推荐

  1. 如何利用python教程判断一个 IP 在不在线?

    假设今天老板给我们一个任务,让我们判断一下一个 IP 在不在线.我们随手用 python 写一个 ping IP 的代码: import os host = input('请输入要检测的 IP : ' ...

  2. Qualification Rounds(Codeforces Round #438 by Sberbank and Barcelona Bootcamp (Div. 1 + Div. 2 combined)+状态压缩)

    题目链接 传送门 题意 现总共有\(n\)个题目\(k\)支参赛队伍,已知每个题目各队伍是否会写,现问你能否从题目中选出一个子序列使得每支队伍最多只会写一半的题目. 思路 对于每个题目我们用二进制压缩 ...

  3. 更改DHCP服务器默认日志存储位置

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种有效的IP 地址分配手段,已经广泛地应用于各种局域网管理.它能动态地向网络中每台计算机分配唯一 ...

  4. bat echo 每行不同的颜色

    bat echo 每行不同的颜色 先看代码: @echo off SETLOCAL EnableDelayedExpansion for /F "tokens=1,2 delims=#&qu ...

  5. luoguP2768: 珍珠项链(矩阵乘法优化DP)

    题意:有K种珍珠,每种N颗,求长度为1~N的项链,包含K种珍珠的项链种类数.N<=1e9, K<=30; 思路:矩阵快速幂,加个1累加前缀和即可. #include<bits/std ...

  6. test201909027 老Z

    30+100+40=170.数据出锅*2,也是没谁了. 装饰 快要到 Mope 的生日了,Mope 希望举行一场盛大的生日派对. 派对的准备工作中当然有装饰房间啦.Mope 的房间里有按从左到右的顺序 ...

  7. Vue --- 项目创建

    目录 创建Vue项目之前的准备 创建Vue项目 重新构建项目 项目目录介绍 项目的生命周期 Vue文件式组件 配置自定义全局样式 路由逻辑跳转 生命周期钩子 路由传参的两种方式 创建Vue项目之前的准 ...

  8. window对象(全局对象)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 【笔记】ROS常用命令

    环境相关 查看当前环境下包含的包路径echo $ROS_PACKAGE_PATH查看包含的包的路径roscd package TF树相关 查看所有坐标系的状态rosrun tf tf_monitor ...

  10. 优雅关闭web服务的方式

    优雅关闭web服务 DBHelper, err = gorm.Open("mysql", "root:root@(115.159.59.129:3306)/test?ch ...