monkey:环境搭建&执行分析(一)

JDK + SDK 

1【概述】

什么是Monkey?

顾名思义,Monkey就是猴子,  Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。  猴子什么都不懂, 只知道乱敲

 Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上。 Monkey会发送伪随机的用户事件流,如按键输入、触摸屏输入、手势输入等,实现对正在开发的应用程序进行压力测试, 主要目的就是为了测试app 是否会Crash。

支持android真机测试(如下)、android模拟器测试。

**Monkey测试出crash的bug等级永远为1,版本发布前,Monkey跑出的结果中crash要为0。 

业内标准:最终发布版本前,Monkey跑完的总次数不少于25W次,其结果里不允许有nullPointException出现。** 


Monkey在哪里?

每台android手机里都有Monkey工具,但是我们是看不到的,因为,Monkey不是一个可视化的工具,例如手机里的微信,这是一个可视化的,能打开,有图形化界面,但是Monkey没有。


手机里如何与Monkey进行通讯?

借助ADB才能与Monkey进行通讯。


什么是ADB?

       Android Debug Bridge,安卓调试桥

adb在这里
原理

【环境搭建】jdk+sdk 

1、jdk 1.8 ---https://blog.csdn.net/u014166319/article/details/71791287

JAVA_HOME = D:\ProgramFiles\Java\jdk1.8.0_141

Path = ;%JAVA_HOME%\bin

CLASSPATH = .;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar

验证:java -version

2、sdk ---http://pan.baidu.com/s/1nt8BcBB

ANDROID_SDK_HOME = D:\ProgramFiles\android-sdk-windows

Path = ;%ANDROID_SDK_HOME%\platform-tools;%ANDROID_SDK_HOME%\tools

验证:adb version

2【执行压力测试】:adb shell mokey -p num --x-x

准备工作:

准备:打开开发者选项, 启用USB调试; 

检测:查看下电脑能否连接上手机 :adb shell 或adb devices ,然后exit退出

安装:adb install D:\apk\lingdaotong.apk

查包名:先启动,然后adb shell dumpsys window w |findstr \/ |findstr name=  (查看所有包名:adb shell pm list packages)

卸载:adb uninstall com.topevery.ldt

重启手机:adb reboot

当有一个模拟器和一个真实的手机连接的时候(如果连接多个设备或多个虚拟机,则可通过  “-s + 编号”  识别)

//进入模拟器 C:\Users\Administrator>adb -e shell,如  adb -e shell monkey -p com.topevery.ldt 1000 --ignore-crashes --ignore-timeouts (模拟器容易crash)

//进入手机 C:\Users\Administrator>adb -d shell,如  adb -d shell monkey -p com.topevery.ldt 1000 --ignore-crashes --ignore-timeouts

