作为初入测试行业的小白,了解一些Monkey测试是很有必要的,在此小编整理了一些App方面Monkey测试的基础以及Monkey脚本的编写,希望可以帮助到大家。

1. Monkey的概念

Monkey测试又称"猴子测试",是指没有测试经验的人对产品进行乱点乱按。Monkey是Android 系统自带的一个命令行工具,可以向测试的应用程序发送伪随机的用户事件流(如按键、触屏、手势等),实现对应用程序进行测试的目的。通常使用Monkey进行压力测试和稳定性测试。

什么时候使用monkey测试比较合适?

答:一般产品比较稳定,没有特别多bug的时候,一般会用monkey去测试待测应用的稳定性,健壮性(是否会发生闪退、崩溃、ANR问题)

2. Monkey使用

第一部分介绍了Monkey的基本概念,那么对于测试小白要怎么使用Monkey呢?
第一步:需要在电脑上安装adb工具,如果不知道怎么安装的可以参考小编的另一篇博客ADB命令介绍
第二步:找一台真机或者模拟器,大家还是直接使用真机吧,比较方便,需要打开手机上的USB调试模式,使用数据线连接电脑。
第三步:打开命令行输入命令:
adb shell monkey
或者
adb shell monkey --help
之后就会看到命令行中一大堆的内容,以下内容是Monkey的帮助信息,主要是Monkey工具中参数的使用

2.1 Monkey参数的使用

首先 先看一下事件参数表,其中包含了一些常用的参数,接下来就给大家挑几个介绍一下基本的用法

