monkey稳定性测试的步骤及策略
阅读原文时间:2023年07月09日阅读:1

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)组成的,点击的按键就是其他的一些系统按键,如字母按键、数字按键等。因为现在手机很少带字母按键或数字按键,所以这个事件一般使用得比较少。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章