monkey操作说明

淳于泓
2023-12-01

异常测试结果
压力测试结果
1.CRASH:崩溃,应用程序在使用过程中,非正常退出
2.ANR(Application Not Responding):等待时间过长

配置ADB环境变量
进入SDK所在的目录,找到SDK,将…\sdk\platform-tools;…\sdk\tools添加到变量值中,再把变量加入path中,这样就可以使用ADB命令了。

压力测试实践
Step 1: 在手机开发者选项中,将USB调试连上
Step 2: 确认手机和电脑已经成功连接 adb devices
Step 3: 安装测试APP adb install package.apk
Step 4: 发送压力测试指令 adb shell monkey 1000(具体事件数)
Step 5: 获取APP包名 adb logcat | findstr start
Step 6: adb shell monkey-p package(包名) 1000(具体事件数)

1 运行cmd进入
2 打开monkey的安装目录
e:
cd E:\platform-tools_r22-windows\platform-tools

3 在当前目录运行需要测试的程序并设置测试测试,然后打印相关日志信息到指定目录文档:
adb shell monkey -p foxuc.qp.Glory.fjbwltest
-v 10000 >e:\log.txt

2、–throttle
  作用:在事件之间插入固定的时间(毫秒)延迟,你可以使用这个设置来减缓Monkey的运行速度,如果你不指定这个参数,则事件之间将没有延迟,事件将以最快的速度生成。
  一般这里设置为300毫秒,原因是实际上用户操作一个动作事件最快需要300毫秒左右,所以设置太小,也不符合正常用户的使用习惯,设置太大,又会发现不了问题。
  用法:adb shell “monkey –throttle 300”
  3、–pct-touch
  作用:调整monkey命令触摸事件的百分比。(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作),参数设置要根据被测应用程序的特点来修改设置。
  用法:adb shell “monkey --pct-touch 100”
  4、–pct-motion
  作用:调整motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成),需注意的是滑动事件是直线滑动,不适用曲线滑动。
  用法:adb shell “monkey --pct-motion 100”
  5、–pct-trackball
  作用:调整滚动球事件百分比。(滚动球事件由一个或多个随机的移动事件组成,有时会伴随着点击事件)
  这个参数现在不常使用,早期的android手机出厂自带滚动球,估计有些小伙伴们见过,但现在手机几乎没有滚动球,至少我没有见过,但滚动球事件中包含曲线滑动事件,如果被测应用需要曲线滑动时可以选用此参数。
  用法:adb shell “monkey --pct-trackball 100”
  6、–pct-nav
  作用:调整基本的导航事件百分比。(导航事件由方向输入设备的上下左右按键所触发的事件组成),这个参数不常用。
  用法:adb shell “monkey --pct-nav 100”
  7、–pct-majornav
  作用:调整主要导航事件的百分比。(这些导航事件通常会导致UI界面中的动作事件,如5-way键盘的中间键,回退按键、菜单按键),这个参数不常用。
  用法:adb shell “monkey --pct-majornav 100”
  8、–pct-syskeys
  作用:调整系统事件百分比。(这些按键通常由系统保留使用,如Home、Back、Start Call、End Call、音量调节),这个参数的百分比通常比较小。
  用法:adb shell “monkey --pct-syskeys 3”
  9、–pct-appswitch
  作用:调整Activity启动的百分比。(在随机的时间间隔中,Monkey将执行一个startActivity()调用,作为最大程度覆盖被测包中全部Activity的一种方法)
  用法:adb shell “monkey --pct-appswitch 100”
  10、–pct-anyevent
  作用:调整其他事件的百分比。(这包含所有其他事件,如按键、其他在设备上不常用的按钮等),这个参数不常用。
  用法:adb shell “monkey --pct-anyevent 100”
  11、-p
  作用:如果你想指定一个或多个应用,Monkey将只启动这些包中的Activity。如果不指定任何包,Monkey将启动系统所有包的Activity。指定多个包,使用多个-p,一个-p后面接一个包名。
  用法:adb shell “monkey -p com.Android.browser”
  12、–ignore-crashes
  作用:应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
  用法:adb shell “monkey --ignore-crashes”
  13、–ignore-timeouts
  作用:应用程序发生任何超时错误(例如:ANR)时,Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
  用法:adb shell “monkey --ignore-crashes”
  14、–ignore-security-exception
  作用:当程序发生许可错误(例如启动一些需要许可的Activity)导致的异常时,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
  用法:adb shell “monkey --ignore-security-exception”
  15、–kill-process-after-error
  作用:当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。设置此项,将会通知系统停止发生错误的进程。注意,正常(成功)的结束,并没有停止启动的进程,设备只是在结束事件之后简单的保持在最后的状态。
  用法:adb shell “monkey --kill-process-after-error”
  16、-v
  作用:命令行上的每一个-v都将增加反馈信息的详细级别。(最多使用3个-v)
  Level 0(默认),除了启动、测试完成和最终结果外只提供较少的信息。
  Level 1,提供了较为详细的测试信息,如逐个发送到Activity的事件信息。
  Level 2,提供了更多的设置信息,如测试中选中或未选中的Activity信息。
  用法:adb shell “monkey -v -v -v”
  17、-s
  作用:伪随机数生成器的seed值。如果用相同的seed值再次运行monkey,将生成相同的事件序列。
  用法:adb shell “monkey -s 300”
  最近测试的项目属于短视频类的,这样结合这些monkey参数和被测应用的特点(滑动和点击操作比较多)。组合的monkey的命令如下:
  adb shell “monkey -p com.xxx.video -v -v -v -s 100 --throttle 300 --pct-touch 35 --pct-motion 41 --pct-syskeys 2 --pct-appswitch 20 --pct-anyevent 2 --ignore-security-exceptions --ignore-crashes --ignore-timeouts 1000000 1 >/sdcard/xxxlog.txt 2> /sdcard/xxxlog_error.txt& logcat -v time -d >sdcard/xxx_logcat.txt”