参数 说明
-s 伪随机数生成的种子,如果用相同的随机种子值再次运行相同的Monkey,前后两次执行将会生成相同的事件序列
–throttle 在两个事件之间插入一个固定延时,可以减缓Monkey的执行速度。
–pct-touch 设定触屏事件生成的百分比,触屏事件是一个有手指按下,抬起事件的手势
–pct-motion 设定滑动事件生成的百分比
–pct-trackball 设定轨迹球事件生成的百分比,轨迹球事件是包含一系列随机移动和单击事件的事件
–pct-nav 设置基本的导航事件的百分比,基本导航事件是模拟方向性设备输入向上、向下、向左、向右的事件
–pct-majornav 设定主要导航事件的百分比,主要导航事件通常会导致UI产生回馈事件,如:单击back事件,MENU键
–pct-syskeys 设定系统按键事件的百分比,系统按键是指这些按键通常被保留,由系统使用,如HOME、BACK、拨号、挂断及音量控制键
–pct-appswitch 设定启动活动事件的百分比。在随机的一定间隔后,Monkey就会执行一个start Activity()函数尽可能多覆盖包中全部活动
–pct-anyevent 设定其他类型事件的百分比,如普通的按键消息、不常用的设备按钮事件等
-p 设定一个或多个包名,每个包名前都需要有一个-p
–ignore-crashes 一般情况下,Monkey会在待测应用程序崩溃或发生任何异常后停止运行,若指定了该参数,则Monkey将会在产生异常后,继续向系统发送事件,直到指定的事件消息全部完成为止。
–ignore-timeouts 一般情况下,当应用程序发生任何超时错误时,monkey将停止运行,若指定了该参数,则monkey将会在产生错误信息后,继续向系统发送事件,直到指定的事件消息全部完成为止
  1. -p
    指的package,指定要操作的应用程序,也就是我们平时说的apk包。

    adb shell monkey -p packagename 1000
    -p 参数指定要运行的包,
    1000表示事件次数
    当存在多个包时
    adb shell monkey -p packagename1 -p packagename2 1000
    
  2. -s
    随机种子,在测试的过程中非常推荐使用的一种方法,如果第一次运行时出现了异常,可以通过随机种子复现之前异常的步骤,

    adb shell monkey -p packagename -s 10 1000
    
  3. -v
    通过-v可以查看Monkey执行的过程,在Monkey日志分为三个级别:0、1、2,分别对应的是一个-v、-v -v、-v -v -v;如果Monkey命令中什么都不写的情况话默认为0级别。

    0级:adb shell monkey -p packagename -v 1000
    1级:adb shell monkey -p packagename -v -v 1000
    2级:adb shell monkey -p packagename -v -v -v 1000
    

    具体案例分析:
    输入命令:adb shell monkey -p packagename -v -v -v 1000
    命令窗口中会输出一大堆的内容,下面从中截取了一段:

    ~ ~ adb shell monkey -p com.qiniu.pili.droid.shortvideo.demo -v -v -v 100bash arg: -pbash arg: com.qiniu.pili.droid.shortvideo.demobash arg: -vbash arg: -vbash arg: -vbash arg: 100
    args: [-p, com.qiniu.pili.droid.shortvideo.demo, -v, -v, -v, 100]arg: "-p"arg: "com.qiniu.pili.droid.shortvideo.demo"arg: "-v"arg: "-v"arg: "-v"arg: "100"
    data="com.qiniu.pili.droid.shortvideo.demo"
    :Monkey: seed=1633995691825 count=100
    :AllowPackage: com.qiniu.pili.droid.shortvideo.demo
    :IncludeCategory: android.intent.category.LAUNCHER
    :IncludeCategory: android.intent.category.MONKEY
    // Selecting main activities from category android.intent.category.LAUNCHER
    //   - NOT USING main activity com.android.browser.launch.SplashActivity (from package com.android.browser)
    //   - NOT USING main activity com.android.calendar.homepage.AllInOneActivity   (from package com.android.calendar)
    // Seeded: 1633995691825
    // Event percentages:
    //   0: 15.0%
    //   1: 10.0%
    //   2: 2.0%
    //   3: 15.0%
    //   4: -0.0%
    //   5: -0.0%
    //   6: 25.0%
    //   7: 15.0%
    //   8: 2.0%
    //   9: 2.0%
    //   10: 1.0%
    //   11: 13.0%
    :Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.qiniu.pili.droid.shortvideo.demo/.activity.MainActivity;end// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.qiniu.pili.droid.shortvideo.demo/.activity.MainActivity } in package com.qiniu.pili.droid.shortvideo.demo// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.qiniu.pili.droid.shortvideo.demo/.activity.MainActivity } in package com.qiniu.pili.droid.shortvideo.demo
    Sleeping for 0 milliseconds:Sending Touch (ACTION_MOVE): 0:(417.50476,1845.2583):Sending Touch (ACTION_MOVE): 0:(416.0715,1845.2562):Sending Touch (ACTION_MOVE): 0:(408.3729,1843.4117):Sending Touch (ACTION_MOVE): 0:(404.40262,1840.556):Sending Touch (ACTION_MOVE): 0:(378.433,1833.2344):Sending Touch (ACTION_UP): 0:(369.19046,1832.6873)Sleeping for 0 milliseconds:Sending Key (ACTION_DOWN): 23    // KEYCODE_DPAD_CENTER:Sending Key (ACTION_UP): 23    // KEYCODE_DPAD_CENTER:Sending Key (ACTION_UP): 82    // KEYCODE_MENUSleeping for 0 milliseconds:Sending Touch (ACTION_DOWN): 0:(391.0,92.0):Sending Touch (ACTION_UP): 0:(403.20142,94.02997)Events injected: 100:Sending rotation degree=0, persist=false:Dropped: keys=0 pointers=0 trackballs=0 flips=1 rotations=0## Network stats: elapsed time=601ms (0ms mobile, 0ms wifi, 601ms not connected)// Monkey finished
    ➜  ~
    

    接下来对以上日志进行分析

    :Monkey: seed=1633995691825 count=100
    Monkey在使用伪随机数seed产生事件序列时,在没有指定随机种子时,系统会随机分配一个值,count表示随机事件次数:AllowPackage: com.qiniu.pili.droid.shortvideo.demo
    表示只启动com.qiniu.pili.droid.shortvideo.demo 包中的Activity。:IncludeCategory: android.intent.category.LAUNCHER
    :IncludeCategory: android.intent.category.MONKEY
    表示启动的意图重量为”LAUNCHER“和”MONKEY“的活动。// Event percentages:
    //   0: 15.0%
    //   1: 10.0%
    //   2: 2.0%
    //   3: 15.0%
    //   4: -0.0%
    //   5: -0.0%
    //   6: 25.0%
    //   7: 15.0%
    //   8: 2.0%
    //   9: 2.0%
    //   10: 1.0%
    //   11: 13.0%
    本次伪随机事件中各种类型的事件比例,如 按键、滑屏等事件,这些事件等占比也可以自己进行相应参数等设定
    :Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.qiniu.pili.droid.shortvideo.demo/.activity.MainActivity;end
    表示跳转到“com.qiniu.pili.droid.shortvideo.demo”包中的“.activity.MainActivity”这个活动。// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.qiniu.pili.droid.shortvideo.demo/.activity.MainActivity } in package com.qiniu.pili.droid.shortvideo.demo
    表示允许启动“com.qiniu.pili.droid.shortvideo.demo”包中的“.activity.MainActivity”这个活动。Sleeping for 0 milliseconds
    表示Monkey允许在发送各种随机事件时有一个延迟,因为我们没有在命令行中指定,所以Monkey只能尽可能快的发送事件消息。Events injected: 100
    上面的信息表示产生了100次注入事件,因为命令行中设置的为100:Sending rotation degree=0, persist=false
    表示屏幕旋转,旋转角度为0,是否保持旋转状态,为假。:Dropped: keys=0 pointers=0 trackballs=0 flips=1 rotations=0
    表示丢弃的屏幕旋转相关信息,丢弃:键=0,指针=0,轨迹球=0,键盘轻弹=1,屏幕翻转=0.
    // Monkey finished
    如果在日志中看到这句就代表执行成功,在此过程中没有什么问题。
    
  4. 日志保存

    adb shell monkey -p com.qiniu.pili.droid.shortvideo.demo -v -v -v 100 >/Users/Downloads/monkey.log
    adb logcat -v time '*E' > monkey.log (只保存error级别的日志)
    
  5. 综合案例展示
    针对Monkey中的参数我们知道什么意思,怎么使用就可以了,接下来给大家进行综合案例展示

    adb shell monkey -v -v -v --ignore-crashes --ignore-timeouts --kill-process-after-error --ignore-security-exceptions -p com.qiniu.pili.droid.shortvideo.demo -s 100 --pct-touch 50 --throttle 3000 1000 >monkey.log
    测试过程中忽略相关的安全、超时、崩溃等异常
    --pct-touch 50 触屏事件为百分之五十
    --throttle 3000 事件间隔为3秒
    -s 100 种子为100
    

