Monkey 入门指南

Monkey 入门指南

  • 一、monkey环境搭建
  • 1.1下载adb工具

操作步骤:

第一步:进入链接https://www.androiddevtools.cn/#下载下图中的包

Monkey 入门指南_第1张图片

第二步:解压压缩包

Monkey 入门指南_第2张图片

1.2配置环境变量

操作步骤:

第一步:右击我的电脑,查看属性,然后在弹出的界面点击“高级系统设置”

第二步:点击“环境变量”

Monkey 入门指南_第3张图片

 

第三步:找到path,点击编辑按钮

Monkey 入门指南_第4张图片

第四步:点击新建,添加platform-tools的路径到环境变量,如下图所示

Monkey 入门指南_第5张图片

第五步:点击确定按钮并退出

 

1.3环境验证

1.3.1adb环境验证

操作步骤:

第一步:打开cmd,输入adb

Monkey 入门指南_第6张图片

 

第二步:输入adb monkey

Monkey 入门指南_第7张图片

 

1.3.2连接真机

使用前提:

1 手机是可以正常使用的

2 使用的数据线必须是可以传输数据的(比如:购买充电宝所赠送的数据线只可以充电,不支持数据传输)

 

操作步骤:
第一步:usb刚连手机时会有弹窗“是否允许访问手机数据”,点击允许,打开通知导航栏,会显示“使用usb传输文件”,如果不是,则手动选择;

Monkey 入门指南_第8张图片  Monkey 入门指南_第9张图片

                               

第二步:打开开发者选项中的允许usb调试,安卓各机型开启开发者选项的方式不同,可根据自己的机型百度。

Monkey 入门指南_第10张图片

第三步:在cmd中输入adb devices,如果显示出设备名称,则连接真机成功;

  1.3.3连接模拟器

 

下载地址:https://www.yeshen.com/pg/yeshen

 

安装完之后的使用步骤如下:

第一步:打开夜神多开器

Monkey 入门指南_第11张图片

第二步:点击“添加模拟器”,设置不同的安卓系统版本

Monkey 入门指南_第12张图片

第三步:启动模拟器

第四步:在cmd下使用adb devices 验证模拟器是否可用

Monkey 入门指南_第13张图片

  • 二、monkey的简单介绍及使用

2.1 什么是monkey

Monkey是Android中的一个命令行工具,通过Monkey程序模拟用户触摸屏幕、滑动、按键等操作来对应用程序进行压力测试,检测程序多久的时间会发生异常。

2.2 monkey测试的三个特点

Monkey测试,所有的事件都是随机产生的,不带任何人的主观性。monkey测试有以下三个特点:

第一、测试的对象仅为应用程序包,有一定的局限性。

第二、Monky测试使用的事件数据流是随机的,不能进行自定义。

第三、可对MonkeyTest的对象,事件数量,类型,频率等进行设置。

 

2.3 monkey的运行

用法:adb shell monkey -p package.name -v times

分析:

 -p表示对象包

 –v 表示日志级别

package.name 表示apk的包名

times 表示运行次数

实例:

运行方法一:在cmd下直接运行monkey命令:

adb shell monkey -p com.youdao.calculator -v 10

 

Monkey 入门指南_第14张图片

运行方法二:

adb shell

monkey -p com.youdao.calculator -v 10

Monkey 入门指南_第15张图片

 

备注:使用exit可以退出adb shell

 

备注:使用时推荐把monkey日志保存下来,日志保存参考4.1

2.4 如何找apk包名

2.4.1 使用aapt

aapt是sdk自带的一个工具,在sdk\builds-tools\目录下,本例子以xsteach.apk包为例子。

操作步骤:

第一步:在sdk\builds-tools\目录下进入cmd窗口

第二步:在cmd下运行aapt dump badging D:\apktools\xsteach.apk

Monkey 入门指南_第16张图片

第三步:找到apk的包名:com.xsteach.appedu

2.4.2 使用apktools

Apktools下载地址:

链接:https://pan.baidu.com/s/1bxEpXLicpw3MKFhPqJX_gw

