软件测试之 Monkey 的简单使用、参数类型介绍及参数的综合应用

通过 Monkey 来对被测程序进行压力测试,从而检查和评估被测程序的稳定性

可参考 Monkey 官方文档:https://www.android-doc.com/tools/help/monkey.html

当Monkey运行时,它会生成事件并将它们发送到系统。它还可以监视 被测系统并查找三种特殊情况:

  • 如果您已将Monkey限制为在一个或多个特定包中运行,则会监视尝试导航到任何其他包并阻止它们。
  • 如果您的应用程序崩溃或收到任何类型的未处理异常,Monkey将停止并报告错误。
  • 如果您的应用程序生成的应用程序没有响应错误,则Monkey将停止并报告错误。

 

adb相关命令参考

1、Monkey 的启动步骤:

在 Terminal 中进行操作:

第一步:连接模拟器

第二步:连接后输入以下命令

adb shell

第三步:进入到指定目录

root@android:/ # cd system/bin

# 接下来直接输入  ls 命令 就会看到 Monkey 的文件了

第四步:输入 monkey 命令后会看到如下提示,则说明启动成功

root@android:/system/bin # monkey

2、Monkey 简单命令:

bogon:~ Sirius$ adb shell monkey 800

# 格式如下

adb shell monkey [options] <event-count>

# [options] 指的是monkey可传入的参数,属于可选项(如果不指定options,Monkey将以无反馈的模式进行启动,并把事件任意发送到安装在目标环境中的全部包)

# <event-count> 指的是随机发送事件数。譬如:如果输入100的话,就会执行100个伪随机事件,为必选项。

使用 Monkey 命令后的小例子:会像 “猴子”一样不停的到处乱点

3、Monkey 中的常用操作事件:

①、触摸事件 ⑦、主要导航事件
②、手势事件 ⑧、系统按键事件
③、二指缩放事件 ⑨、启动 Activity 事件
④、轨迹事件 ⑩、键盘事件
⑤、屏幕旋转事件 ⑪、其他类型事件
⑥、基本导航事件  

4、Monkey 的常用参数分类:

4.1  常规类参数     

# 主要包括帮助参数和日志信息参数。帮助参数用于输出Monkey命令使用指导;日志信息参数将日志分为三个级别,级别越高,日志的信息越详细。

# 帮助类参数
bogon:~ Sirius$ adb shell monkey -h

# 日志级别参数
bogon:~ Sirius$ adb shell monkey -v 400

# 日志级别参数格式
adb shell monkey -v -v -v 400

# 第一个 -v:0级,除启动提示、测试完成和最终结果外提供较少信息

# 第二个 -v:1级,提供较详细测试信息,譬如逐个发送到 Activity 事件

# 第三个 -v:2级,提供更详细的安装信息,如测试中被选中或未被选中的 Activity 事件

# 400     :随机事件数

小结:

0级日志示例:

1级日志示例:

4.2  事件类参数:

       事件类参数主要是用来对随机事件进行调控,从而使其按照设定进行运行,如设置各种事件的百分比、设置事件生成所使用的种子值等。频率参数主要限制事件执行的时间间隔。

1、伪随机数生成种子值:使用 -s命令可以重复执行之前的伪随机操作。其实每次在执行伪随机事件操作也会默认生成一个seed值

# 格式:
adb shell monkey -s <seed> <event-count>
# 例子:
bogon:~ Sirius$ adb shell monkey -v -s 666 200

# 如果想让下一次的操作流程和上一次相同的话,可以使用上面的命令

示例:

2、设置时间间隔(如果想在每一个指令之间加上固定的时间的话,可以使用 --throttle 命令)

# 格式:
adb shell monkey --throttle <milliseconds> 

# 例子
bogon:~ Sirius$ adb shell monkey -v --throttle 3000 10

# --throttle:后面接时间,单位为ms(<milliseconds>),表示每个事件之间的固定延迟(也就是执行每一个指令时之间的时间间隔),若没有该选项,monkey将不会延迟。

3、调整触摸事件的百分比(可以使用 --pct-touch 命令)

# 格式
adb shell monkey --pct-touch <percent>

# 例子:
bogon:~ Sirius$ adb shell monkey -v --pct-touch 30 20

# --pct-touch:后面跟触摸事件的百分比(触摸事件是屏幕上单个位置的下行事件。)

4、调整手势事件百分比(可以使用 --pct-motion 命令)

# 格式:
adb shell monkey --pct-motion <percent>

# 例子:
bogon:~ Sirius$ adb shell monkey -v --pct-motion 40 10

# --pct-motion:后面跟手势事件的百分比(运动事件包括屏幕上某处的向下事件,一系列伪随机运动和一个向上事件)

 注:设置触摸事件和手势事件的综合百分比:

# 例子:
bogon:~ Sirius$ adb shell monkey -v --pct-touch 20 --pct-motion 30 10

5、调整应用启动事件的百分比(可以使用 --pct-appswitch <percent> 命令)

# 格式:
adb shell monkey --pct-appswitch <percent>

# 例子:
bogon:~ Sirius$ adb shell monkey -v --pct-appswitch 40 50

