monkey稳定性测试的步骤及策略
1、adb的作用是什么?
adb的全称:android debug bridge 安卓调试桥梁,包含在 Android SDK 平台工具软件包中。通过该命令与设备进行通信,以便进行调试
adb可以同时管理多个安卓设备
2、monkey测试环境搭建
1)下载并安装JDK包,设置环境变量
2)下载Android SDK包并解压,配置环境变量
E:\Android SDK\Adt Bundle\sdk\tools monkey环境路径
E:\Android SDK\Adt Bundle\sdk\platform-tools adb环境路径
3)启动dos窗口,分别输入
C:\Users\Administrator>java -version
java version "1.8.0_181"
Java(TM) SE Runtime Environment (build 1.8.0_181-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
C:\Users\Administrator>adb version
Android Debug Bridge version 1.0.31
C:\Users\Administrator>monkeyrunner
Jython 2.5.0 (Release_2_5_0:6476, Jun 16 2009, 13:33:26)
[Java HotSpot(TM) 64-Bit Server VM (Oracle Corporation)] on java1.8.0_181
命令查看环境是否搭建好
3、连接设备
1)手机与PC通过数据线连接,在手机系统设置里开启开发者模式和USB调试模式,设置屏幕为常亮
2)在dos窗口输入 adb devices命令查看设备是否连接上了
C:\Users\Administrator>adb devices
List of devices attached
9656c4f7 device
adb 子命令参考
logcat 打印出安卓系统日志
adb logcat -d >E:\1.txt
-d 一次性返回日志信息,不需要实时跟踪
>E:\1.txt 重定向并保存日志
install 将某个.apk文件安装到指定设备
adb install D:\test\weitaixin.apk
uninstall 从指定设备上卸载一个应用,根据包名卸载模拟器中的APP
adb uninstall cn.xxxx.xxxx
获取报名方式
1)通过解包方式
C:\Users\Administrator>aapt dump badging E:xxx.0apk
package: name='cn.xxx.xxx' versionCode='2701' versionName='2.7.0'
sdkVersion:'19'
targetSdkVersion:'26'
2)通过adb命令获得所有报名
adb shell pm list packages
(package manager)
3)模糊报名进行过滤(前提:知道大概的报名)
adb shell pm list packages weitaixin
4)通过管道符 grep进行过滤(前提:知道大概的报名)
C:\Users\Administrator>adb shell
PBEM00:/ $ pm list packages |grep weitai
pm list packages |grep weitai
package:cn.xxx.xxx
5)通过启动程序,获取当前启动程序的包名
C:\Users\Administrator>adb shell
PBEM00:/ $ dumpsys window |grep mCurrent
dumpsys window |grep mCurrent
mCurrentUserId=0
mCurrentFocus=Window{fe0aeaf u0 cn.xxx.xxx/cn.xxx.xxx.ui.main.MainActivity}
mCurrent=[0,96][1080,2208]
mCurrentAppOrientation=SCREEN_ORIENTATION_PORTRAIT
mCurrentRotation=ROTATION_0
6)找到目录,获取指定文件
C:\Users\Administrator>adb shell
PBEM00:/ $ cd /data/data
cd /data/data
PBEM00:/data/data $ ls
pull 把Adroid设备中的文件复制到本地开发机
例如:
adb pull /data/data/1.txt D:\2.txt
手机端的路径和文件 PC端的路径及重命名
push 把本地开发机上的文件复制到安卓设备中
例如:abd push C:\1.xt /data/data
PC端的位置和文件 手机端的位置
get-serialno 打印设备的序列表
get-state 打印设备状态
kill-server 结束adb服务进程
shell 打开指定安卓设备的shell,以执行shell命令
adb shell 进入安卓命令状态 安卓系统是基于linux内核开发的,安卓命令和linux命令相似
pwd:查看当前所在目录
ls -l 查看当前目录下的资源属性
date 打印当前系统时间
cat /proc/meminfo 查看内存信息
cat /proc/cpuinfo 查看CPU信息
ps 查看当前进程信息
Monkey测试:是Android中的一个命令行工具,可以运行在模拟器里和实际设备中。他向系统发送伪随机事件流(如:按键输入,触摸屏输入,手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法
ANR: application not response 应用程序无响应。用户可以选择等待而让程序继续运行,也可以选择强制关闭。所以一个流畅的合理的APP不能出现ANR,而让用户每次都要处理这个对话框。在Android系统中Activity的最长执行事件是5s,BroadcastReceiver的最长执行时间则是10s。
adb shell monkey -p cn.xxx.xxx--pct-touch 5 --pct-motion 5 --pct-syskeys 5 -s 10 --ignore-crashes -v -v -v 100
根据不同业务配置不同操作的比重
参数:-p 含义:用于约束限制,用此参数指定一个或者多个包
指定多个包:adb shell monkey -p cn.xxx.xxx 10 -p cn.xxx.xxx 10
指定一个包:adb shell monkey -p cn.xxx.xxx 10
不指定包,系统层面的测试:adb shell monkey 100
参数:-v 含义:用户反馈信息级别(信息级别就是日志的详细程度),总共3个级别(0-2)
日志级别:level0
示例:adb shell monkey -p cn.xxx.xxx -v 10
说明缺省值,仅提供启动提示、测试完成和最终结果等少量信息
日志级别level1
示例:adb shell monkey -p cn.xxx.xxx -v -v 10
说明提供较为详细的日志,包括每个发送到activity的事件信息
日志级别level2
示例:adb shell monkey -p cn.xxx.xxx -v -v -v 10
说明最详细的日志,包括了测试中选中/未选中的Activity信息
参数: -s 含义:用于生成伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也是相同的。
monkey测试1
adb shell monkey -p cn.xxx.xxx -s 10 100
monkey测试2
adb shell monkey -p cn.xxx.xxx -s 10 100
参数:--throttle<毫秒> 含义:用于指定用户操作(即事件)间的延时,单位是毫秒
示例:
adb shell monkey -p cn.xxx.xxx --throttle 500 100
参数:--ignore-crashes 含义:用于指定当前应用程序崩溃时(Force&Close错误),monkey是否停止运行,如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成
示例:
adb shell monkey -p cn.xxx.xxx --ignore-crashes -s 10 -v -v -v 10
常用调试选项:
--ignore-crashes:忽略崩溃
--ignore-timeouts:忽略超时
--ignore-security-exceptions:忽略安全异常
--ignore-native-crashes:忽略本地崩溃
--monitor-native-crashes:跟踪本地方法的崩溃问题
--kill-process-after-error:发生错误后直接杀掉进程
--wait-dbg:直到连接了调试器才执行monkey测试
--dbg-no-events:初始化启动的activity,但不产生任何事件
--hprof:指定该项后在事件序列发送前后会立即生成分析报告
参数:--pct-{事件类别}{事件百分比}
含义:用于指定每种类别事件的数目百分比(在monkey事件序列中,该类事件数目占总事件数目的百分比)
示例: --pct-touch{百分比}
调整触摸事件的百分比(触摸事件是down-up事件)
adb shell monkey -p cn.xxx.xxx --pct-touch 80 1000
常用事件类型
--pct-motion (滑动事件)
--pct-trackball(轨迹球事件)
--pct-nav(导航事件up/down/left/right,老手机的上下左右按键)
--pct-majornav(主要导航事件back key,menu key)
--pct-syskey(系统按键事件Home、Back、startCall、endCall volumeControl)
--pct-appswitch(activity之间的切换)
--pct-anyevent(任意事件)常用异常处理指令,直接使用
--pct-pinchzoom二指缩放事件
--pct-rotation屏幕旋转事件
--pct-flip键盘事件
操作事件简介
Monkey所执行的随机事件流中包含11大事件,分别是触摸事件、手势事件、二指缩放事件、轨迹事件、屏幕旋转事件、基本导航事件、主要导航事件、系统按键事件、启动Activity事件、键盘事件、其他类型事件。Monkey通过这11大事件来模拟用户的常规操作,对手机App进行稳定性测试。下面让我们来详细了解这11大事件。
1.触摸事件
触摸事件是指在屏幕某处按下并抬起的操作,可通过--pct-touch参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到。 该事件由一组Touch(ACTION_DOWN)和Touch(ACTION_UP)事件组成,在手机上看到实际操作类似于点击。
2.手势事件
手势事件是指在屏幕某处的按下、随机移动、抬起的操作,即直线滑动操作。可通过--pct-motion参数来配置其事件百分比。
该事件是由一个ACTION_DOWN事件、一系列ACTION_MOVE事件和一个ACTION_UP事件组成的,在手机上看到的实际操作是一个没有拐弯的直线滑动操作。
3.二指缩放事件
二指缩放事件是指在屏幕上的两处同时按下,并同时移动,最后同时抬起的操作,即智能机上的放大缩小手势操作。可通过--pct-pinchzoom参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到:
该事件起始是一个ACTION_DOWN事件和一个ACTION_POINTER_DOWN事件,即模拟两个手指同时点下;中间是一系列的ACTION_MOVE事件,即两个手指同时在屏幕上直线滑动;结束是由一个ACTION_POINTER_UP事件和一个ACTION_UP事件组成的,即两个手指同时放开。
4.轨迹事件
轨迹事件是由一个或多个随机的移动组成的,有时会伴随着点击。很早之前的Android手机带有轨迹球,这个事件就是模拟的轨迹球的操作。现在的手机几乎都没有轨迹球,但轨迹球事件中包含曲线滑动操作,如果被测程序需要曲线滑动时可以选用此参数。可通过--pct-trackball参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到:
该事件是由一系列的Trackball(ACTION_MOVE)事件组成的,观察手机上的操作,即为一系列的曲线滑动操作。
5.屏幕旋转事件
屏幕旋转事件是一个隐藏事件,在Android官方文档中并没有记录这个事件。它其实是模拟的Android手机的横屏和竖屏切换。可通过--pct-rotation参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件由一个rotation事件组成,其中degree表示的是旋转方向,顺时针旋转,0表示旋转90度的方向,1表示旋转180度的方向,2表示旋转270度的方向,3表示旋转360度的方向。在执行过程中,可以看到手机屏幕在横竖屏之间不断地切换。
6.基本导航事件
基本导航事件是指点击方向输入设备的上、下、左、右按键的操作,现在手机上很少有上、下、左、右按键,这种事件一般用得比较少。可通过--pct-nav参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到:
该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的就是上、下、左、右四个方向按键。
7.主要导航事件
主要导航事件是指点击“主要导航”按键的操作,这些按键通常会导致UI界面中的动作,如键盘的中间键、回退按键、菜单按键。可通过--pct-majornav参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的按键就是中间键和菜单键。
8.系统按键事件
系统按键事件是指点击系统保留使用的按键的操作,如点击Home键、返回键、音量调节键等。可通过--pct-syskeys参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的就是上面说到的几个系统按键。
9.启动Activity事件
启动Activity事件是指在手机上启动一个Activity的操作。在随机的时间间隔中,Monkey将执行一个startActivity()方法,作为最大限度上覆盖被测包中全部Activity的一种方法。可通过--pct-appswitch参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件是由一个Switch操作组成的,从手机上看,上面的操作实际是打开了com.android.settings这个应用的一个com.android.settings.Settings的Activity界面。
10.键盘事件
键盘事件主要是一些与键盘相关的操作。比如点击输入框、键盘弹起、点击输入框以外区域、键盘收回等。可通过--pct-flip参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 如日志所示,这里主要是键盘的打开和关闭操作。
11.其他类型事件
其他类型事件包括了除前面提到的10种事件外其他所有的事件,如按键、其他不常用的设备上的按钮等。可通过--pct-anyevent参数来配置其事件百分比。从Monkey执行该事件对外输出的日志可以看到: [代码] 该事件是由一个Key(ACTION_DOWN)和一个Key(ACTION_UP)组成的,点击的按键就是其他的一些系统按键,如字母按键、数字按键等。因为现在手机很少带字母按键或数字按键,所以这个事件一般使用得比较少。