monkey测试(monkey测试中所有事件都是随机的)

http://www.itjxue.com  2023-01-26 22:21  来源:未知  点击次数: 

android测试monkey什么意思

Monkey是Android中自带的用来进行压力测试的一个命令行工具。

用Monkey进行App压力测试的结果有三种。

1、正常。

2、Crash :程序崩溃。

3、ANR:程序无响应。

第一步:搭建环境:主要是安装和搭建java和sdk环境,说白了,对我们安卓开发来说,只要搭建好了Android开发环境,Monkey测试环境基本就是OK的了。

第二步:准备好要测试的项目,比如可以是一个.apk安装包,也可以是已经安装到手机上的软件 。

第三步:连接上Android测试设备,可以是模拟器,当然也可以是手机,通过adb 命令对测试项目进行Monkey测试。

当然这一测试也是存在着优缺点的。

优点:功能强大, 主要用于压力和稳定性测试。缺点:本身不提供截屏功能,本身无法完成录制、回放的功能(不过都可以借用其他的开源工具来实现Monkey的截屏和录制等功能)。

如何利用monkey进行手机app测试?

 一、简介

Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:

基本配置选项,如设置尝试的事件数量

运行约束选项,如设置只对单独的一个包进行测试

事件类型和频率

调试选项

在Monkey运行的时候,它生成事件,并把它们发给系统。同时,Monkey还对测试中的系统进行监测,对下列三种情况进行特殊处理(自动停止):

如果限定了Monkey运行在一个或几个特定的包上,那么它会监测试图转到其它包的操作,并对其进行阻止。

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

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

按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件

二、测试准备

Monkey test前必须先进入android设备的adb shell(Android SDK环境配置不在此描述,网上有很多)步骤如下:

1. 开始—运行—cmd

2. usb连接手机,输入 adb shell 命令,待出现 即可输入以下内容

3. 进入手机后,输入相应的monkey命令即可测试

三、基本命令格式

adb shell monkey –p 程序包 –v 测试次数

比如“adb shell monkey –p com.htc.Weather –v 20000”意思是对com.htc.Weather 这个程序包单独进行一次20000次的monkey测试

其中程序包名称可以在串口终端这句命令获得:ls data/data 显示所有程序包

四、测试Log获取

用Monkey test测试,为了方便分析问题,可以在命令monkey命令后面加上 “|logcat -v time”,这样就能边测试边打印Log(记得用终端保存Log文本)例如:

adb shell monkey –p com.htc.Weather –v 20000|logcat -v time

但是这个组合在monkey测试完成后,logcat仍然在执行,测试时需要注意。

如果测试monkey碰到crash或者anr(程序强制性退出或不响应)现象时,在抓取log的同时需要提供traces.txt,步骤如下:

1. 测试版本需要具备root权限

2. 进入data/anr目录下面

3. 将traces.txt文件拷贝到TF卡中,然后拷贝出来发给软件分析即可

adb命令之monkey压力测试篇

一. 首先搭建monkey的运行环境

二. 环境搭建成功后可以进行monkey压力测试

1.电脑usb连接手机

2.开始 -运行(win+R键),输入cmd,在命令行输入adb shell

3.接下来就可以运行monkey test的命令

如:monkey -p com.test -v 100 (com.test为需要测试的包)

三. monkey压力测试命令详解

monkey是sdk中附带的一个工具,该工具 进行压力测试,然后开发人员根据monkey打印的日志结局测试中出现的问题

monkey测试中所有的事件都是随机产生的,不带有任何人的主观性

四. 标准的monkey命令:

[adb shell] monkey [options] eventcount,如:adb shell monkey -v 500

五. 在monkey测试中常用的命令组合有:

六. monkey options 通常分为四大类——常用选项、时间选项、约束选项、调试选项

1.常用选项如下:

--help:打印帮助信息

-v:指定打印信息的详细级别,一个 -v增加一个级别 , 默认级别为 0 。

2.事件选项如下:

