0


Monkey压力测试笔记

简介

Monkey是一个向系统发送伪随机的用户事件流,例如按键输入、触摸屏输入、滑动、手势输入等,来对设备上的程序进行压力测试,检测程序多久会发生异常,一般在功能测试完成后使用monkey进行测试。

为什么要压力测试?多久开始?

当App不稳定时,出现程序未响应、自动退出时或提高产品的留存率

一般在首轮功能测试完成后进行压力测试或者下班后的通宵测试

四大类

Monkey中配置许多选项,大致分为四大类。

  1. 基本配置选项:如设置尝试的事件数量
  2. 运行约束选项:如设置只单独对一个包的测试
  3. 事件类型和频率:如上下左右滑动截屏等,操作延迟(毫秒)
  4. 调试选项;

Monkey测试主要用于发现App测试中的问题,ANR:全称Application Not Responding(程序未响应;响应延时),CRASH(非正常退出)。App功能测试完成后会使用Monkey进行测试

Monkey运行原理

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

  1. 限定了运行一个或者几个特定的包,那么它会监视视图转移到其他包的操作,并对其阻止
  2. 应用程序崩溃或接收到任何失控异常,Monkey停止并且会报错
  3. 应用程序产生了应用程序不响应(ANR)的错误,Monkey停止并且会报错
  4. 按照选定的不同级别的反馈信息,Monkey还可以看到执行过程报告和生成事件

Monkey的包

  1. Monkey程序由Android系统自带,使用Java语言编写,在Android文件系统存放路径为:/system/framework/monkey.jar
  2. Monkey程序是由一个名为'monkey'的shell脚本来启动执行,shell脚本在Android文件路径为:/system/bin/monkey
  3. 通过cmd中执行adb shell monkey { +命令参数 }来进行Monkey测试

Monkey的架构

Monkey运行在设备或模拟器上面,可以脱离PC运行(普遍做法是将monkey作为一个待测应用发送 随机按键的消息工具发送,验证待测试应用在这些随机性输入面前是否会闪退或者崩溃)

Monkey的指令参数

启动时环境

环境搭建已经搭建好的情况下,在cmd输入: adb devices

出现以上内容即是环境已经搭建好(adt和模拟器启动)

Monkey帮助命令:

adb shell monkey -help

获取包名

  • 获取所有包名: adb shell pm list package
  • 获取第三方包名: adb shell pm list package -3

  • 获取包名和Activity: adb logcat | findstr START

红框1为包名,红框2为Activity

基础参数

-v反馈信息的详细级别,一般是-v -v -v,最多也详细,一般会指定日志路径保存,供开发人员查询Bug-sseed,序列值,种子值,可以指定重现日志的某个随机事件,一般程序功能修复后复现时会使用--throttle指定事件的间隔时间,monkey执行过快可以使用间隔时间使间隔时间慢下来,方便查看-p
指定包名,或者指定多个包名。如果不加-p会对整个安卓设备随机操作。-p 包名 -p 包名n+

发送的事件类型参数

注意:各类事件类型的百分比的【总和】不能超过100%,也就是说所有事件比例加起来等于100%

  1. 15%点击事件: --pct-touch
  2. 10%滑动事件: --pct-motion
  3. 2%缩放事件: --pct-pinchzoom
  4. 15%轨迹球事件: --pct-trackball
  5. 0%屏幕旋转事件: --pct-rotation
  6. 25%基本导航事件: --pct-nav
  7. 15%主要导航事件: --pct-majornav
  8. 2%系统按键事件: --pct-syskeys
  9. 2%Activity启动事件: --pct-appswitch
  10. 1%键盘唤出/隐藏事件: --pct-flip
  11. 13%其他事件: --pct-anyevent

上面百分比的总和刚好为100%


Monkey指令使用

基础参数

-p

**adb shell monkey -p 包名 100 **

  • 指定一个包名模拟100次随机用户事件;
  • -p 约束限制在该包内运行并且模拟,指定多个包需要多个-p进行约束
  • 100:模拟用户操作100次
  • 注意:不规定包那么monkey会运行启动的设备中所有的App

-v

adb shell monkey -p 包名 -v 100

  • 日志Level 0级
  • 日志级别用于指定反馈信息级别,信息级别就是详细程度
  • 仅提供启动提示、测试完成和最终结果等少量信息

adb shell monkey -p 包名 -v -v 100

  • 日志Level 1级
  • 提供较为详细的日志,包括每个发送的Activity的事件信息

adb shell monkey -p 包名 -v -v -v 100

  • 日志Level 2级
  • 提供最详细的日志,包括了测试中未选中的Activity的信息

--throttle

用于指定用户操作(即事件)间的时间延时(时延),单位是毫秒;如果不设定这个参数那么Monkey会尽可能很快的生成和发送消息。