# --pct-appswitch:后面跟应用启动事件的百分比,应用启动事件(即activity launches)也就是我们常说的打开应用,通过调用startActivity()方法最大限度地开启该package下的所有应用,用这个命令后会自动打开多个应用的app

6、调整屏幕旋转事件的百分比(使用 --pct-rotation <percent> 命令)

# 格式:
adb shell monkey --pct-rotation <percent>

# 例子:
bogon:~ Sirius$ adb shell monkey -v --pct-rotation 50 10

# --pct-rotation:后面跟屏幕旋转事件的比例值

小结:

4.3  约束类参数

1、包约束:(可以使用 -p <allowed-package-name> 命令)

       如果以这种方式指定一个或多个包,Monkey将允许系统访问这些包中的Activity。如果想让应用程序需要访问其他包中的Activity(例如,选择联系人),还需要指定这些包。如果您没有指定任何包的话,Monkey将允许系统在所有包中启动活动。

        要指定多个包,需要多次使用-p选项 - 每个包一个-p选项。

# 格式:
adb shell monkey -p <allowed-package-name> <event-count>

# 例子:
bogon:~ Sirius$ adb shell monkey -p com.wandoujia.phoenix2 10

bogon:~ Sirius$ adb shell monkey -v -p com.wandoujia.phoenix2 -p com.tencent.mm 100

# 如果有两个包名的话就会打开这两个对应的app应用

2、Activity 类约束:(可以使用 -c <main-category> 命令)

        如果以这种方式指定一个或多个类别,则Monkey将允许系统访问使用指定类别之一列出的活动。如果您未指定任何类别,Monkey将选择使用Intent.CATEGORY_LAUNCHERIntent.CATEGORY_MONKEY类别列出的活动。

       要指定多个类别,请多次使用-c选项 - 每个类别一个-c选项。

# 如果想将monkey限制在一个或几个类别中,使用如下命令
# 格式:
adb shell monkey -c <main-category> <event-count>

# 例子:
bogon:~ Sirius$ adb shell monkey -v -c Intent.CATEGORY_LAUNCHER 100

4.4  调试类参数

1、应用程序崩溃后继续发送事件(可以使用 --ignore-crashes 命令)

# 通常,当应用程序崩溃或遇到任何类型的未处理异常时,Monkey将会停止。如果指定该选项的话,Monkey将会继续向系统发送事件,直到计数完成。

# 格式
adb shell monkey --ignore-crashes <event-count>

2、超时错误继续发送事件(可以使用 --ignore-timeouts 命令)

# 通常,当应用程序遇到任何类型的超时错误时(例如“应用程序无响应”对话框)时,Monkey将会停止。如果指定该选项的话,Monkey将会继续向系统发送事件,直到计数完成。

# 格式
adb shell monkey --ignore-timeouts

3、应用程序权限错误发生后继续发送事件(可以使用 --ignore-security-exceptions 命令)

# 通常,当应用程序遇到任何类型的权限错误时,Monkey将停止,譬如,如果它尝试启动需要某些权限的活动时,如果指定此选项,Monkey将继续向系统发送事件,直到计数完成。

# 格式
adb shell monkey --ignore-security-exceptions

小结:

5、Monkey参数的综合应用

5.1  简单测试场景

测试 豌豆荚app Android版,希望通过Monkey来模拟用户的随机性操作,检查被测应用是否会出现异常(应用崩溃或者无响应)

5.2  简单的需求分析

① 测试是指定应用,因此需要使用 -p 指定被测app包名:com.wandoujia.phoenix2

② 测试的目的是希望模拟用户操作,因此需要让Monkey执行的事件尽可能地接近用户的常规操作,这样可以最大限度地发现用在使用过程中可能出现的问题。因此需要对Monkey执行的事件百分比做以下调整:

# 触摸事件和手势事件是用户最常见的操作,所以通过--pct-touch和--pct-motion将这两个事件的占比调整到30%与25%;目标应用包含了多个Activity,为了能覆盖大部分的Activity,所以通过--pct-appswitch将Activity切换的事件占比调整到10%;被测应用在测试过程中出现过不少横竖屏之间切换的问题,所以也要考虑到,因此通过--pct-rotation把横竖屏切换事件调整到10%。

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

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

⑤ 使用 --ignore-crashs 和 --ignore-timeouts 参数使Monkey遇到意外时能继续执行 在执行Monkey测试时,会因为应用的崩溃或没响应而意外终止,所以需要在命令中增加限制参数 --ignore-crash 和 --ignore-timeouts,让Monkey在遇到崩溃或没有响应的时候,能在日志中记⑥ 使用 -v 指定 log 的详细级别 Monkey的日志输出有3个级别:日志的级别越高,其详细程度也越高。为了方便问题的定位,这里可以将日志设为级别设定为: -v -v

5.3  执行测试命令

# 综合参数测试命令

bogon:~ Sirius$ adb shell monkey -v -v -p com.wandoujia.phoenix2 --pct-touch 30 --pct-motion 25 --pct-appswitch 10 --pct-rotation 10 -s 8888 --throttle 300 --ignore-crashes --ignore-timeouts 100

发布了37 篇原创文章 · 获赞 63 · 访问量 9686

猜你喜欢

转载自blog.csdn.net/xiao66guo/article/details/95335709