App之Monkey测试

作为初入测试行业的小白,了解一些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 100
    
      bash arg: -p
      bash arg: com.qiniu.pili.droid.shortvideo.demo
      bash arg: -v
      bash arg: -v
      bash arg: -v
      bash 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_MENU
    	Sleeping 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的全部内容了,希望可以帮助到大家。

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小曾同学.com

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值