adb shell monkey -p 包名 --throttle 1000 -v 100

  • 指定用户操作(事件)间的延迟

-s

adb shell monkey -p 包名 -s seed值 100

  • seed值/种子值/序列值: 指的是随机生成数的seed值
  • 使用相同的seed值再次运行monkey,将会生成相同的事件序列,对9个事件分配相同的百分比

事件参数

语法: --pct-{事件类别} {百分比}

用于指定每种类别事件的百分比;在monkey的运行中这种事件占的总事件的百分比

adb shell monkey -p 包名 --pct-touch15 -v 100

  • 触摸事件(触摸事件是一个down-up事件,它发生在屏幕的某单一位置)

adb shell monkey -p 包名 --pct-motion 15 -v 100

  • 调整动作事件(动作事件是由屏幕上某处一个down事件、一系列伪随机事件和一个up事件组成)

adb shell monkey -p 包名 --pct-trackball 10 -v 100

  • 调整轨迹事件(轨迹事件由一个或几个随机的移动组成,有时候还伴随点击)

adb shell monkey -p 包名 --pct-nav 20 -v 100

  • 调整基本导航事件(导航事件来自方向输入设备的up/down/left/right组成)

adb shell monkey -p 包名 --pct-majornav 20 -v 100

  • 调整主要导航事件(这些导航通常引发图形界面中的动作,如键盘中间键,回退键,菜单键等)

adb shell monkey -p 包名 --pct-skskeys 20 -v 100

  • 调整系统按键事件(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量组成)

adb shell monkey -p 包名 --pct-touch 50 --pct-motion 50 1000

  • 指定多个类型事件的百分比.不能超过100%

运行错误事件参数

语法: --ignore-{错误事件参数}

adb shell monkey -p 包名 --ignore-crashes -v 100

  • 即使App崩溃,monkey依然继续发送事件,直到事件数目达到目标值为止
  • 说明:用于指定当前应用程序崩溃时(force&close错误),monkey是否停止运行。如果使 --ignore-crashes参数,即使应用程序崩溃,monkey依然会发送事件,直到事件数目达到为止

adb shell monkey -p 包名 --ignore-timeouts -v 100

  • 即使App发生ANR,monkey依然会继续发送事件,直到事件数目达到目标值为止
  • 说明:用于指定当前应用程序发生**ANR(application no responding,程序未响应)**错误时,monkey是否停止运行,如果使用 --ignore-timeouts参数,即使发生ANR错误,monkey依然会发送事件,直到事件数目到达为止

常见命令组合

  1. adb shell monkey -p 包名 -v 500 : 简单的输出测试信息;
  2. adb shell monkey -p 包名 -v -v -v 500 : 以深度为三级输出测试信息;
  3. adb shell monkey -p 包名 --port 端口号 -v :为测试分配一个专用的端口号,不过这个命令只能输出跳转的信息及有错误时输出信息;
  4. adb shell monkey -p 包名 -s seed值 -v 500 :为随机数的事件序列定一个值,若出现问题下次可以重复同样的系列进行排错;
  5. adb shell monkey -p 包名 -v --throttle 3000 500: 为每一次执行一次有效事件后休眠3000毫秒

Monkey测试建议

间隔时间:500毫秒

种子数:随机

遇到错误:不停止

执行时长:每机型不小于12小时或点击次数:100万次

机型覆盖建议:覆盖高中低端机型

不同芯片平台(高通、海思、MTK等)

不同分辨率(480*800以上主流分辨率)

不同安卓版本(安卓8.0以上主流安卓版本)

Monkey参考命令

adb shell monkey -p 包名 --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --ignore-native-crashes -v -v -v 模拟次数>d:\monkeyScreenLog.log

--throttle 500 限制500毫秒

--ignore-crashes 程序崩溃时继续运行

--ignore-timeouts 程序未响应时继续运行

--ignore-security-exceptions 忽略安全异常,当程序发生许可错误时

--ignore-native-crashes 忽略本地崩溃

--monitor-native-crashes 检视本地崩溃

d:\monkeyScreenLog.log 日志生成到d盘目录下的monkeyScrennLog文件中


日志

典型的monkey测试日志文件输出,如下

主要Log日志文件说明

anr目录:从手机/data/anr导出的日志,保存anr和crash的相关信息


通过日志定位问题步骤

在monkeyScreenLog.log日志中搜索关键词'Fatal'、'Crash'、'ANR'定位发生的Crash的详细堆栈信息,或分析Crash前后的日志事件:

如图:

然后把相关的日志提交给开发即可。

标签: 压力测试 笔记

本文转载自: https://blog.csdn.net/qq_39619934/article/details/139492723
版权归原作者 broprota 所有, 如有侵权,请联系我们删除。

“Monkey压力测试笔记”的评论:

还没有评论