monkey Android稳定性测试

  • monkey测试原理:
  • Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。也叫做“猴子测试”,是指没有测试经验的人甚至对计算机根本不了解的人(就像猴子一样)不需要知道程序的任何用户交互方面的知识,如果给他一个程序,他就会针对他看到的界面进行操作,其操作是无目的的、乱点乱按的。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
  • monkey特点:
  • 不可能使用monkey来指定做一样测试,重复做很多次。因为monkey产生的是伪随机的事件流。但是我们可以通过添加命令选项将操作限制在一定的范围内。
  • 测试需要的环境:
  • 1.先下载jdk   2.再下载sdk 
  • 打开手机的调试
  • 测试流程:
  • 进入到SDK的platform-tools文件目录下执行adb命令。
  • 打开终端:输入 adb devices。

       

  • 因为需要对自己的测试包进行指定的测试,所以需要知道包名(可以和开发要一下),也可以通过命令:adb shell pm list获得你的测试包的包名,输入 adb shell pm list packages -3 查看手机上所有的第三方安装包,尽量让测试机少安装第三方软件,这样可以尽快的找到想要的安装包名称;
  • monkey的使用,是以命令的方式让真机或模拟器工作,熟悉他的命令
  • options的类型及其使用:下面将Monkey的Options操作分为四类:常规类,事件类,约束类和调试类。
常规类命令 使用 详解
-h adb shell monkey -h 显示monkey参数帮助信息
-v adb shell monkey -v -v -v 打印出日志信息,每个-v将增加反馈信息的级别,-v越多日志信息越详细:0级,除启动提示、测试完成和最终结果提供较少信息。1级,提供较详细调试信息,比如逐个发送到Activity的事件。2级,提供更详细安装信息,如测试中被选中或未被选中的Activity
事件类命令 使用 详解
-f adb shell monkey -f<测试脚本名> 表示要使用Monkey运行指定的脚本
-s adb shell monkey -s 指定随机数生成器seed值,如果用相同的seed值再次运行moneky,将重复执行刚才的随机操作
--throttle adb shell monkey --throttle<时间间隔> 表示每执行一个指令间隔的时间,单位ms,注意是-“--”开头
--pct-touch adb shell monkey --pct-touch 表示触摸事件百分比
--pct-motion adb shell monkey --pct-motion 表示动作事件百分比
--pct-trackball adb shell monkey --pct-trackball 表示轨迹球事件百分比
--pct-nav adb shell monkey --pct-nav 表示基本导航事件百分比
--pct-majornav adb shell monkey --pct-majornav 表示主要导航事件百分比
--pct-syskeys adb shell monkey --pct-syskeys 表示系统按键事件百分比
--pct-appswitch adb shell monkey --pct-appswitch 表示应用启动事件百分比
约束类命令 使用 详解
-p adb shell monkey -p<一个或者多个包名> 指定测试一个或者多个包
-c adb shell monkey -c<一个或者多个类别> 指定测试一个或者多个类别(即参数)
调试类命令 使用 详解
--dbg-no-events adb shell monkey --dbg-no-events 监视应用程序所调用的包之间的转换
--hprof adb shell monkey --hprof 在事件序列前后立即生成profiling report,在data/misc中生成5MB大小左右的文件
--ignore-crashes adb shell monkey --ignore-crashes 设置后,当应用程序崩溃或者发生异常的时候,Monkey将继续运行直到计数完成,而不会停止运行
--ignore-timeouts adb shell monkey --ignore-timeouts 设置后,当应用程序发生任何超时错误(比如ANR),Monkey将继续运行直到计数完成,而不会停止运行
--ignore-security-exceptions adb shell monkey --ignore-security-exceptions 设置后,当应用程序发生任何相关权限错误的时候,Monkey将继续运行直到计数完成,而不会停止运行
--monitor-native-crashes adb shell monkey--monitor-native-crashes 设置后,monkey会监视并报告Android系统的native code的崩溃事件
  • Moneky脚本的编写