-s:指定产生随机事件种子值,相同的种子值产生相同的事件序列。如: -s 200

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

--pct-touch:指定触摸事件的百分比,如:--pct-touch 5%

--pct-motion percent (滑动事件)

--pct-trackball percent (轨迹球事件)

--pct-nav percent (导航事件 up/down/left/right)

--pct-majornav percent (主要导航事件 back key 、 menu key)

--pct-syskeys percent (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)

--pct-appswitch percent (activity之间的切换)

--pct-anyevent percent(任意事件)

3.约束选项如下:

-p:指定有效的package(如不指定,则对系统中所有package有效),一个-p 对应一个有效package, 如:-p com.ckt -p com.ckt.asura;

-c:activity必须至少包含一个指定的category,才能被启动,否则启动不了;

4.调试选项如下:

--dbg-no-events:初始化启动的activity,但是不产生任何事件。

--hprof:指定该项后在事件序列发送前后会立即生成分析报告 —— 一般建议指定该项。

--ignore-crashes:忽略崩溃

--ignore-timeouts:忽略超时

--ignore-security-exceptions:忽略安全异常

--kill-process-after-error:发生错误后直接杀掉进程

--monitor-native-crashes:跟踪本地方法的崩溃问题

--wait-dbg:知道连接了调试器才执行monkey测试。

5.列举一个简单的monkey命令:

adb shell monkey -p com.xy.android.junit -s 500 -v 10000

但是,在工作中为了保证测试可以完整进行,为了防止发生错误时立刻退出压力测试。更为了 可以方便查看log,monkey 测试命令如下:

adb shell monkey -p com.xy.android.junit -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 10000 E:\monkey_log\java_monkey_log.txt

monkey作用的包:com.ckt.android.junit

产生时间序列的种子值:500

忽略程序崩溃 、 忽略超时 、 监视本地程序崩溃 、 详细信息级别为2 , 产生 10000个事件 ,log输出到E盘monkey_log文件夹下的java_monkey_log.txt

七. monkey 测试结果详细分析

1.事件所占比例分析

4.当有FC(Force Close)错误

5.logcat输出的信息:

移动端手机 App 耗电量测试:Monkey 电量测试基本操作及 Android 性能优化

Monkey 测试简介

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

大致操作流程:通过名为“monkey”的Shell脚本去启动Monkey.jar程序(shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey),在你指定的APP应用上模拟用户点击,滑动,输入等操作以极快的速度来对设备程序进行压力测试,检测程序是否会发生异常,然后通过日志进行排错。

主要目的:测试app 是否会是否会Crash。

操作命令格式:adb shell monkey {+命令参数}

获取Android包名方法:(注意:请开启手机开发者模式,请开启手机USB调试模式)

查看正在运行的程序的包名:adb shell dumpsys activity activities | sed -En -e '/Running activities/,/Run #0/p' (例如:我清理手机后台之后,开启了QQ,输入命令之后,就会出现QQ的进程,框的地方就是qq的包名)

monkey常用操作命令简介

-p 包名:指定应用程序。例如:adb shell monkey -p 包名 事件总数

-v:打印log级别,-v越多日志信息越详细,最多支持3个。例如:adb shell monkey -p 包名 -v -v -v 事件总数

-s:伪随机数生成器的 seed 值,通俗的说就是个标记,后面跟数字,例如:执行adb shell monkey -s 1 -p 包名 事件总数,这个我标记了-s 1,命令操作完之后,我发现有日志报错,我想重新执行这个monkey操作,那你就可以继续执行这个命令,排错时常用。

-f:后接测试脚本名,例如:adb shell monkey -f 脚本名 事件总数

-throttle:翻译减速的意思,后面接时间,单位为ms,,表示事件之间的固定延迟,如果不接该项,monkey将不会延迟,例如:adb shell monkey --throttle 500 -p 包名 事件总数

