• 15
  • 15
分享
  • App测试之Monkey压力测试——软件测试圈
  • TIMI 2021-10-21 11:40:34 字数 5009 阅读 1910 收藏 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自动化测试时,经常会遇到上图所示的搜索框,这里有个麻烦就是搜索框没有“搜索”按钮,UI自动化测试时不能确认搜索。要解决这个问题,我们可以通过 driver.press_keycode('66') 方法模拟键盘回车,具体的使用方法请参考:http://testingpai.com/article/1595507207594/comment/1595559375540但是这种方法只能适用于Android环境,iOS环境不能使用。由于我是在Webview环境做UI自动化测试,无论是Android环境,iOS环境都可以使用js方法解决疑难杂症,操作时只需要...
            0 0 833
            分享
          •   特斯拉降价之后,小鹏汽车成为首家开启降价的头部造车新势力。  1月17日,小鹏汽车发布公告称,自2023年1月17日14时起,小鹏汽车将启动G3i、P5、P7的新年新价格体系,小鹏G3i售价调整为14.89万-17.69万元,降价2万-2.5万元;小鹏P5售价调整为15.69万-20.29万元,降价2.3万元;小鹏P7售价调整为20.99万-24.99万元,降价3万-3.6万元。  就在11天之前,特斯拉中国宣布降价,最高降幅达到了4.8万元。AITO问界紧随其后,将问界M5 EV、问界M7舒适版与豪华版售价下调3万元左右。  江西新能源科技职业学院新能源汽车技术研究院院长张翔在接受澎湃新...
            0 0 661
            分享
          •   数据库迁移指的是把历史数据从A数据库迁到B数据库,可划分为同类型数据库的迁移和不同类型数据库之间进行的数据迁移。同类型数据库的迁移较为简单,而不同类型数据库之间的数据迁移就会存在一些问题:如表结构会变化,语法存在差异等,这些差异有些会直观地反映在数据库迁移类项目的功能测试中。本文将浅谈数据库迁移类项目功能测试的基本思路。  首先,在测试前要了解数据库迁移类项目的主要关注点。通常来讲,系统级数据库规模十分庞大,许多代码都是在直接使用数据库某些表中的数据,因此在数据迁移过程中,数据的正确性、可用性是非常重要的,要保证各项服务获得的数据准确无误。在进行功能测试时,可通过新旧数据库表中数据对比的方...
            1 1 1012
            分享
          •   软件测试的薪资对于女生来说,应该还算可以了吧?反过来你可能要头疼的是怎么去安慰另一半接受薪资不如自己。  再换个角度来说:很多人缺乏的不是机会,而是面对未知领域迈出哪一步的勇气!  任何人都劝不了你,唯独你自己能说服自己!这个答案值得在座的各位深思!  测试岗是不是加班多?  我们来说说测试 VS 开发的加班比较:  关于加班的问题,以IT行业的现状来说,加班还是比较普遍常见的~  ·至于加班的多少,一般要看公司或者是所待的项目组。一般的话都是跟着项目走的。  · 如果是某些加班比较狠的公司,那么不管开发测试加班都是非常多的(具体是那些996大厂,请自行百度~)。  · ...
            0 0 770
            分享
          • 也许大家在面试的时候碰到测试电梯,测试笔,测试伞的呀,小编就都罗列出来,大家可以看一看,碰到测试其他东西的,大家主要是思路,流程清晰就可以的。参考答案:伞功能测试伞是否可以正常打开,关闭,是否可以正常使用;伞是否可以折叠,伞的尺寸是否符合使用需求;伞骨与伞柄是否耐用,材质是否符合需求。是否生锈;伞的底座是否结实,是否容易脱落;伞是否能够正常遮阳/挡雨,伞面是否能够承受住风吹日晒。是否防紫外线;收伞的外部捆绑条,长度是否合适,是否结实,暗扣/粘扣的是否能够正常使用;自动伞是否可以正常使用,按钮承受度,使用次数。界面测试伞的类型是否符合需求,手动伞、自动伞;伞的外观、颜色、是否齐全、是否美观。易用...
            0 0 1168
            分享
      • 51testing软件测试圈微信