测试结果分析:

(1)、ANR问题(程序无响应):在日志中搜索“ANR"(application no response)

(2)、闪退问题:在日志中搜索"crash"

(3)、异常:搜索"exception"

(4)、强制退出:搜索"force closed"


快速从monkey.txt日志中看问题
测试结果初步判断
monkey执行时未加–ignore-crashes --ignore-crashes参数,就先浏览日志中Events injected: 值,查看当前已执行的次数,就知道有无bug
程序无响应的问题:在日志中搜索 “ANR”
崩溃问题:在日志中搜索 “Exception” ,在这里顺便提一下常见的Java异常:
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
操作数据库异常:SQLException
输入输出异常:IOException
违法访问错误:IllegalAccessError
内存不足错误:OutOfMemoryError
堆栈溢出错误:StackOverflowError 15.其他,请参考:https://www.cnblogs.com/cvst/p/5822373.html

ADB命令大全

1.查看设备
adb devices

2.安装软件
adb install <apk文件路径>
这个命令将指定的apk文件安装到设备上。

3.卸载软件
adb uninstall <软件名>
adb uninstall -k <软件名>
如果加 -k 参数,为卸载软件但是保留配置和缓存文件。

4.登录设备shell

adb shell
adb shell <command命令>
这个命令将登录设备的shell.
后面加command命令将是直接运行设备命令, 相当于执行远程命令。

5.从电脑上发送文件到设备
adb push <本地路径> <远程路径>
用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机)。

6.从设备上下载文件到电脑
adb pull <远程路径> <本地路径>
用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑。

7.显示帮助信息
adb help
这个命令将显示帮助信息。

8.在命令行中查看LOG信息
adb logcat -s 标签名

9.启动Activity
adb shell am start -n 包名/包名 + 类名

10.列出手机装的所有app的包名
adb shell pm list packages

11.列出系统应用的所有包名
adb shell pm list packages -s

12.列出除了系统应用的第三方应用包名
adb shell pm list packages -3

13.使用 findstr 来过滤
adb shell pm list packages | findstr qq

14.清除应用数据与缓存
有些时候我们测试需要清除数据与缓存,则需要用到如下命令:
adb shell pm clear

15.强制停止应用
adb shell am force-stop

16.查看日志
adb logcat

