全国咨询/投诉热线:400-618-9090

首页技术文章正文

monkey压力测试原理和使用教程

更新时间:2020-07-29 来源:黑马程序员 浏览量:

一、Monkey压力测试的原理

1. adb shell monkey的运行机制

实际上是执行手机中/system/bin/monkey这个脚本;

2. Monkey事件注入机制Monkey注入系统事件是通过 framework 层的 hidenApi (如:activemanager,inputmanager,windowmanager) 获取系统服务。

Monkey中有11种事件,这些事件在MonkeyEventSource中对事件之间的比例进行设置。

Monkey事件根据类型比例生成事件队列,循环查找事件。

a.触摸事件(inputmanager):包括屏幕以及物理键的触摸,滑动,点击事件

b.Activity事件(activemanager):是指我们调用Android系统组件的事件。

c.Window事件(windowmanager):是指操作Window的事件,例如转屏

3.Monkey核心类

a. Monkey.java, 程序的入口,根据参数选择合适的MonkeyEventSource,并适时触发MonkeyEvent;

b. MonkeyEventSource.java,MonkeyEvent的工厂,是一个接口;

c. MonkeyEvent.java,各种事件的具体实现。

二、查找手机上的安装包包名

1.adb shell pm list package 查看手机上所有的安装包

2.adb shell pm list package -3 查看第三方安装包

压力测试1

3.adb shell pm list packages -s 查看系统的包

4.adb shell pm list packages -e “要搜索的内容” 查看启动包中搜索的包

monkey压力测试2

5.adb shell dumpsys window | findstr mCurrentFocus 后面的是当前启动的acivity):获取当前打开的APP包名(前面的为包名,斜杠

monkey压力测试3


三、Monkey 命令

基本参数的介绍注意:所有的参数都需要放在monkey和设置的次数之间,参数的顺序可以调整;若带了-p ,-p必须放在monkey之后,参数必须在-p和count之间:

adb shell monkey -p 包名 --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes --monitor-native-crashes -v -v -v –s 1540475754297 100

1.-p ,此命令用于指定包,若不指定则在整个系统中执行

a.指定一个包执行10次:adb shell monkey -p包名 10,如下出现事件执行次数和所耗时间,则算是执行成功;

monkey压力测试4

b.指定多个包执行10次:adb shell monkey -p 包名–p包名10,

monkey压力测试5

2.-v ,用于反馈日志的详细程度级别

Level 0:adb shell monkey -p 包名 -v 10// 默认级别,仅提供启动、测试完成和最终结果等少量信息

Level 1:adb shell monkey -p包名 -v-v 10// 提供较为详细的日志,包括每个发送到Activity的事件信息

Level 2:adb shell monkey -p包名 -v-v-v 10 // 提供最详细的日志,包括了测试中选中/未选中的Activity信息

3.-s ,用于指定伪随机数生成器的seed值

命令:adb shell monkey -p 包名 –s seed值 执行次数

如果seed值相同,则两次Monkey测试所产生的事件序列也相同的,示例:

测试1:adb shell monkey -pcom.kugou.android –s 1540475754297 100

测试2:adb shell monkey -pcom.kugou.android –s 1540475754297 100

4.--throttle ,用于指定用户事件的操作间隔时延,单位是毫秒如果不指定这个参数,monkey会尽可能快的生成和发送消息

命令:adb shell monkey -p包名 --throttle 3000 100

5.--ignore-timeouts ,忽略超时错误

6.--ignore-crashes ,忽略crash

7.--ignore-security-exceptions 忽略许可错误

8.--monitor-native-crashes,用于指定是否监视并报告应用程序发生崩溃的本地代码

9.--pct-touch ,触摸事件

命令:adb shell monkey -p 包名 -v -v -v --pct-touch 100 20 //执行20次100%都为触摸事件这里触摸事件为100%,则没有其他事件

monkey压力测试6

10.指定日志存放目录:

a、存放在电脑上(如下指定为D目录下命名为AAlog.txt,为了方便查找,然后就去电脑上该目录下查找,当设置路径后,日志将不会在命令行窗口上显示出来)

adb shell monkey -p 包名 -v -v -v 200>D:AAlog.txt

b、存放在手机上(可以断开电脑)

monkey压力测试7

1、进入Android系统adb shell

2、执行Monkey命令monkey -p com.kugou.android --pct-touch 25 -v -v 200 1>/mnt/sdcard/monkey.txt 2>/mnt/sdcard/error.txt &

0 :标准输入1 :标准输出2 :标准错误输出&:后台运行>: 重定向,会覆盖原来文件里的内容>>: 重定向,追加到原来文件末尾


四、日志分析

1、查找出差步骤:

a、找到monkey里哪个地方出错

查看Monkey执行的是哪一个Activity,在switch后面找,两个swtich之间如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。

monkey压力测试8

b、查看Monkey里面出错前的一些事件动作,手动执行该动作Sleeping for XX milliseconds这是执行Monkey测试时,throttle设定的间隔时间,每出现一次,就代表一个事件,Sending XX 就是代表一个操作,如下图的两个操作 应该就是一个点击事件

monkey压力测试9

c、若以上步骤还不能找出,则可以使用之前一样的seek再执行monkey命令一遍,便于复现

2、测试结果分析:

a、程序无响应,ANR问题:在日志中搜索“ANR”

b、崩溃问题:在日志中搜索“CRASH”

c、其他问题:在日志中搜索”Exception”



猜你喜欢:

软件测试工程师培训课程

adb如何无线连接手机?

fiddler手机抓包图文教程 

手机内存测试要关注什么?会有哪些异常?

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

http://www.itcast.cn/subject/uizly/index.shtml?seozxuids

14天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

15天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

8天免费试学

基础班入门课程限时免费

申请试学名额

20天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

0天免费试学

基础班入门课程限时免费

申请试学名额

12天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

5天免费试学

基础班入门课程限时免费

申请试学名额

10天免费试学

基础班入门课程限时免费

申请试学名额
在线咨询 我要报名