提取码:76cv

下载完直接使用,操作步骤如下:
步骤一:在apktools目录下打开cmd

步骤二:在cmd下运行aapt dump badging xsteach.apk

Monkey 入门指南_第17张图片

步骤三:找到apk的包名:com.xsteach.appedu

Monkey 入门指南_第18张图片

  • 三、monkey的常用参数

我们可以使用adb shell monkey -help  查看monkey有哪些命令参数,如果下图所示:

Monkey 入门指南_第19张图片

3.1 参数: -p

用于约束限制,用此参数指定一个或多个包(Package,即App)。指定包之后,monkey将只允许系统启动指定的APP,如果不指定包,将允许系统启动设备中的所有APP.

* 指定一个包: adb shell monkey -p com.android.calendar 10

* 指定多个包:adb shell monkey -p com.android.calendar –p com.baidu.browser.apps -p com.tencent.wstt.gt 100

* 不指定包:adb shell monkey 100

3.2 参数:   -v

用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:

日志级别 Level0

示例 adb shell monkey -p com.android.calendar –v 10

Monkey 入门指南_第20张图片

说明缺省值,仅提供启动提示、测试完成和最终结果等少量信息

日志级别 Level 1

示例 adb shell monkey -p com.android.calendar –v -v 10

说明提供较为详细的日志,包括每个发送到Activity的事件信息

Monkey 入门指南_第21张图片

日志级别 Level 2

示例 adb shell monkey -p com.android.calendar –v -v –v 10

Monkey 入门指南_第22张图片

说明最详细的日志,包括了测试中选中/未选中的Activity信息

3.3 参数: -s

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

Monkey 测试1:adb shell monkey -p com.android.calendar -s 10  100

Monkey 测试2:adb shell monkey -p com.android.calendar –s 10 100

两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。

3.4 延时参数: --throttle<毫秒>

用于指定用户操作(即事件)间的时延,单位是毫秒;

adb shell monkey -p com.android.calendar --throttle 2000 10

 备注:每隔2s执行一个随机流时间,方便定位分析可能是在哪个屏幕出现crash

3.5 事件参数: --pct-{+事件类别}{+事件类别百分比}

11种事件:触摸事件、手势事件、二指缩放事件、轨迹事件、屏幕旋转事件、基本导航事件、主要导航事件、系统按键事件、启动Activity事件、键盘事件、其他类型事件。

用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)
示例:

3.5.1 触摸事件

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

adb shell monkey -p com.android.calenda --pct-touch 10 100

3.5.2 手势事件

--pct-motion {+百分比}
调整手势事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随件机事和一个up事件组成)

adb shell monkey -p com.youdao.calculator --pct-motion 20 10

3.5.3 二指缩放事件

--pct-pinchzoom {+百分比}
调整二指缩放事件的百分比(二指缩放事件即智能机上的放大缩小手势操作)

adb shell monkey -p com.youdao.calculator --pct-pinchzoom 30 10

3.5.4 轨迹事件

--pct-trackball {+百分比}
调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)

adb shell monkey -p com.youdao.calculator --pct-trackball 30 10

3.5.5屏幕旋转事件

--pct-rotation {+百分比}
调整屏幕旋转事件的百分比(横屏和竖屏)

adb shell monkey -p com.youdao.calculator --pct-rotation 40 10

3.5.6 “基本”导航事件

--pct-nav {+百分比}
调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)

adb shell monkey -p com.youdao.calculator --pct-nav 40 10

3.5.7“主要”导航事件

--pct-majornav {+百分比}
调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

adb shell monkey -p com.youdao.calculator --pct-majornav 50 10

3.5.8 “系统”按键事件

--pct-syskeys {+百分比}
调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)

adb shell monkey -p com.youdao.calculator --pct-syskeys 50 10

3.5.9 启动Activity的百分比

--pct-appswitch {+百分比}
调整启动Activity的百分比(在随机间隔里,Monkey通过调用startActivity方法最大限度地开启该package下的全部Activity的一种方法)

