Monkey是google提供的一款对Android app进行压力测试工具,基于随机坐标位置,进行点击、滑动、输入等操作.

Monkey的环境配置

  1. pc电脑需要配置adb环境
  2. Monkey程序由Android系统自带,使用Java语言写,在Android文件系统中的存放路径是:/system/framework/monkey.jar
  3. Monkey.jar程序是由一个名为"monkey"的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径:/system/bin/monkey

常用命令介绍

官方文档

https://developer.android.com/studio/test/monkey

help

adb shell monkey -help 打印参数帮助信息

out:
usage: monkey [-p ALLOWED_PACKAGE [-p ALLOWED_PACKAGE] ...]
[-c MAIN_CATEGORY [-c MAIN_CATEGORY] ...]
[--ignore-crashes] [--ignore-timeouts]
[--ignore-security-exceptions]
[--monitor-native-crashes] [--ignore-native-crashes]
[--kill-process-after-error] [--hprof]
[--pct-touch PERCENT] [--pct-motion PERCENT]
[--pct-trackball PERCENT] [--pct-syskeys PERCENT]
[--pct-nav PERCENT] [--pct-majornav PERCENT]
[--pct-appswitch PERCENT] [--pct-flip PERCENT]
[--pct-anyevent PERCENT] [--pct-pinchzoom PERCENT]
[--pct-permission PERCENT]
[--pkg-blacklist-file PACKAGE_BLACKLIST_FILE]
[--pkg-whitelist-file PACKAGE_WHITELIST_FILE]
[--wait-dbg] [--dbg-no-events]
[--setup scriptfile] [-f scriptfile [-f scriptfile] ...]
[--port port]
[-s SEED] [-v [-v] ...]
[--throttle MILLISEC] [--randomize-throttle]
[--profile-wait MILLISEC]
[--device-sleep-time MILLISEC]
[--randomize-script]
[--script-log]
[--bugreport]
[--periodic-bugreport]
[--permission-target-system]
COUNT

p

查看当前app包名命令:
adb shell "dumpsys window |grep mCurrent"
adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p'

adb shell monkey -p com.test.android(app包名)
启动包名是com.test.android的app进行monkey测试.

COUNT

db shell monkey -p com.test.android (COUNT)

COUNT是需要Monkey执行的总共事件数.

v

adb shell monkey -p com.test.android -v 

adb shell monkey -p com.test.android -v -v -v 

v是设置日志级别,默认是一个

如需更详细的日志可以加多个-v,最多3个

s

adb shell monkey -p com.test.android(app包名) -s (随机种子)

s表示一个随机种子,必须是数字类型.可以用于两次monkey测试,第二次monkey回归第一次monkey测试出来的bug,指定的随机种子是一样的.
那么两次操作的事件操作基本一致.需要说明的是,随机种子仅仅的是操作是一样的,有些app启动以后会有弹框或者其他引导提醒,那么这样不能保证两次操作的路径是完全一样,需要手工去除
伪随机数生成器的 seed 值,通俗的说就是个标记,后面跟数字,例如:执行adb shell monkey -s -p 包名 事件总数,这个我标记了-s ,命令操作完之后,我发现有日志报错,我想重新执行这个monkey操作,那你就可以继续执行这个命令,排错时常用

throttle

adb shell monkey -p com.test.android --throttle  

throttle表示两次操作之间的延迟,单位是毫秒.因为实际模拟器用户操作并不一定要操作很快,所以500ms延迟到1000ms接近用户的真实使用.
减速的意思,后面接时间,单位为ms,,表示事件之间的固定延迟,如果不接该项,monkey将不会延迟

randomize-throttle

adb shell monkey -p com.test.android --throttle  --randomize-throttle 

randomize-throttle表示每次事件的间隔在0到500毫秒之间不固定

pct

--pct-touch {+百分比}:
触摸,触摸事件泛指发生在某一位置的一个down-up事件,点击
--pct-motion {+百分比}:
动作,动作事件泛指从某一位置接下(即down事件)后经过一系列伪随机事件后弹出(即up事件)
--pct-pinchzoom {+百分比}:
二指缩放,智能机上的放大缩小手势操作事件
--pct-trackball {+百分比}:
轨迹,轨迹事件包括一系列的随机移动,以及偶尔跟随在移动后面的点击事件
--pct-rotation {+百分比}:
屏幕旋转,横屏竖屏事件
--pct-nav {+百分比}:
基本导航,基本导航事件主要来自方向输入设备的上、下、左、右事件
--pct-majornav {+百分比}:
主要导航,主要导航事件通常指引发图形界面的一些动作,如键盘中间按键、返回按键、菜单按键等
--pct-syskeys {+百分比}:
系统按键,系统按键事件通常指仅供系统使用的保留按键,如HOME键、BACK键、拨号键、挂断键、音量键等
--pct-appswitch {+百分比}:
应用启动,应用启动事件(activity launches)即打开应用,通过调用startActivity()方法最大限度地开启该package下的所有应用
--pct-flip {+百分比}:
翻转,键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
--pct-anyevent {+百分比}:
翻译其他类型,其他类型事件指上文中未涉及的所有其他事件,如keypress、不常用的button等 adb shell monkey -p com.test.android --pct-touch --pct-motion

ignore-crashes

adb shell monkey -p com.test.android --ignore-crashes 

ignore-crashes表示运行monkey中,遇到crash会忽略,继续执行后续的操作.

ignore-timeouts

adb shell monkey -p com.test.android --ignore-timeouts 

ignore-timeouts表示运行monkey中,遇到ANR会忽略,继续执行后续的操作.

ignore-native-crashes

adb shell monkey -p com.test.android --ignore-native-crashes  