--pct-事件类别 11个事件百分比控制(有的是9种事件,没有--pct-pinchzoom,--pct-rotation事件)由安卓SDK决定

11种事件,按顺序罗列的

--pct-touch {+百分比}:0

翻译触摸,触摸事件泛指发生在某一位置的一个down-up事件,点击

--pct-motion {+百分比}:1

翻译动作,动作事件泛指从某一位置接下(即down事件)后经过一系列伪随机事件后弹出(即up事件)

--pct-pinchzoom {+百分比}:2

翻译二指缩放,智能机上的放大缩小手势操作事件

--pct-trackball {+百分比}: 3

翻译轨迹,轨迹事件包括一系列的随机移动,以及偶尔跟随在移动后面的点击事件

--pct-rotation {+百分比}:4

翻译屏幕旋转,横屏竖屏事件

--pct-nav {+百分比}:5

翻译基本导航,基本导航事件主要来自方向输入设备的上、下、左、右事件

--pct-majornav {+百分比}:6

翻译主要导航,主要导航事件通常指引发图形界面的一些动作,如键盘中间按键、返回按键、菜单按键等

--pct-syskeys {+百分比}:7

翻译系统按键,系统按键事件通常指仅供系统使用的保留按键,HOME键、BACK键、拨号键、挂断键、音量键等

--pct-appswitch {+百分比}:8

翻译应用启动,应用启动事件(activity launches)即打开应用,通过调用startActivity()方法最大限度地开启该package下的所有应用

--pct-flip {+百分比}:9

翻译翻转,键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回

--pct-anyevent {+百分比}:10

翻译其他类型,其他类型事件指上文中未涉及的所有其他事件,keypress、不常用的button等

百分比控制以及使用

首先注意一点,这个Event percentages在不同版本的SDK版本中顺序可能会不一样。

如果在monkey参数中不指定事件参数,这些动作都是随机分配的,11个动作其分配的百分比之和为100%,通过添加命令选项来控制每个事件的百分比。

添加事件百分比之后的情况,举例添加--pct-touch事件百分比为100:

命令: adb shell monkey -v -p 包名 --pct-touch 100 100

结果:

说明:尴尬啊,我这个vent percentages竟然有12种,多了一种什么我也不知道,但我敢肯定这跟SDK版本有关系,想知道的同学可以自己从安卓SDK中反编译出monkey源码,通过查看源码中的MonkeySourceRandom.java文件获知!查出来的同学可以告知我下。

说明:尴尬啊,我这个vent percentages竟然有12种,多了一种什么我也不知道,但我敢肯定这跟SDK版本有关系,想知道的同学可以自己从安卓SDK中反编译出monkey源码,通过查看源码中的MonkeySourceRandom.java文件获知!查出来的同学可以告知我下,我想做伸手党

-ignore-crashes:翻译忽略崩溃,当应用程序崩溃或发生失控异常时,monkey将继续运行直到计数完成。如果不设置此项,monkey遇到上述崩溃或异常将停止运行。

-ignore-timeouts:翻译忽略超时,当应用程序发生任何超时错误(如ANR,即Application Not Responding)时,monkey将继续运行直到计数完成。如果不设置此项,monkey 遇到此类超时将停止运行。

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

方法一:

新建一个窗口

执行: adb shell ,

再执行ps | grep monkey,返回来的第一个数字,即是monkey的进程号

然后kill pid 进程号。如图

对手机进行重启

新建一个窗口

执行adb reboot

log日志导出

保存到电脑上。

执行:adb shell monkey -p 包名 -v 1000 /Users/weixiangyang/Desktop/monkey.txt

例如:保存到电脑上标准流与错误流分开保存,分别命名为info.txt,error.txt

info.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时发送的各种事件,如触摸事件的位置等等。

error.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时产生的一些ANR、强制关闭等异常。 执行:adb shell monkey -p 包名 -v 1000 1/Users/weixiangyang/Desktop/info.txt 2/Users/weixiangyang/Desktop/error.txt

