zoukankan      html  css  js  c++  java
  • Monkey APP压力稳定性测试

    一、monkey 的使用场景

      Monkey 测试是 Android 平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball(轨迹球)、按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常

    用来做什么的

    • 压力稳定性测试
    • 做自动化测试
    • Monkey 主要用于Android 的压力测试 自动的一个压力测试小工具, 主要目的就是为了测试app 是否会Crash(崩溃)

    monkey什么时候用?

    • 等你们的产品稳定,没有特别多的bug时候,一般会用monkey去测试
    • 测应用的稳定性、健壮性(是否会发生闪退、崩溃) ; 整机测试

    app会出现哪些异常

    二、monkey 测试步骤

    • 1、启动安卓模拟器/真机,怎么连接真机需要开启开发者模式,百度下很简单
    • 2、点击运行 -- 输入cmd --- 进入命令行界面
    • 3、查看设备连接情况:adb devices
      • 夜神模拟器默认端口 62001  
      • adb connect 127.0.0.1:62001 
    • 链接手机的状态下,在命令行界面输入monkey 命令测试APP
      • adb shell monkey -p com.lemon.lemonban --ignore-crashes --ignore-timeouts --throttle 400 -v -v -v -s 3500 10000 > D:monkey_log.txt  
      • 命令主要意思:指定安装包名、忽略崩溃、忽略超时、时间间隔、执行100000次、指定日志输出到本地  
    • 如果Monkey需要指定设备,基本语法如下:
      • $ adb -S [device] shell monkey [options]  

    三、怎么获取APP的包名

      在测试过程中我们需要 APP 包名来测试是否会出现崩溃的情况 

    1、真机或模拟器与电脑链接

    2、真机或模拟器打开APP应用

    3、输入获取当前开启应用的包名,命令:

    • Android 8.0以下输入命令:
      • adb shell dumpsys activity I find "mFocusedActivity"  
    • Android 8.0 或以上版本命令:
      • adb shell dumpsys activity | find "mResumedActivity"  

    四、monkey 命令

    1.money 执行次数

    • 一般小项目十万次,大项目一百万次

    2.测试APP主要命令:

    • adb shell monkey -p com. lemon.lemonban --ignore-crashes --ignore-timeouts --throttle 400 -v -v -v -s 3500 10000 > D:monkey_log.txt
      • 命令解释:指定安装包名、忽略崩溃、忽略超时、时间间隔、执行100000次、指定日志输出到本地

    3.各字段解释

    -p

    • 用于约束限制,用此参数指定一个或多个包(Package,即App)。指定包之后,monkey将只允许系统启动指定的APP,如果不指定包,将允许系统启动设备中的所有APP.
    • 指定一个包: adb shell monkey -p tv.danmaku.bili 10
    • 指定多个包:adb shell monkey -p cn.emoney.acg –p cn.emoney.wea -p cn.emoney.acg 100
    • 不指定 -p 包名:adb shell monkey 100
      • 不指定包名,会随机指定手机中的安装包,对整个系统进行monkey 测试  
    • com.tencent.edu为包名, 100是事件计数(即让Monkey程序模拟1000次随机用户事件)

    --ignore-crashes

    • 忽略崩溃
      • 用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。
        • 因为Monke执行的时候如果碰到了App崩溃的问题,默认停止运行,所以需要忽略崩溃
    • 命令
      • adb shell monkey -p cn.emoney.acg --ignore-crashes 1000
        • 测试过程中即使 acg 程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止
      • adb shell monkey -p cn.emoney.acg 1000
        • 测试过程中,如果acg程序崩溃,Monkey将会停止运行

    --ignore-timeouts

    • 忽略超时
      • 用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。  
    • 命令
      • adb shellmonkey -p cn.emoney.acg --ignore-timeouts 1000  

    --throttle <毫秒>

    • 用于指定用户操作(即事件)间的延迟,单位是毫秒;指定事件之间的时间间隔  
    • 命令
      • adb shell monkey -p cn.emoney.acg –throttle 5000 100

    -v

      日志级别:用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:

    • 日志级别 Level0  
      • 示例:adb shell monkey -p cn.emoney.acg –v 100  
      • 说明 缺省值,仅提供启动提示、测试完成和最终结果等少量信息  
    • 日志级别 Level 1  
      • 示例:adb shell monkey -p cn.emoney.acg –v -v 100  
      • 说明 提供较为详细的日志,包括每个发送到Activity的事件信息      
    • 日志级别 Level 2:一般使用这个    
      • 示例:adb shell monkey -p cn.emoney.acg –v -v –v 100      
      • 说明 最详细的日志,包括了测试中选中/未选中的Activity信息

    -s

      用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。

    • 命令
      • Monkey 测试1:adb shell monkey -p cn.emoney.acg –s 10 100  
      • Monkey 测试2:adb shell monkey -p cn.emoney.acg –s 10 100  
      • 10 是-s的伪随机数,100是事件数  
    • 说明
      • 两次测试的效果是相同的,因为模拟的用户操作序列  
      • (每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的
      • 操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,  
      • 就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;  

    --ignore-security-exceptions

    • 忽略许可异常
      • 用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。  
    • 命令
      • adb shell monkey -p cn.emoney.acg --ignore-security-exception 1000

    --randomize-throttle

    • 事件之间增加延迟
      • 在事件之间插入随机延迟,随机延迟范围为0到throttle设置的时间,单位为毫秒  
      • 如果使用随机延迟,一定要加上固定延迟--throttle <毫秒>  
    • 命令
      • adb shell monkey -p com.lemon.lemonban --throttle 5000 --randomize-throttle 100  
      • 说明:执行一百次monkey随机事件 ,每次事件的间隔在0到5000毫秒之间不固定  

    --pkg-whitelist-file

    • 白名单,后面接TXT文件
      • 1 、第一步把你设置的白名单的包名写到一个txt文档里面,记得路径和文档名字都是英文  
        • D:whitelist.txt    
      • 2 、把这个文件拉到我们的安卓机中去,放到  
        • /data/local/tmp/ 下面    
      • 拉取文件到手机  
        • adb push D:whitelist.txt /data/local/tmp/    
        • 注意这两个反斜杠    
    • 命令
      • adb shell monkey --pkg-whitelist-file /data/local/tmp/whitelist.txt 100    

    --pkg--blacklist-file

    • 黑名单,后面接txt文件
      • 拉取文件到手机  
        • adb push D:lacklist.txt /data/local/tmp/    
        • 注意这两个反斜杠    
    • 命令
      • adb shell monkey --pkg-blacklist-file /data/local/tmp/blacklist.txt 100  

    五、Monkey 日志分析

    正常情况

    • 如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间; // Monkey finished 代表执行完成

    异常情况

    • Monkey 测试出现错误后,一般的分析步骤
    • 看Monkey的日志 (注意第一个swith以及异常信息等)
    • 1. 程序无响应的问题: 在日志中搜索 “ANR”
    • 2. 崩溃问题:在日志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有bug
    • Monkey 执行中断, 在log最后也能看到当前执行次数

    APP异常日志分析:崩溃、闪退、ANR

    六、百分比时间

    1、命令格式

    adb shell monkey {+事件参数}事件次数

    adb shell monkey 1000

      运行1000次

    2、实例

    --pct-touch

      调整触摸事件的百分比(触摸事件是一个down-up事件 ,它发生在屏幕上的某单一位置)

    命令

    adb shell monkey -p com.tencent.edu --pct-touch 10 --pct-rotation 40 -V -V -V 1000

    3、其他百分比详情

    --pct-touch

      • 调整点击事件的百分比, down-up ,编号为0

    --pct-motion

      • 调整移动事件的百分比,直线滑动,编号为1

    --pct-pinchzoom

      • 调整两指缩放压缩手势的百分比,比如放大缩小手势操作,编号为2

    --pct-trackball

      • 调整轨迹球时间百分比,不常用,编号为3现在手机几乎没有滚动球,但滚动球事件中包含曲线滑动事件,在被测程序需要曲线滑动时可以选用此参数

    --pct-rotation

      • 调整旋转事件的百分比,横屏竖屏,编号为4

    --pct-nav

      • 调整导航事件的百分比,编号为5 ,包括上下左右,如方向输入设备的输入)老手机的上下左右键,智能机上没有

    --pct-majornav

      • 调整主要导航事件的百分比,编号为6 ,例如中间键、回退键、菜单键

    --PCt-syskeys

      • 调整"系统"按键事件的百分比,编号为7 ,这些按钮一般专供系统使用,如Home, Back, Start Call, End Call,音量控制

    --pct-appswitch

      • 调整app切换事件的百分比,编号为8

    --pct-flip

      • 调整键盘唤出隐藏的百分比,编号为9

    --pct-anyevent

      • 跳转除上面事件外,其它事件的百分比,编号为10,如按键、其他在设备上不常用的按钮等

    *******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/,谢谢!!******* 

  • 相关阅读:
    2.2、Dstreams数据源之高级数据源
    配置git 环境变量
    AngularJS的 $resource服务 关于CRUD操作
    如何安装和使用Karma-Jasmine
    ui-router 留存
    angular的service与factory
    留存- angularjs 弹出框 $modal
    js 的eval()方法 计算某个字符串,并执行其中的的 JavaScript 代码;
    javascript函数作用域和提前声明
    npm 全局环境变量配置
  • 原文地址:https://www.cnblogs.com/shouhu/p/12573695.html
Copyright © 2011-2022 走看看