17.重启
adb reboot

18.获取序列号
adb get-serialno
有两种方式
1、 adb get-serialno
2、 adb shell getprop ro.serialno

19.获取 MAC 地址
adb shell cat /sys/class/net/wlan0/address

20.查看设备型号
adb shell getprop ro.product.model

21.查看 Android 系统版本
adb shell getprop ro.build.version.release

22.查看屏幕分辨率
adb shell wm size

23.查看屏幕密度
adb shell wm density

三、注意事项
1.Adb连接
USB连接手机后,发现ADB连接不上
命令:adb kill-server
adb start-server

  1. adb pull命令使用
    a,复制手机文件夹到电脑,电脑路径名一定要是文件夹
    b,复制手机文件或者APK,电脑路径一定要是已在电脑建立的文件夹名

四、非常规ADB命令使用

列出手机装的所有app的包名:
adb shell pm list packages

列出系统应用的所有包名:
adb shell pm list packages -s

列出除了系统应用的第三方应用包名:
adb shell pm list packages -3

列出手机每个包的文件位置:
adb shell pm list packages -f

列出手机禁止的应用的包名(停用):
adb shell pm list packages -d

列出手机可用的应用的包名:
adb shell pm list packages -e

查看到引用的安装者:
adb shell pm list packages -i

PM清除应用数据:
pm clear

pm禁止与启用应用

pm enable <pakcage_or_component>
pm disable <pakcage_or_component>

应用默认安装位置控制

pm set install locate
0:自动:让系统决定最好的位置
1:内部存储:安装在内部设备上的存储
2:外部存储:安装在外部媒体

返回当前安装位置
pm get install locate


分析log

l 日志开头:显示本次测试seed值,执行次数,测试包,

l 日志结尾:
如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间;Monkey finished代表执行完成。
(如果Monkey执行中断,在log的最后也能查看到当前已执行的次数。)

l 日志内容分析

一般测试结果分析-搜索关键字:
1.程序无响应,ANR问题:在日志中搜索“ANR”
2.崩溃问题:在日志中搜索“CRASH”
3.其他问题:在日志中搜索”Exception”

详细分析monkey日志

Switch–查看log中的Switch,主要是查看Monkey执行的是那一个Activity,两个swtich之间如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。
Sleeping–Sleeping for 500 milliseconds这是执行Monkey测试时,throttle设定的间隔时间,每出现一次,就代表一个事件。

重现问题
Monkey测试出现错误后,一般的查错步骤为以下几步:
1.找到是monkey里面的哪个地方出错
2.查看Monkey里面出错前的一些事件动作,并手动执行该动作
3.若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样

===========================================================================================================
二、质量要求:
版本release(发布)前,Monkey跑出来的结果中crash要为0,final release前,Monkey跑完的总次数应为25W,结果里不允许有nullPointException出现。

三、Monkey命令参数:
1> -p
用于约束限制,用此参数指定一个或者多个包,指定包之后,monkey将只允许启动指定app,如果不指定包,monkey将启动系统中所有的app 。
例:指定一个包 monkey -p com.htc.weather -v 1000
指定多个包 monkey -p com.htc.weather -p com.htc.pdfreader -p com.htc.photo.widgets -v 1000
不指定包 monkey -v 1000
2> -v
用于指定反馈的信息级别(日志的详细程度),分为三个级别,级别越高,日志越详细。
level 0:

例:monkey -p com.htc.weather -v 1000

