APP稳定性测试神器之Monkey-随机事件测试

一、Monkey 命令基本参数介绍

0、–help : 列出简单的用法

adb shell monkey -help

1、允许启动手机里面所有的 App , 随机操作 1000 次

adb shell monkey 1000

2、-p : 允许启动 App 的包名

·启动一个包名的应用,QQ 的包名为: com.tencent.mobileqq

· 案例:随机操作 手机 QQ 1000 次

#获取App的包名,先启动qq并获取焦点
  adb shell dumpsys window | findstr mCurrentFocus
  #启动App
  adb shell monkey -p com.tencent.mobileqq 1000

 ·启动指定的多个 App,微信的包名为:com.tencent.mm

· 案例:随机操作 手机 QQ 和 微信 1000 次

adb shell monkey -p com.tencent.mobileqq -p com.tencent.mm 1000

3、-v : 操作日志记录

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

:Level 0(缺省值)除 启动提示、测试完成和最终结果之外,提供较少信息。

-v :Level 1提供较为详细的测试信息,如逐个发送到Activity的 事件。

-v -v :Level 2提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。

 adb shell monkey -p com.tencent.mobileqq -v -v 100

4、-s : 伪随机数生成器的seed值

如果用相同的seed值再次运行monkey,将生成相同的事件序列。

adb shell monkey -p com.tencent.mobileqq -s 12345 -v 10

5、--throttle : 插入固定延迟

在事件之间插入固定延迟。通过这个选项可以减缓Monkey的执行速度。如果不指定该选项,Monkey将不会被延迟,事件将尽可能快地被执行。

· 案例:随机执行 500 个事件,每个事件之间延迟 500 毫秒被执行。

adb shell monkey -p com.tencent.mobileqq –-throttle 500 -v 500

6、--ignore-crashes : 忽略操作是崩溃异常

通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

adb shell monkey -p com.tencent.mobileqq –-ignore-crashes -v 1000

7、--ignore-timeouts : 忽略超时

通常,应用程序发生任何超时错误(如“Application Not responding”对话框)Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

adb shell monkey -p com.tencent.mobileqq –-ignore-timeouts -v 1000

8、--ignore-security-exceptions : 忽略程序发生许可异常

通常,当程序发生许可错误(例如启动一些需要许可的Activity)导致的异常时,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。

adb shell monkey -p com.tencent.mobileqq–-ignore-security-exceptions -v 1000

9、调整触摸事件百分比

触摸事件不单单是按键,它泛指发生在某一位置的一个down-up事件。

#调整触摸事件百分比为100%
  adb shell monkey -p com.tencent.mobileqq -v -v --pct-touch 100 200

 10、调整手势事件百分比

#调整手势占比为100%
  adb shell monkey -p com.tencent.mobileqq -v -v --pct-motion 100 200

11、调整应用启动事件的百分比

如果你希望调整应用启动事件的百分比。

--pct-appswitch:后面接应用启动事件百分比。

adb shell monkey -p com.tencent.mobileqq --pct-appswitch <percent>

12、调整屏幕旋转事件百分比

--pct-rotation 后面接屏幕旋转事件的比例值。

 adb shell monkey -p com.tencent.mobileqq --pct-rotation <percent>

二、Monkey随机测试实战

1、测试案例

对QQ进行随机测试,测试希望通过Monkey来模拟用户的随机操作,检查被测应用是否会出现异常(应用崩溃或者无响应)。

2、需求分析

这个测试的目的是希望模拟用户操作,因此需要让Monkey执行的事件尽可能地接近用户的常规操作,这样才可以最大限度地发现用户使用过程中可能出现的问题。

·测试是指定应用,因此需要使用-p指定被测app包名:com.tencent.mobileqq

· 触摸事件和手势事件是用户最常见的操作,所以通过--pct-touch和--pct-motion将这两个事件的占比调整到40%与25%;

· 目标应用包含了多个Activity,为了能覆盖大部分的Activity,所以通过--pct-appswitch将Activity切换的事件占比调整到10%;

· 被测应用在测试中出现过不少横竖屏之间切换的问题,这个场景也必须关注,因此通过--pct-rotation把横竖屏切换事件调整到10%;

· 使用-s参数来指定命令执行的seed值 Monkey会根据seed值来生成对应事件流,同一个seed生成的事件流是完全相同的。这里指定了seed值,是为了测试发现问题时,便于进行问题复现。

· 使用--throttle参数来控制Monkey每个操作之间的时间间隔,一方面是希望能更接近用户的操作场景,正常用户操作都会有一定的时间间隔;另一方面也是不希望因为过于频繁的操作而导致系统崩溃,尤其是在比较低端的手机上执行测试时。因此通过--throttle设置Monkey每个操作固定延迟0.4秒;

