平时测试人员,在进行手机app 功能测试的时候,使用的测试方法都比较固定,点击按钮的位置,以及操作手机app的方式。都比较固定的。

现在手机作为可触摸的设备,有些地方测试人员平时不会去操作。monkey测试可以随机生成一些操作事件来操作手机。
一般情况,使用adb 命令做monkey 测试的比较多。
monkey 使用 官网教程:https://developer.android.google.cn/studio/test/monkey?hl=zh_cn

monkey 基本使用

  1. adb shell monkey 1000

随机生成1000个事件流,作用手机app 上。
默认monkey可以操作手机上所有的应用。

-p 指定测试包

通过 adb shell pm list package -3 可以过滤出自己公司应用的包名。
比如现在只测试 cnode 社区应用。

  1. adb shell monkey -p org.cnodejs.android.md 10000
  • -p org.cnodejs.android.md 指定运行的包
  • 10000 生成随机的10000个事件

—throttle 指定运行速度

默认运行的时候,当第一个事件运行完成之后,会自动运行第二个事件,速度很快,跟正常人类相比还有差距。用户在操作的时候,一般速度比较慢。使用 throttle 参数加入固定的延迟事件。

每个事件之间加入 500 ms 的延迟。

  1. adb shell monkey --throttle 500 -p org.cnodejs.android.md 1000
  • —throttle 500 两个事件之间加入 500ms 的延迟。

- vv 显示详细运行日志

默认运行monkey的时候,显示的信息很少。
image.png
添加 -vv 参数可以显示详细的运行日志。

  1. adb shell monkey -vv --throttle 500 -p org.cnodejs.android.md 1000

image.png

-s 指定种子值

在上一个操作的过程中,每次运行都会生成随机事件
image.png
在-vv 的日志中 看到上次运行的seed 值。 monkey 每次运行的时候都会生成随机事件。
如果我想将上一次的运行事件 再重新执行一次。可以添加 -s 参数指定种子值。
如果不指定,那么又会生成新的运行序列。

  1. adb shell monkey -s 1648354118213 -vv --throttle 500 -p org.cnodejs.android.md 100

-s 1648354118213 种子值,和这一次运行的事件保持一致。

运行日志保存到电脑

默认monkey 运行的日志输出在命令行。当命令行关掉,这些日志就不存在了。
所以在执行的时候最好将运行的日志保存到文件中,如果运行失败,后面方便定位问题。

  1. adb shell monkey -s 1648354118213 -vv --throttle 500 -p org.cnodejs.android.md 100 > C:\Users\zengy\Desktop\mongkeylogs\app.txt
  • C:\Users\zengy\Desktop\mongkeylogs\app.txt 将运行产生日志文件存放到电脑里。

image.png

monkey将app跑崩溃了会怎样?

上面的操作,都没有将app 跑崩溃, 说明app 还是比较稳定。
如果app 不稳定,长时间操作崩溃了。
崩溃的时候 日志中都有显示。

image.png
monkey 会有对应的错误信息/

  1. // Allowing start of Intent { cmp=one.hh.oneclient/.activitys.reading.SerialListActivity } in package one.hh.oneclient
  2. // Allowing start of Intent { cmp=one.hh.oneclient/.activitys.reading.SerialListActivity } in package one.hh.oneclient
  3. // CRASH: one.hh.oneclient (pid 3827)
  4. // Short Msg: java.lang.ArrayIndexOutOfBoundsException
  5. // Long Msg: java.lang.ArrayIndexOutOfBoundsException: length=19; index=-1
  6. // Build Label: samsung/dream2qltezh/dream2qltechn:7.1/N2G48H/G9550ZHU1AQEE:user/release-keys
  7. // Build Changelist: 700211026
  8. // Build Time: 1635238799000
  9. // java.lang.ArrayIndexOutOfBoundsException: length=19; index=-1
  10. // at java.util.ArrayList.get(ArrayList.java:413)
  11. // at one.hh.oneclient.activitys.reading.SerialActivity$7.goPrevSerial(SerialActivity.java:653)
  12. // at one.hh.oneclient.activitys.views.webviewcontent.OneContentWebView.onOpenSerialPrevRequest(OneContentWebView.java:1645)
  13. // at one.hh.oneclient.activitys.views.webviewcontent.OneContentWebView.access$1900(OneContentWebView.java:90)
  14. // at one.hh.oneclient.activitys.views.webviewcontent.OneContentWebView$23$1.run(OneContentWebView.java:641)
  15. // at android.os.Handler.handleCallback(Handler.java:751)
  16. // at android.os.Handler.dispatchMessage(Handler.java:95)
  17. // at android.os.Looper.loop(Looper.java:154)
  18. // at android.app.ActivityThread.main(ActivityThread.java:6176)
  19. // at java.lang.reflect.Method.invoke(Native Method)
  20. // at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
  21. // at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)
  22. //

将这些错误信息复制出来 发给开发即可。

monkey 平时怎么用

一般晚上下班之后,会将手机连在电脑上,执行monkey 指令,大概 执行30w次。一般能够跑到第二天早上。每次跑monkey 一般跑一个晚上。