3. Monkey脚本

先给大家展示一下Monkey脚本,脚本名字为monkey.txt,内容如下:
对于Tap(960,274)中的坐标问题我们可以通过uiautomatorviewer工具解决,当然还有一个最简单的办法是:手机设置——开发者模式——指针位置,这样我们就可以获取button的坐标了。

type = raw events # 表示脚本的类型
count = 1 # 用于说明执行的次数,但是无论改成什么都只是执行一次??
speed = 1.0 # 用于调整两次执行随机事件的发送频率。
start data >> # 启动 或者start data >>LaunchActivity(com.qiniu.pili.droid.shortvideo.demo) # 包名,界面名
Tap(960,274) ## button 的坐标(点击)
UserWait(5000) # 等待时间
Tap(390,1538)
UserWait(13000)
Tap(780,1583)
UserWait(5000)
Tap(777,1183)
UserWait(5000)
Tap(30,1335)
UserWait(5000)
Tap(30,1456)
UserWait(5000)
Tap(945,81)
UserWait(5000)
DispatchPress(KEYCODE_BACK) # 点击返回键

第一步: 写monkey脚本,可以将其保存为monkey.txt( 名字任意)
第二步: 将脚本Push到手机某一个文件中

adb push monkey.txt  /sdcard/

第三步: 运行脚本

adb shell monkey -f /sdcard/monkey.txt -v -v 1

以上就是Monkey的全部内容了,希望可以帮助到大家。