不指定包:adb shell monkey 1000 (执行结束 --> ## Network stats: elapsed time=11834ms (0ms mobile, 0ms wifi, 11834ms not connected))--注意随机用户操作事件数1000都会放在最后(所有选项的最后)

指定包:adb shell monkey -p com.topevery.ldt 1000 (正常情况是不出现error,如 Monkey aborted due to error.)

黑白名单(不能同时设置黑名单和白名单)

设置黑名单(不测试的应用):--pkg-blacklist-file PACKAGE_BLACKLIST_FILE

设置白名单(只测试这部分应用):--pkg-whitelist-file PACKAGE_WHITELIST_FILE

设置指令之间的时间间隔:adb shell monkey -p com.topevery.ldt  --throttle 1000  1000  ( “--throttle 1000 ”  每个指令之间时间间隔为1000毫秒,即1秒)。---如在事件无法第一时间得到响应时采取等待。

(bug复现方法)重复上次随机操作参数 seed参数:adb shell monkey -p com.topevery.ldt  -s xxxx --throttle 1000  1000    (“-s xxxxx ”  seed参数为xxxx)

//Monkey最大的特点就是伪随机。之所以加个“伪”字,是因为该随机事件可进行复现。 我们每次执行一组随机事件,系统都会给一个随机的ID,称之为seed。

 如:** System appears to have crashed at event 45 of 1000 using seed 1533900947952 ,若想复现该错误,将该组随机事件再次执行一遍,则使用-s+seed+count即可。

        即:adb shell monkey -p com.topevery.ldt -s 1533900947952 45--throttle 1000  1000  ( "-s 1533900947952 45"  上次的执行日志:Monkey: seed=1533833917909 count=45)

触摸事件参数百分比设定:adb shell monkey -p com.topevery.ldt --pct-touch 50 1000  (“--pct-touch 50 ” 百分之五十的事件为触摸事件. 动作事件是--pct-motion,共12类,各类随机事件的比例可自定义)。事件指令详见https://blog.csdn.net/daihuimaozideren/article/details/77529345

 Monkey所执行的随机事件流中包含11大事件,

(0):触摸事件百分比,即参数--pct-touch   ---> 即在某一位置的Down-Up(手指的放下和抬起)。

(1):手势事件百分比,即参数--pct-motion  ---> 以Down开始,Up结尾的move动作事件。

(2):缩放事件百分比,即参数--pct-pinchzoom  ---> 

(3):轨迹球事件百分比,即参数--pct-trackball  --->  即单纯的Move。

(4):屏幕旋转事件百分比,即参数--pct-rotation  ---> 

(5):基本导航事件百分比,即参数--pct-nav  --->  即来自于方向输入设备的上下左右操作。

(6):主要导航事件百分比,即参数--pct-majornav  ---> 即Navigation Bar的确认,菜单,返回键等。

(7):系统事件百分比,即参数--pct-syskeys  ---> 即系统保留按键,如HOME键,BACK键,拨号键,挂断键,音量键等。

(8):activity启动事件百分比,即参数--pct-appswitch  --->  应用activity启动事件。

(9):键盘翻转事件百分比,即参数--pct-flip  ---> 

(10):其他事件百分比,即参数--pct-anyevent  ---> 其他未提及事件,可能包含上述其他时间。

忽略崩溃  忽略ANR(Application Not Responding)  即使出现了也会继续跑 (这个一般都会加上的):adb shell monkey -p com.topevery.ldt --ignore-crashes --ignore-timeouts 1000

崩溃范例
无响应案例

kill 正在执行的monkey进程:重新打开一个cmd >adb shell

c5pltechn:/ $ ps|grep monkey

shell    5768  17494 1519840 55640 binder_thr a9bbf70c S com.android.commands.monkey

c5pltechn:/ $ kill 5768

3【大而全】

: adb shell monkey -p com.xxx --throttle 1000 --pct-touch 25 --pct-motion 20 --pct-pinchzoom 5 --pct-trackball 5 --pct-rotation 5 --pct-nav 10 --pct-majornav 10 --pct-syskeys 10 --pct-appswitch 10 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes --monitor-native-crashes -v -v -v 10000 >D:\apk\monkeyLog.txt

  (>D:\apk\monkeyLog.txt  terminal显示的执行结果存放在该文件中)

--ignore-crashes 忽略程序崩溃。设置此选项后,Monkey会执行完所有的事件,不会因crash而停止。

--ignore-timeouts 忽略程序无响应。设置此选项后,Monkey会执行完所有的事件,不会因ANR而停止。

--ignore-security-exceptions 忽略证书或认证异常。设置此选项后,Monkey会执行完所有的事件,不会因认证或证书异常而停止。

--ignore-native-crashes 监视系统中本地代码发生的崩溃

--monitor-native-crashes 忽略本地代码导致的崩溃。设置忽略后,Monkey将执行完所有的事件,不会因此停止。

-v -v –v 提供最详细的设置信息,用于指定反馈信息级别,总共分为level 0、level 1、level 2三个级别,级别越高,输出的日志越详细。其他选项可以百度。

>表示文件覆盖打印;>>表示文件尾部打印

5【结果分析】

 测试结果有两个我们需要重点关注解决的, crash 崩溃、 ANR(  Application Not Response  响应超时)。

1)ANR(Application Not Response):程序无响应,一般主线程超过5秒没处理就会出现ANR错误。通过搜索ANR关键词来定位关键的事件信息。adb shell 进入手机-->cd /data/anr/   ---->ls  ---->more traces.txt  就可以查看了,里面记录了所有应用的anr信息

       一般是主线程的响应超过5秒,或者BroadcastReceiver没有在10秒内作出响应。这个就是一个比较严重的缺陷。把耗时的操作另起线程来处理就可以了。

2)ForceClosed或其他异常退出信息:通过搜索Fatal关键词来定位。内存泄露问题搜索"GC"(需进一步分析)

3)崩溃问题:通过搜索Exception关键词来定位。(如果出现空指针, NullPointerException,需格外重视)

4)发生异常后,通过搜索Crash关键词来定位到详细的堆栈信息。

5) 其他异常

    A、Restart System异常(系统重新启动),即log信息的最后几行会看到Restart System的打印信息,说明手机被自动的重启或断掉,有几个方面的原因

        //运行过程中,存在异常手机被自动重启

        //手机在运行过程中,进入设置中的恢复出厂设置,导致手机重启

    B、RuntimeException等异常,同样的会在plog.log中可以看到相应的打印信息, java.lang.RuntimeException该问题多出现在操作无响应之后,或者是某应用的服务无法启动或连接时,需要具体问题具体的分析

    C、StaleDataException、readException等异常, 在plog.log中可以看到相应的打印信息,也会有相应的信息: android.database.StaleDataException,该信息说明android的数据库操作出现异常, 需要具体问题具体的分析

    D、IllegalArgumentException等异常,多少情况下为说明向函数传递了一个不正确或不合法的参数需要具体问题具体的分析

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容

  • 一、monkey介绍 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送...
    小_小_桂阅读 981评论 0 53
  • Monkey 参数介绍 一、 什么是Monkey Monkey是Android中的一个命令行工具,可以运行在模拟器...
    DanHei様阅读 1,467评论 0 2
  • monkey 介绍 Monkey是Google提供的一个用于稳定性与压力测试的命令行工具。可以运行在模拟器或者实际...
    望月成三人阅读 14,516评论 2 12
  • 我这个人身上有个奇怪的特质,就是哪门学科学的好,和老师的关系就一般,哪门学科学的不好,和老师的关系就好。像数...
    娇兔儿阅读 815评论 0 0
  • 有没有哪个瞬间是你回忆起来觉得是明知道回不去了,但仍然想要去追忆的? 大学之前,对大学生活是充满期待的。 高中之前...
    馒头爱豆包阅读 171评论 0 0