Monkey稳定性测试的步骤及策略

发表于:2021-3-03 09:35

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:逆风前进的狼    来源:博客园

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

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号