App之Monkey测试相关推荐

  1. 安卓手机APP压力monkey测试

    一.Monkey概述 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行 ...

  2. APP测试之Monkey压力测试(二)

    ------·今天距2020年85天·------ 这是ITester软件测试小栈第51次推文 大家好,我是coco小锦鲤 欢乐的假期即将走远 学习的号角继续吹响 延续昨天Monkey(一) 今天进军 ...

  3. 对安卓手机上的APP做monkey压力测试

    之前对安卓手机上的APP做了monkey测试,今天来总结一下如何使用安卓自带的monkey命令去做测试. 首先,PC端要对安卓手机进行monkey测试的话,必须要有以下条件: 1.电脑中必须配有ADB ...

  4. monkey测试_爱码小士丨 APP稳定性测试(附视频详解)

    在实际的测试过程中,主要是对系统的功能来进行测试,用于校验功能的正确性 还需要考虑到系统在未修改的状态下,是否能够稳定运行,即崩溃.闪退.重启.系统异常等等等地情况 在APP中,稳定性测试一般是交由M ...

  5. monkey测试===通过monkey测试检查app内存泄漏和cpu占用

    最近一直在研究monkey测试.网上资料很多,但都是一个抄一个的.原创的很少 我把检查app内存泄漏的情况梳理一下: 参考资料: Monkey测试策略:https://testerhome.com/t ...

  6. APP测试之Monkey压力测试(一)

    (一)Monkey简介 Monkey意指猴子,顽皮淘气.所以Monkey测试,顾名思义也就像猴子一样在软件上乱敲按键,猴子什么都不懂,就爱捣乱.Monkey原理也是类似,通过向系统发送伪随机的用户事件 ...

  7. 一文彻底搞懂App的Monkey稳定性测试

    01.什么是稳定性测试 通过随机点击屏幕一段时间,看看app会不会崩溃,能不能维持正常运行 02.Money是什么 Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用 ...

  8. App测试之Monkey压力测试

    什么是monkey? Monkey意指猴子,顽皮淘气.所以Monkey测试,顾名思义也就像猴子一样在软件上乱敲按键,猴子什么都不懂,就爱捣乱.Monkey原理也是类似,通过向系统发送伪随机的用户事件流 ...

  9. 【Monkey测试】手机app测试性能测试,Monkey测试详解(全)

    目录:导读 前言 一.Monkey工具 二.Monkey的优劣 三.Monkey 命令 四.Monkey结果分析 五.Monkey详细 六.Monkey用来做什么 七.Monkey程序介绍 八.Mon ...

最新文章

  1. ROS初级教程1---官方ROS文件系统导览
  2. VS2017-VC++中慎用sizeof
  3. LeetCode 第 25 场双周赛(718/1832,前39.2%)
  4. 那些有关求解next数组的算法
  5. 经济师计算机考试取消,2019年经济师考试计算机机考答题要求及说明
  6. Arthas安装问题
  7. Linux--DHCP 服务(了解 DHCP 服务、其工作过程、如何动态配置主机地址、安装 DHCP 服务器及配置步骤)
  8. 3000款课件培训PPT模板免费下载网站
  9. 怎么去掉抖音短视频上的水印
  10. 如何将Kali Linux中的Firefox ESR浏览器语言设置为中文
  11. 看距离纪念日还有多少天的日历软件 便签自动计算距离纪念日剩余天数
  12. 饿了么交易系统设计思路
  13. 数据结构与算法【Java】05---排序算法总结
  14. DRV8301/8303代码讲解
  15. [原创]个人收集有关计算机视觉和模式识别相关的网址
  16. PAT 甲级 1062 Talent and Virtue
  17. 利用计算机技术执行去自动化,电力调度运行中计算机技术的应用价值与效果
  18. Vmware与主机间共享文件的n种方法(附图+详解)
  19. 可视化图表入门教程讲解
  20. LLVM学习笔记(16)

热门文章

  1. esp32红外线控制led灯的开关
  2. oracle的nvl函数返回的类型,oracle的nvl函数的用法-查询结果若是NULL则用指定值代(转) sober...
  3. 戴尔r720服务器增加内存,Dell R720/R730服务器内存插法
  4. 基础_ _返回键back
  5. Web前端 PS切图
  6. Toontrack EZkeys for Mac,音乐合成软件
  7. 去掉windows快捷箭头脚本
  8. Sui链上事务处理概述
  9. 让你的APP支持iPhone5
  10. 《大话西游》20年后重映(附影评:《大话西游》你真的看懂了吗?)