例如:保存到电脑上并命名为monkey.txt

保存到手机上。注意:手机要root

例如:保存到手机上并命名为monkey.txt

执行:

adb shell说明:进入adb shell后就相当于进入linux的root下面,但是没有权限在里面创建文件,所以手机要root

monkey -p 包名 -v 1000 /mnt/sdcard/monkey.txt

注意:我的 adb shell 跟monkey XXX是分开执行的,分两行!!!

例如:保存到电脑上标准流与错误流分开保存,分别命名为info.txt,error.txt

执行:adb shell monkey -p 包名 -v 1000 1/mnt/sdcard/info.txt 2/mnt/sdcard/error.txt

Android App Monkey 测试

安装sdk后,可在命令行通过 adb shell monkey 查看可用命令

2.monkey常用参数说明:

colgroupcolcol/colgroup

| 基本参数 | 说明 |

| -p allowed-package-name | 指定一个或多个包 |

| -s seed | 指定一个随机数生成器的seed值 |

| --throttle milliseconds | 指定事件之间的固定延迟(ms) |

| -v | 指定反馈信息级别(信息级别就是日志的详细程度) |

| -c main-category | 指定一个或多个类别名 |

| -f scriptfile | 运行指定的monkey脚本 |

colgroupcolcol/colgroup

| 事件参数 | 说明 |

| --pct-touch percent | 指定触摸事件百分比 |

| --pct-motion percent | 指定动作事件百分比 |

| --pct-trackball percent | 指定轨迹事件百分比 |

| --pct-syskeys percent | 指定系统按键事件百分比 |

| --pct-nav percent | 指定基本导航事件百分比 |

| --pct-majornav percent | 指定主要导航事件百分比 |

| --pct-appswitch percent | 指定应用启动事件百分比 |

| --pct-flip percent | 指定flip(弹)事件的百分比 |

| --pct-anyevent percent | 指定其他类型事件百分比 |

| --pct-pinchzoom percent | 指定缩放(捏)事件百分比 |

| --pct-permission percent | 指定 |

colgroupcolcol/colgroup

| 调试参数 | 说明 |

| --ignore-crashes | 忽略因崩溃或异常引起的停止运行 |

| --ignore-timeouts | 忽略应用发生超时错误(ANR) |

| --ignore-security-exceptions | 忽略应用发生任何权限错误 |

| --monitor-native-crashes | 监视并报告monkey运行时native code的崩溃事件 |

| --ignore-native-crashes | 忽略因native code的崩溃事件 |

| --kill-process-after-error | 在应用出错后通知系统杀死发生错误的进程 |

| --hprof | 在事件序列前后立即生成profilfing report |

| --dbg-no-events | 监视应用程序所调用的包之间的转换 |

| --wait-dbg | 暂停执行中的monkey,直到有调试器与它连接 |

3.使用真机环境针对皮皮Android客户端进行monkey测试

A.开启手机调试模式,通过USB连接电脑,查看是否连接成,可以使用adb devices命令

B.关闭手机下拉通知栏,锁定手机界面(视机型而定,操作方式不一样),避免测试工程中切出app,影响测试结果。

C.执行monkey测试,使用脚本命名如下,参数请参照上面参数说明理解。

adb shell monkey -p com.chudiangameplay.android -s 10086 --pct-touch 70 --pct-motion 30 --ignore-crashes --ignore-timeouts --monitor-native-crashes --throttle 200 -v -v -v 50000 D:\monkeylog\20200525.log

4.日志分析

日志分析可手动在日志中搜索crashes 、crashes 、error等内容,查看对应区域日志。

日志量较大,可使用如下提供的bat脚本,分析对应日志文件。

为什么要进行monkey测试

Monkey是Android中的一个命令行工具,可以实现对正在开发的应用程序进行压力测试;

Monkey测试是一种为了测试的稳定性、健壮性的快速有效的方法;

它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试

(责任编辑:IT教学网)

更多

推荐新书快递文章