level 1:
例:monkey -p com.htc.weather -v -v 1000
level 2:
例:monkey -p com.htc.weather -v -v -v 1000
3> -s
指定伪随机数生成器的seed值,如果seed相同,则两次monkey 测试产生的事件序列也相同。
例: monkey -p com.htc.weather -s 35 -v 1000
4> --throttle(毫秒)
制定每个事件结束后的间隔时间,降低系统压力。(如果不指定系统会尽快的发送事件序列)
例:monkey --throttle 300
5> 定制事件
–pct-touch:指定触摸事件的百分比,例:–pct-touch 5% , 其他相关的:
–pct-motion (滑动事件)
–pct-trackball (轨迹球事件)
–pct-nav (导航事件 up/down/left/right)
–pct-majornav (主要导航事件 back key 、 menu key)
–pct-syskeys (系统按键事件 Home 、Back 、startCall 、 endCall 、 volumeControl)
–pct-appswitch (activity之间的切换)
–pct-anyevent (任意事件)
6>调试选项
–dbg-no-events:初始化启动的activity,但是不产生任何事件。
–hprof:指定该项后在事件序列发送前后会立即生成分析报告 —— 一般建议指定该项。
–ignore-crashes:忽略崩溃
–ignore-timeouts:忽略超时
–ignore-security-exceptions:忽略安全异常
–kill-process-after-error:发生错误后直接杀掉进程
–monitor-native-crashes:跟踪本地方法的崩溃问题
–wait-dbg:知道连接了调试器才执行monkey测试。

=========================================

获取手机内所有apk软件的包名
adb shell pm list package

清除应用数据与缓存
adb shell pm clear com.demeter.dwdcoco
卸载
adb uninstall com.tencent.dwdcoco
安装
adb install E:\jjliu_work\小鹅拼拼\小鹅拼拼app\安装包\椰子-0.1.0.3023-debug.apk
adb install E:\jjliu_work\橙子项目\橙子安卓端项目12月启动\测试包\app-debug-20220221.apk
覆盖低版本APK
Android设备有更小版本Apk,进行覆盖安装:
adb install -r E:\jjliu_work\小鹅拼拼\小鹅拼拼app\安装包\椰子-0.1.0.3023-debug.apk
覆盖高版本:
Android设备有更高版本Apk,进行覆盖安装:adb install -r -d
adb install -r -d C:\Users\AllenJ\Desktop\线上\xiaomi_highger.apk

1、查看屏幕分辨率
adb shell wm size
2、获取手机系统版本
adb shell getprop ro.build.version.release  
3、获取手机系统api版本
adb shell getprop ro.build.version.sdk  
4、获取手机设备型号
adb -d shell getprop ro.product.model
5、获取手机厂商名称
adb -d shell getprop ro.product.brand  
6、获取手机的序列号
有两种方式
1、 adb get-serialno
2、 adb shell getprop ro.serialno
录制视频
adb shell screenrecord /sdcard/demo.mp4
说明:录制手机屏幕,视频格式为mp4,存放到手机sd卡里,默认录制时间为180s。按Ctrl+C结束录制
限制录制时间 参数: --time-limit
adb shell screenrecord --time-limit 10 /sdcard/demo.mp4
说明:限制视频录制时间为10s,如果不限制,默认180s
指定视频分辨率大小(测试无效) 参数: --size
adb shell screenrecord --size 1280*720 /sdcard/demo.mp4
说明:录制视频,分辨率为1280x720,如果不指定默认使用手机的分辨率,为获得最佳效果,请使用设备上的高级视频编码(AVC)支持的大小

口袋节奏:
com.demeter.orange

monkey测试
adb shell monkey -p com.demeter.dwdcoco -s 30 --pct-trackball 40 --pct-touch 35 --pct-syskeys 2 --pct-appswitch 20 --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes -v -v -v 1000 >E:/xepp_monkey12.txt
脚本1:
adb shell monkey -p com.demeter.dwdcoco -s 30 --pct-trackball 20 --pct-touch 30 --pct-syskeys 20 --pct-appswitch 20 --throttle 100 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes -v 500000 >E:/monkey.txt
脚本2:
adb -s b140af12 shell monkey -v -p com.tencent.dwdcoco --pct-majornav 20 --monitor-native-crashes --ignore-security-exceptions --ignore-crashes --ignore-timeouts --kill-process-after-error -s 250 --throttle 200 600000 >E:\20210419nubiy_monkey_test.log


monkey -p com.tencent.dwdcoco -s 246 --pct-trackball 6 --pct-touch 10 --pct-syskeys 10 --pct-appswitch 10 --throttle 200 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes -v 8300000

{
“platformName”: “Android”,
“platformVersion”: “9.0”,
“appPackage”: “com.tencent.mm”,
“appActivity”: “com.tencent.mm.ui.launcherUI”
}

 类似资料: