平时测试人员,在进行手机app 功能测试的时候,使用的测试方法都比较固定,点击按钮的位置,以及操作手机app的方式。都比较固定的。
现在手机作为可触摸的设备,有些地方测试人员平时不会去操作。monkey测试可以随机生成一些操作事件来操作手机。
一般情况,使用adb 命令做monkey 测试的比较多。
monkey 使用 官网教程:https://developer.android.google.cn/studio/test/monkey?hl=zh_cn
monkey 基本使用
adb shell monkey 1000
随机生成1000个事件流,作用手机app 上。
默认monkey可以操作手机上所有的应用。
-p 指定测试包
通过 adb shell pm list package -3 可以过滤出自己公司应用的包名。
比如现在只测试 cnode 社区应用。
adb shell monkey -p org.cnodejs.android.md 10000
- -p org.cnodejs.android.md 指定运行的包
- 10000 生成随机的10000个事件
—throttle 指定运行速度
默认运行的时候,当第一个事件运行完成之后,会自动运行第二个事件,速度很快,跟正常人类相比还有差距。用户在操作的时候,一般速度比较慢。使用 throttle 参数加入固定的延迟事件。
每个事件之间加入 500 ms 的延迟。
adb shell monkey --throttle 500 -p org.cnodejs.android.md 1000
- —throttle 500 两个事件之间加入 500ms 的延迟。
- vv 显示详细运行日志
默认运行monkey的时候,显示的信息很少。
添加 -vv 参数可以显示详细的运行日志。
adb shell monkey -vv --throttle 500 -p org.cnodejs.android.md 1000
-s 指定种子值
在上一个操作的过程中,每次运行都会生成随机事件
在-vv 的日志中 看到上次运行的seed 值。 monkey 每次运行的时候都会生成随机事件。
如果我想将上一次的运行事件 再重新执行一次。可以添加 -s 参数指定种子值。
如果不指定,那么又会生成新的运行序列。
adb shell monkey -s 1648354118213 -vv --throttle 500 -p org.cnodejs.android.md 100
-s 1648354118213 种子值,和这一次运行的事件保持一致。
运行日志保存到电脑
默认monkey 运行的日志输出在命令行。当命令行关掉,这些日志就不存在了。
所以在执行的时候最好将运行的日志保存到文件中,如果运行失败,后面方便定位问题。
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 将运行产生日志文件存放到电脑里。
monkey将app跑崩溃了会怎样?
上面的操作,都没有将app 跑崩溃, 说明app 还是比较稳定。
如果app 不稳定,长时间操作崩溃了。
崩溃的时候 日志中都有显示。
monkey 会有对应的错误信息/
// Allowing start of Intent { cmp=one.hh.oneclient/.activitys.reading.SerialListActivity } in package one.hh.oneclient
// Allowing start of Intent { cmp=one.hh.oneclient/.activitys.reading.SerialListActivity } in package one.hh.oneclient
// CRASH: one.hh.oneclient (pid 3827)
// Short Msg: java.lang.ArrayIndexOutOfBoundsException
// Long Msg: java.lang.ArrayIndexOutOfBoundsException: length=19; index=-1
// Build Label: samsung/dream2qltezh/dream2qltechn:7.1/N2G48H/G9550ZHU1AQEE:user/release-keys
// Build Changelist: 700211026
// Build Time: 1635238799000
// java.lang.ArrayIndexOutOfBoundsException: length=19; index=-1
// at java.util.ArrayList.get(ArrayList.java:413)
// at one.hh.oneclient.activitys.reading.SerialActivity$7.goPrevSerial(SerialActivity.java:653)
// at one.hh.oneclient.activitys.views.webviewcontent.OneContentWebView.onOpenSerialPrevRequest(OneContentWebView.java:1645)
// at one.hh.oneclient.activitys.views.webviewcontent.OneContentWebView.access$1900(OneContentWebView.java:90)
// at one.hh.oneclient.activitys.views.webviewcontent.OneContentWebView$23$1.run(OneContentWebView.java:641)
// at android.os.Handler.handleCallback(Handler.java:751)
// at android.os.Handler.dispatchMessage(Handler.java:95)
// at android.os.Looper.loop(Looper.java:154)
// at android.app.ActivityThread.main(ActivityThread.java:6176)
// at java.lang.reflect.Method.invoke(Native Method)
// at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:891)
// at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:781)
//
将这些错误信息复制出来 发给开发即可。
monkey 平时怎么用
一般晚上下班之后,会将手机连在电脑上,执行monkey 指令,大概 执行30w次。一般能够跑到第二天早上。每次跑monkey 一般跑一个晚上。