• 15
  • 15
分享
  • App测试之Monkey压力测试——软件测试圈
  • TIMI 2021-10-21 11:40:34 字数 5009 阅读 1852 收藏 15

(一)Monkey简介

Monkey意指猴子,顽皮淘气。所以Monkey测试,顾名思义也就像猴子一样在软件上乱敲按键,猴子什么都不懂,就爱捣乱。Monkey原理也是类似,通过向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、滑动Trackball、手势输入等操作),来对设备上的程序进行压力测试,检测程序多久的时间会发生异常,在功能测试完成后进行monkey测试。

Monkey包括许多选项,它们大致分为四大类:

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

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

(3)事件类型和频率;

(4)调试选项;

总结:Monkey测试用于发现App测试中的问题(如ANR(Application Not Responding),响应延时以及CRASH,非正常退出)

(二)Money原理

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

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

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

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

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

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

(2)Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;

(3)通过在cmd窗口中执行:adb shell monkey {+命令参数}来进行Monkey测试;

(三)Money架构

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

1.png

(四)Money参数大全

2.png

Event percentages(事件百分比):

0:点击事件百分比,即参数--pct-touch;

1:滑动事件百分比,即参数--pct-motion;

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

3:轨迹球事件百分比,即参数--pct-trackball;

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

5:基本导航事件百分比,即参数--pct-nav;

6:主要导航事件百分比,即参数--pct-majornav;

7:系统按键事件百分比,即参数--pct-syskeys;

8:Activity启动事件百分比,即参数--pct-appswitch;

9:键盘唤出隐藏事件百分比,即参数--pct-flip;

10:其他事件百分比,即参数--pct-anyevent。

(五)Money命令详解

关于环境,我们已经在之前搭建好了,在cmd中输入:adb devices

出现下面信息,表示环境是ok的。(首先确保环境没问题才能执行其他命令)

3.png

要测试App的稳定性,首先要获取到要测试的App的包名。在工作中可以直接问开发索取包名,或者根据经验自己输入命令查找包名也行。

方法1:

获取所有包名:

adb shell pm list package

获取第三方包名:

adb shell pm list package -3

4.png

方法2:

获取包名和

activityadb logcat | findstr START

输入该命令,然后点击要启动的app,即可获取到包名和activity

5.png

之后输入一些Monkey命令,就可以开始测试。

//获取Monkey命令自带的帮助,在cmd中执行命令:

adbshell monkey -help

//指定一个包让Monkey程序模拟100次随机用户事件

adb shell monkey -pcom.sf.DarkCalculator100

说明:参数-p用于约束限制,用此参数指定一个或多个包(即App)。指定包之后,Monkey将只允许系统启动指定的APP;如果不指定包,Monkey将允许系统启动设备中的所有APP,com.sf.DarkCalculator为包名,100是事件计数。

//指定日志级别Level 0

adb shell monkey -p com.sf.DarkCalculator –v 100

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

/指定日志级别Level 1

adb shell monkey -p com.sf.DarkCalculator –v -v100

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

//指定日志级别Level 2

adb shell monkey -p com.sf.DarkCalculator –v -v-v 100

说明:日志级别 Level 2,提供最详细的日志,包括了测试中选中/未选中的Activity信息。

--throttle <毫秒>

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

//指定用户操作(即事件)间的时延

adb shell monkey -p com.sf.DarkCalculator –-throttle 1000-v 100

说明:throttle单位是毫秒。

//调整触摸事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-touch10 -v1000

说明:--pct-{+事件类别}{+事件类别百分比}用于指定每种类别事件的百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比),--pct-touch {+百分比}用于调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)。

/调整动作事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-motion20 -v1000

说明:调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)。

//调整轨迹事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-trackball30-v 1000

说明:调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)。

//调整“基本”导航事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-nav40-v 1000

说明:调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)。

//调整主要导航事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-majornav50-v 1000

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

//调整系统按键事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-syskeys60 -v1000

说明:调整系统按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、EndCall及音量控制键)

//指定多个类型事件的百分比

adb shell monkey -p com.sf.DarkCalculator --pct-touch50 --pct-motion 50 1000

注意:各事件类型的百分比总数不能超过100%

//即使app崩溃,Monkey依然继续发送事件,直到事件数目达到目标值为止

adb shell monkey -p com.sf.DarkCalculator  --ignore-crashes-v 1000

说明:用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用--ignore-crashes参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数达到1000为止。

//即使APP发生ANR,Monkey依然继续发送事件,直到事件数目达到目标值为止

adb shell monkey -p com.sf.DarkCalculator  --ignore-timeouts-v 1000

说明:用于指定当应用程序发生ANR(ApplicationNo Responding)错误时,Monkey是否停止运行如果使用--ignore-timeouts参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

---------------------------------------------------------------------

通过以上描述,我们了解了Monkey是什么,Monkey是如何实现对APP进行压力测试,也熟悉了Monkey基本的命令,今天将在之前的基础上进行补充和拓展,一起深入接触并掌握Monkey,这之后,我们还将总结APP测试常见问题!

Monkey参数的约束限制规范:

1、一个 -p 选项只能用于一个包,指定多个包,需要使用多个 -p 选项;

2、-s <seed> 伪随机数生成器的seed值,如果用相同的seed值再次运行monkey,它将生成相同的事件序列,对9个事件分配相同的百分比;