adb shell monkey -p com.youdao.calculator --pct-appswitch 50 10

3.5.10 键盘事件

--pct-flip {+百分比}
调整键盘事件的百分比(键盘事件如点击输入框、键盘弹起、点击输入框以外区域、键盘收回等)

adb shell monkey -p com.youdao.calculator --pct-flip 50 10

3.5.11 其他类型事件

--pct-anyevent {+百分比}
调整其他类型事件的百分比(包罗了所有其他类型的时间,如按键、其他不常用的设备按钮等)

adb shell monkey -p com.youdao.calculator --pct-anyevent 50 10

3.6 调试类参数:

通过调试类命令,可以对Monkey进行一些简单的调试,可以快速定位Monkey执行过程中的一些问题。如果用户想监控应用程序所调用的包之间的转换,则可以用 –dbg-no-events参数;如果用户想监控内存泄露,可以用—hprof参数。

3.6.1 –dbg-no-events

设置此选项,Monkey将执行初始启动,进入一个测试Activity,不会再进一步生成事件。为了得到最佳结果,把它与-v、一个或几个包约束,以及一个保持Monkey运行30秒或更长事件的非零值联合起来,从而提供一个可以监视应用程序所调用的包之间的转换的环境

 

3.6.2 –hprof

将在事件执行之前和执行之后生成内存快照文件存放在手机的data/misc目录。通过对比执行前后的内存快照文件,可以协助定位内存泄露问题。由于内存快照文件比较大,所有要小心使用。

3.6.3 参数: --ignore-crashes

用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。

adb shell monkey -p com.youdao.calculatorr --ignore-crashes 10

测试过程中即使程序崩溃,Monkey依然会继续发送事件直到事件数目达到10为止

adb shell monkey -p com.youdao.calculator 10

测试过程中,如果app程序崩溃,Monkey将会停止运行

3.6.4 参数: --ignore-timeouts

用于指定当应用程序发生超时错误,如ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

adb shell monkey -p com.youdao.calculator --ignore-timeouts 10

 

3.6.5 参数: --ignore-security-exceptions

用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。

adb shell monkey -p com.youdao.calculator --ignore-security-exceptions 10

3.6.6 参数: --kill-process-after-error

用于指定当应用程序发生错误时,是否停止其运行。

当Monkey由于一个错误而停止时,出错的app将继续处于运行状态。

如果指定此参数,Monkey将会通知系统停止发生错误的进程。

(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。

adb shell monkey -p com.youdao.calculator --kill-process-after-error 10

3.6.7 参数: --monitor-native-crashes

用于指定是否监视并报告应用程序发生崩溃的本地代码。

adb shell monkey -p com.youdao.calculator --monitor-native-crashes 10

3.6.8  --wait-dbg

停止执行中的Monkey,直到有调试器和它相连接

3.7 官方隐藏类参数

3.7.1 –pkg-blacklist-file<黑名单文件>

限制Monkey不测试于指定黑名单文档中记录的包。

若没有指定这个参数,Monkey将执行系统内所有的包。

3.7.2 –pkg-whitelist-file<白名单文件>

限制Monkey只测试于指定白名单文档中记录的包。

若没有指定这个参数,Monkey将执行系统内所有的包。

3.7.3 –f

指定Monkey执行用户自定义的脚本文件

  • 四、Monkey日志分析

4.1 保存日志到指定目录

4.1.1 保存到PC中

adb shell monkey -p com.youdao.calculator -v 100 >>d:\monkeylog.txt

 

-p :对象包

包名:com.youdao.calculator

-v :日志级别

运行次数:1000

4.1.2 保存到手机中

第一步:在cmd下使用adb shell

第二步:monkey -p com.youdao.calculator -v 1000 > /mnt/sdcard/monkeylog.txt

-p :对象包

包名:com.youdao.calculator

-v :日志级别

运行次数:1000

 

4.1.3 标准流和错误流分开保存

第一步:在cmd下使用adb shell

第二步:monkey -p com.youdao.calculator -v 1000 > /mnt/sdcard/monkeylog.txt > /sdcard/error.txt

-p :对象包

包名:com.youdao.calculator

-v :日志级别

运行次数:1000

4.2 monkey日志内容分析

4.2.1测试命令信息

 

#测试的命令信息

Events injected: 100

 

## Network stats: elapsed time=1186ms (0ms mobile, 0ms wifi, 1186ms not connected)

#随机种子值,执行事件数量

:Monkey: seed=1568209983751 count=100

#运行的应用

:AllowPackage: com.youdao.calculator

#Category包含LAUNCHER和MONKEY

:IncludeCategory: android.intent.category.LAUNCHER

 

:IncludeCategory: android.intent.category.MONKEY

#各事件百分比

// Event percentages:

 

//   0: 15.0%

 

//   1: 10.0%

 

//   2: 2.0%

 

//   3: 15.0%

 

//   4: -0.0%

 

//   5: 25.0%

 

//   6: 15.0%

 

//   7: 2.0%

 

//   8: 2.0%

 

//   9: 1.0%

 

//   10: 13.0%

 

Monkey 入门指南_第23张图片

 

4.2.2 伪随机流事件信息

#启动app事件

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.youdao.calculator/.activities.MainActivity;end

 

    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.youdao.calculator/.activities.MainActivity } in package com.youdao.calculator

 

#具体执行的动作、以及坐标位置

:Sending Touch (ACTION_DOWN): 0:(655.0,235.0)

 

:Sending Touch (ACTION_UP): 0:(623.27386,154.98427)

 

:Sending Trackball (ACTION_MOVE): 0:(-5.0,4.0)

 

:Sending Touch (ACTION_DOWN): 0:(240.0,402.0)

 

:Sending Touch (ACTION_UP): 0:(219.07697,402.69543)

Monkey 入门指南_第24张图片

 

4.2.3 异常信息

 

4.2.4 如何判断是否成功运行

4.2.4.1 判断成功

//执行的事件数量

Events injected: 100000

//旋转的角度为0

:Sending rotation degree=0, persist=false

//丢失的事件数量

:Dropped: keys=0 pointers=160 trackballs=0 flips=0 rotations=0

//网络状态(移动网0ms,wifi网络0ms,未连接359261ms)

## Network stats: elapsed time=359261ms (0ms mobile, 0ms wifi, 359261ms not connected)

// Monkey finished

 

4.2.4.2 判断失败

//显示Monkey执行失败

** Monkey aborted due to error.

//执行的事件数量

Events injected: 190

//丢失的事件数量

:Dropped: keys=0 pointers=11 trackballs=0 flips=0

//网络状态

## Network stats: elapsed time=27954ms (27954ms mobile, 0ms wifi, 0ms not connected)

//提示在执行到第190个事件时出现崩溃,用的种子随机数是0

** System appears to have crashed at event 190 of 200 using seed 0

 

如果在执行monkey的过程中,出现Crash or ANR,error.txt中会显示错误日志。

五、如何重现异常

5.1 分析

排查步骤:

第一步:通过monkey找到是app的哪个模块出错(推荐使用延时参数throttle,这样可以肉眼看到在哪个界面出现crash)

第二步:查看Monkey里面出错前的一些事件动作,并手动执行该动作

第三步:若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样,方便重现

 

一般的测试结果分析:

1、ANR问题:在日志中搜索“ANR”

2、崩溃问题:在日志中搜索“Exception”  Force Close

5.2 安卓常见的crash场景

Crash关键字

Crash原因

java.lang.NullPointerException

空指针异常

java.lang.ArrayIndexOutofBoundsException

数组溢出

java.lang.ClassNotFoundException

类不存在

java.lang.ArithmeticException

数学运算异常

java.lang.IllegalArgumentException

方法参数异常

java.io.FileNotFoundException

文件未找到

java.lang.NumberFormatException

数值转化异常

java.lang.StackOverflowError

堆栈异常错误

java.lang.OutOfMemoryError

内存溢出错误

 

 

你可能感兴趣的:(自动化测试,monkey入门,monkey入门)