事件 使用 详解
点击事件 DispatchPointer ( downTime , eventTime , action , x , y , pressure , size , metaState , xPrecision , yPrecision , device , edgeFlags) 其实这么多参数,只需要关注action 、 x 、y 三个参数即可。action :事件是按下还是抬起,0 表示按下,1 表示抬起。x、y:表示当前事件触发的X轴和Y轴的坐标
输入字符串事件 DispatchString(String text) 输入一个不加引号的字符串
启动应用 LaunchActivity ( pkg_name , act_name ) 用于打开任意应用的一个页面,但是前提条件是打开的Activity 需要属性 android:exported 被设定为true,才可以通过 LaunchActivity 打开
等待事件 UserWait(long sleeptime) 操作需要等待的事件,单位为毫秒
按下键值 DispatchPress(int keycode) 用于模拟敲击键盘的事件
长按键值 LongPress(int keycode) 用于模拟敲击键盘的事件
  • 日志生成两种形式及错误分析
  • 1、动态形式直接在控制台观看,
  • 2、另一种是在固定txt文件中生成日志进行查询分析,第二种比较方便参考语句:adb shell monkey -p com.tent -v  2000 > ~/Desktop/sdk/monkey_info.txt
  • 错误分析:查找关键字进行具体分析
  • (1)、ANR问题(程序无响应):在日志中搜索“ANR"(application no response)

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

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

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

  • 准确地获取控件坐标

       方法一:
     因为Monkey是基于坐标来操作控件的,所以必须准确地获取控件坐标才能进行正确测试。这里就需要getevent。在命令行上输       入adb shell getevent后,然后点击手机界面,会获得所点击的位置的十六进制坐标。

      monkey Android稳定性测试_第1张图片

      比如上图,我点击点一个文本框后输入的一系列数据(看起来好乱和复杂),每一行的三个数据分别代表type,code,                   value(具体的含义自己百度一下,这里就不多解释),然后其实我们只需要关注的是code为0035和0036这两行的数据,分别         代表触屏时的绝对坐标X和Y,然后将它们转为十进制的坐标就可以了,就这样我们得到了控件的x和y坐标。

      方法二:我推荐另外一种更简单的方式,来获取当前你看见的,在待测试设备上的控件的坐标点的定位方式。那就是利用                Android 设备的开发者选项。设置 → 开发者选项 → 指针位置 ,将这个属性开启之后,当手指在屏幕上滑动的时候,就可以在        顶部看到当前触摸点的 X、Y 轴的坐标,这就是我们需要的。

  • 编写monkey脚本模式
  • 首先:要在真机或模拟器上——开发者选项——打开指针位置(原因是monkey是通过找到坐标来模拟点击,所以每次进行点击前要先找到控件坐标)
  • monkeyscript是monkey的脚本语言,能够被monkey识别的命令集合,可以实现一些固定的重复性动作。Monkey可以通过命令加载脚本来进行测试,简单方便。Monkey脚本如何编写,官网并没有介绍,我们只能通过Moneky源码去学习如何编写脚本,可参考Monkey-Github的MonkeySourceScript.java类

    脚本格式如下:
    type= raw events
    count= 1
    speed= 1.0   
    start data >>   
     
    LaunchActivity(pkg_name, cl_name)  
    第一句到第三局就使用默认值,不需要改,其实这里设置是无效的,最终会采用命令行里的值;
    start data >> 表示开始执行下面所有的命令行
    LaunchActivity就是一个启动应用的命令
    脚本命令
    LaunchActivity(pkg_name, cl_name): 启动应用,第一个参数是包名,第二个是启动的activity名
    DispatchPointer(downtime,eventTime,action,x,y,xpressure,size,metastate,xPrecision,yPrecision,device,edgeFlags) :向指定位置发送单个手势,相当于我们把手指按在某个点上;这个方法参数有12个,但是我们主要关注owntime,eventTime,action,x,y这么几个参数,x,y表示按下的坐标,可以通过上一篇文章UI Automator获取,这在你想测试点击某个具体view是很有用的
    DispatchPress(keycode): 向系统发送一个固定的按键事件;例如home键,back键;参数是按键值 ,按键值可查看keycode
    UserWait:让脚本的执行暂停一段时间,做一个等待操作
    RotateScreen(rotationDegree, persist): 翻转屏幕,第一个参数是旋转角度,第二个是旋转后是否停在当前位置
    Tap(x, y) :单击事件,点击屏幕,参数是点击坐标
    Drag(xStart, yStart, xEnd, yEnd) :在屏幕上滑动,坐标是从哪一点滑到哪一点
    LongPress(): 长按2s
    ProfileWait(): 等待5s
    PressAndHold(x, y, pressDuration) :模拟长按 
    PinchZoom(x1Start, y1Start, x1End, y1End, x2Start, y2Start, x2End, y2End, stepCount): 模拟缩放
    DispatchString(input): 输入字符串
    RunCmd(cmd) :执行shell命令,比如截图 screencap -p /data/local/tmp/tmp.png
    DispatchFlip(true/false) :打开或者关闭软键盘
    UserWait(sleepTime) :睡眠指定时间
    DeviceWakeUp() :唤醒屏幕

  • 参考链接:https://blog.csdn.net/qq_30993595/article/details/80748559

 

你可能感兴趣的:(测试,monkey)