3、-v 命令行的每一个-v将增加反馈信息的级别:

Level 0为一个-v的命令,除了启动的提示、测试完成和最终结果之外,提供较少的信息 ;Level 1为两个-v的命令,提供较为详细的测试信息,如逐个发送到Activity的事件 ;Level 2为三个-v的命令,提供更加详细的测试信息,如测试中被选中或未被选中的Activity;

常见命令组合:

1、monkey -pcom.package -v 500 :简单的输出测试的信息;

2、monkey -pcom.package -v -v -v 500  :以深度为三级输出测试信息;

3、monkey -pcom.package --port 端口号 -v :为测试分配一个专用的端口号,不过这个命令只能输出跳转的信息及有错误时输出信息;

4、monkey -pcom.package -s 数字 -v 500 :为随机数的事件序列定一个值,若出现问题下次可以重复同样的系列进行排错;

5、monkey -p com.package-v --throttle 3000 500 :

为每一次执行一次有效的事件后休眠3000毫秒;

Monkey测试参数建议

间隔时间:500毫秒;

种子数:随机;

遇到错误:不停止;

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

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

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

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

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

Monkey参考命令

adb shell monkey-p http://com.tencent.XXX(替换包名) --throttle 500 
--ignore-crashes--ignore-timeouts 
--ignore-security-exceptions 
--ignore-native-crashes  -v -v -v 1000000>d:\monkeyScreenLog.log

测试可以发现的问题


作者:门道科技

链接:https://zhuanlan.zhihu.com/p/143875679

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 这是时常被问到的问题,尤其是UI自动化的运行,过程非常耗时,所以,所以多线程不失为一种首先想到的解决方案。多线程是针对的测试用例,所以和selenium没有直接关系,我们要关心的是单元测试框架。unittest首先,应该说明的是unittest本身是不支持多线程的。当然,如果你学过Python的threading模块,也未必不行。不过我在stackoverflow 找了半天,大多是介绍unittest 测试多线程模块,并非是unittest本身如何多线程运行用例。“我如何学习葵花宝典” 和 “我如何验证 张三 学会了葵花宝典”是两回事,而我显然要解决的问题是前者。又重新百度,结果就找了答案。核...
            0 0 2078
            分享
          •   框架介绍  1、HttpRunner  是一款面向 HTTP(S) 协议的通用测试框架,只需编写维护一份YAML/JSON脚本,即可实现自动化测试、性能测试、线上监控、持续集成等多种测试需求。  2、Locust  Locust是一款易于使用的分布式用户负载测试工具。它用于对网站(或其他系统)进行负载测试,并确定系统可以处理多少并发用户。HttpRunner 通过复用Locust ,可以在无需对 YAML/JSON 进行任何修改的情况下,直接运行性能测试。  3、 httprunner使用手册  附httprunner中文使用文档地址:cn.httprunner.org/  环境安装  1...
            2 2 1769
            分享
          •   当我们开发完成一个应用程序时,往往需要对其进行性能测试,以帮助我们更好的优化程序以及发现程序中的一些 bug。在性能测试中,达到相应的性能指标对于一个软件来说十分重要,在本文中,将介绍一种现代化性能测试工具 k6。  k6 是一个开源工具,基于 JavaScript 可以编写 k6 的测试脚本,测试 Web 应用程序以及 API 的性能,支持 HTTP 等多种协议,可以很好地模拟各种高负载场景,充分验证程序稳定性和性能。k6 支持 Linux、MacOS 等多个平台,通过 k6 官网根据提示即可在各个平台快速安装 k6,终端输入 k6 version 出现如下显示说明安装成功。 ...
            0 0 792
            分享
          •   自从 2022 年 10 月亿万富翁埃隆?马斯克接管推特公司后,这家社交媒体巨头的办公设施一直处于混乱状态。  为了削减成本,马斯克采取了极端的措施,导致推特的办公设施陷入混乱,员工大量被裁,账单也无人支付。其中一个后果是,推特被法院判决要在 7 月底之前搬离其位于科罗拉多州博尔德市(Boulder)的办公室,因为该公司已经拖欠了三个月的租金。  据《丹佛商业杂志》报道,推特在 2020 年 2 月向其房东 Lot 2 SBO LLC 提供了一封信用证,金额为 968,000 美元,用于代替正常的租金支付。但是这笔钱在 2023 年 3 月就用完了,此后推特就没有再支付过一分钱,每个月欠下...
            0 0 880
            分享
          • 易用性测试是否有快捷键,快捷键不能重复;是否有热键,热键不能重复;不要用数据将用户包围,使用便于拥护迅速吸取信息的方式表现信息;减少用户输入动作数量;默认按钮要支持Enter操作,即按Enter后自动执行默认按钮对应操作;完成同一功能或任务的元素放在集中位置,减少鼠标移动的距离;同一界面上的控件数最好不要超过10个,多于10个时可以考虑使用分页界面显示;分页界面要支持在页面间的快捷切换,常用组合快捷键Ctrl+Tab;消除冗余输入,绝不要让用户提供程序中可以自动获取或计算出来的信息;遵循可不用鼠标的原则:应用中的功能只用键盘也应当可以完成;为手工录入部分提供快速键盘录入方式,能仅使用小键盘时尽...
            0 0 1134
            分享
      • 51testing软件测试圈微信