· 使用--ignore-crashes和--ignore-timeouts参数使Monkey遇到意外时能继续执行,在执行Monkey测试时,会因为应用的崩溃或没有响应而意外终止,所以需要在命令中增加限制参数--ignore-crash和--ignore-timeouts,让Monkey在遇到崩溃或没有响应的时候,能在日志中记录相关信息,并继续执行后续的测试;

· 使用-v指定log的详细级别Monkey的日志输出有3个级别:日志的级别越高,其详细程度也越高。为了方便问题的定位,这里将日志设为 -v -v。

3、monkey指令

#完整的monkey指令,直接在cmd下运行即可
  adb shell monkey -p com.tencent.mobileqq --pct-touch 40 --pct-motion 25 --pct-appswitch 10 --pct-rotation 5 -s 1666 --throttle 400 --ignore-crashes --ignore-timeouts -v -v  20

4、执行结果

C:\Users\chang>adb shell monkey -p com.tencent.mobileqq --pct-touch 40 --pct-motion 25 --pct-appswitch 10 --pct-rotation 5 -s 1666 --throttle 400 --ignore-crashes --ignore-timeouts -v -v  20
  :Monkey: seed=1666 count=20
  :AllowPackage: com.tencent.mobileqq
  :IncludeCategory: android.intent.category.LAUNCHER
  :IncludeCategory: android.intent.category.MONKEY
  // Selecting main activities from category android.intent.category.LAUNCHER
  //   + Using main activity com.tencent.mobileqq.activity.SplashActivity (from package com.tencent.mobileqq)
  // Selecting main activities from category android.intent.category.MONKEY
  // Seeded: 1666
  // Event percentages:
  //   0: 40.0%
  //   1: 25.0%
  //   2: 0.5479452%
  //   3: 4.109589%
  //   4: 5.0%
  //   5: 6.849315%
  //   6: 4.109589%
  //   7: 0.5479452%
  //   8: 10.0%
  //   9: 0.2739726%
  //   10: 3.5616438%
  :Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.tencent.mobileqq/.activity.SplashActivity;end
      // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.tencent.mobileqq/.activity.SplashActivity } in package com.tencent.mobileqq
  Sleeping for 400 milliseconds
      // Allowing start of Intent { cmp=com.tencent.mobileqq/.activity.LoginActivity } in package com.tencent.mobileqq
      // activityResuming(com.tencent.mobileqq)
      // activityResuming(com.tencent.mobileqq)
  :Sending Touch (ACTION_DOWN): 0:(19.0,822.0)
  :Sending Touch (ACTION_UP): 0:(18.467697,833.23395)
  Sleeping for 400 milliseconds
  :Sending Touch (ACTION_DOWN): 0:(292.0,564.0)
  :Sending Touch (ACTION_UP): 0:(292.24872,574.4084)
  Sleeping for 400 milliseconds
  :Sending Touch (ACTION_DOWN): 0:(223.0,264.0)
  :Sending Touch (ACTION_UP): 0:(220.5615,265.7382)
  Sleeping for 400 milliseconds
  :Sending Touch (ACTION_DOWN): 0:(241.0,660.0)
  :Sending Touch (ACTION_MOVE): 0:(221.0623,659.5999)
  :Sending Touch (ACTION_MOVE): 0:(214.96077,659.1779)
  :Sending Touch (ACTION_MOVE): 0:(192.31989,658.8912)
  :Sending Touch (ACTION_MOVE): 0:(191.0637,658.5243)
  :Sending Touch (ACTION_MOVE): 0:(177.8515,657.96515)
  :Sending Touch (ACTION_UP): 0:(160.01547,656.31335)
  Sleeping for 400 milliseconds
  :Sending Touch (ACTION_DOWN): 0:(104.0,225.0)
  :Sending Touch (ACTION_UP): 0:(104.47486,227.16228)
  Sleeping for 400 milliseconds
  :Sending Touch (ACTION_DOWN): 0:(131.0,833.0)
  :Sending Touch (ACTION_UP): 0:(124.2063,833.3685)
  Sleeping for 400 milliseconds
      // Allowing start of Intent { cmp=com.tencent.mobileqq/.activity.RegisterPhoneNumActivity } in package com.tencent.mobileqq
  :Sending Touch (ACTION_DOWN): 0:(367.0,597.0)
  :Sending Touch (ACTION_UP): 0:(366.77362,594.3969)
  Events injected: 20
  :Sending rotation degree=0, persist=false
  :Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0
  ## Network stats: elapsed time=2832ms (0ms mobile, 0ms wifi, 2832ms not connected)
  // Monkey finished

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值