ignore-native-crashes表示忽略monkey本身的异常,直到事件执行完毕

monkey测试中,如何终止运行:

方法一:

  • 新建一个窗口
  • 执行: adb shell ,
  • 再执行ps | grep monkey,返回来的第一个数字,即是monkey的进程号
  • 然后kill pid 进程号

方法二:

  • 对手机进行重启
  • 新建一个窗口
  • 执行adb reboot

log日志导出

保存到电脑上

  • 例如:保存到电脑上并命名为monkey.txt
adb shell monkey -p 包名 -v  > /Users/X/Desktop/monkey.txt
  • 例如:保存到电脑上标准流与错误流分开保存,分别命名为info.txt,error.txt
  • nfo.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时发送的各种事件,如触摸事件的位置等等
  • error.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时产生的一些ANR、强制关闭等异常。 执行
adb shell monkey -p 包名 -v  >/Users/X/Desktop/info.txt >/Users/weixiangyang/Desktop/error.txt

参考:

https://testerhome.com/topics/15966

https://testerhome.com/topics/12013

http://shark.farbox.com/post/xing-neng-ce-shi/monkeyyong-fa-zong-jie

小白Monkey学习笔记的更多相关文章

  1. monkey学习笔记

    Monkey一. Monkey 是什么?Monkey是Android中的一个命令行工具,它其实就是SDK中附带的一个工具,可以运行在模拟器里或实际设备中. 二.Monkey 测试的目的?Monkey测 ...

  2. SQL注入常用函数(注入小白的学习笔记)

    在盲注的情况下,往往需要一个一个字符的去猜解,即过程中需要截取字符串 在这里整理了一下一些常用函数 由于现阶段学习不够深入,整理分类不清楚具体,不过博主会慢慢进行完善 user() 查询当前数据库用户 ...

  3. day04关于MySqL—Android小白的学习笔记

    Mysql入门 1. 数据库基本知识(了解) 1.1.数据库介绍 1.1.1.什么是数据库?数据库的作用是什么? 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户 ...

  4. Monkey学习笔记<四>:Monkey服务器命令

    #使用如下命令将本地pc和手机连接起来 adb shell monkey --port 1080 adb forward tcp 1080:tcp 1080 telnet localhost 1080 ...

  5. Monkey学习笔记<五>:检查内存泄露

    1.分析内存泄漏工具与命令 1)HPROF文件:HPROF可以监控CPU使用率,堆分配统计 2)MAT工具:下载地址(http:www.eclipse.org/mat/) 3)生成HPROF文件命令: ...

  6. Monkey学习笔记<三>:Monkey脚本编写

    我们都知道Monkey是向手机发送伪随机事件流,但是有时候我们需要实现特定的事件流,这时候我们可以用Monkey脚本来实现. 通过对monkey的API研究发现,我们可以通过-f这个参数来实现monk ...

  7. Monkey学习笔记(一)

    (一)adb相关命令语句: 1. 查看连接设备信息:adb devices 2.安装app到手机上:adb install [-r]  [apk文件存在地址].apk 3.将文件放入设备/模拟器:ad ...

  8. day05 java JDBC案例—Android小白的学习笔记

    1.要从键盘录入用户名与密码我们需要使用Scanner类完成操作 2.接收到用户名与密码后,我们需要调用jdbc程序根据用户名与密码查询数据库 User.java package com.superg ...

  9. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

随机推荐

  1. C语言的三目运算符(x=a?b:c):条件运算符

    三目运算符使用是为了有条件判断的选择赋值 x = a ? b : c 先计算 a表达式 是否为真.若为真,x 的值便是 b表达式的值,否则 x的值便是 c表达式的值. 条件运算符是右结合的. 如:a ...

  2. [转]真正的中国天气api接口xml,json

    转自:http://blog.csdn.net/fancylovejava/article/details/26102635 我只想说现在网上那几个api完全坑爹有木有??? 官方的申请不来有木有,还 ...

  3. 小强学渲染之Unity Shader编程HelloWorld

    第一个简单的顶点vert/片元frag着色器   1)打开Unity 5.6编辑器,新建一个场景后ctrl+s保存命名为Scene_5.默认创建的场景是包含了一摄像机,一平行光,且场景背景是一天空盒而 ...

  4. gym 101982 B题 Coprime Integers

    题目链接:https://codeforces.com/gym/101982/attachments 贴一张图吧: 题目意思就是给出四个数字,a,b,c,d,分别代表两个区间[a,b],[c,d],从 ...

  5. 一些matlab命令

    expand: R = exprnd(MU) returns an array of random numbers chosen from the exponential distribution w ...

  6. C# 线程获取/设置控件(TextBox)值

    线程读写控件需要用委托(delegate)与Invoke/BeginInvoke来进行 参考内容:http://www.cnblogs.com/runner/archive/2011/12/30/23 ...

  7. windows server 2012 远程桌面不好使

    下面的文章里讲的比较详细 http://www.hfkehu.cn/thread-4382-1-1.html 我遇到的问题是第一种,因为是刚装的机器,刚连上网时,选择如下设置时,因为鼠标一点别的地方, ...

  8. angular ViewChild ContentChild 系列的查询参数

    官方说明 官方文档 在调用 NgAfterViewInit 回调函数之前就会设置这些视图查询. 元数据属性: selector - 用于查询的指令类型或名字. read - 从查询到的元素中读取另一个 ...

  9. laraval migration 新增字段或者修改字段的方法

    1.进入项目根目录执行artisan命令生成migration文件,可以指定--table和--path参数,会在对应目录下生成migration文件. php artisan make:migrat ...

  10. install pycurl

    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1src/pycurl.h:164:28: fatal error: ope ...