01、什么是稳定性测试

通过随机点击屏幕一段时间,看看app会不会崩溃,能不能维持正常运行

02、Money是什么

Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动Trackball、按键等操作来对设备上的程序进行测试,检测程序多久的时间会发生异常。和MonkeyRunner几乎是完全不同的,MonkeyRunner相当于是搞自动化测试的了

官方介绍:

https://developer.android.com/studio/test/monkey.html

03、Monkey的介绍

Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar

Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey

Monkey 命令启动方式:

  • 可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试
  • 在PC上adb shell 进入Android系统,通过执行monkey {+命令参数} 来进行Monkey 测试
  • 在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

04、Monkey架构

05、Monkey弱点

Monkey虽然可以根据一个指定的命令脚本发送按键消息,但不支持条件判断,不支持读取待测界面的信息来执行验证操作

06、Monkey的压力测试参数

那么这个option通常又分为4大类:

  • 常用选项
  • 事件选项
  • 约束选项
  • 调试选项

1、常用选项的参数通常有:

-v:用于反馈信息级别(一个-v表示一个层级,两个-v表示两个层级,通常最多三个-v)

示例Level0:adb shell monkey -p com.swartz.cicada –v 100说明:缺省值,仅提供启动提示、测试完成和最终结果等少量信息 相应源代码如图所示了,这十分有利于调试了示例Level1:adb shell monkey -p com.swartz.cicada -v-v 100说明:提供较为详细的日志,包括每个发送到Activity的事件信息示例Level2:adb shell monkey -p com.swartz.cicada -v-v-v 100说明:最详细的日志,包括了测试中选中/未选中的Activity信息

2、时间选项的参数通常有:

–throttle:每个事件结束后的间隔时间

-s:表示伪随机数生成的seed值,如果seed值相同,则两次monkey所产生的事件序列也是一样的

示例:Monkey测试1:adb shell monkey -p com.swartz.cicada –s 10 100Monkey 测试2:adb shell monkey -p com.swartz.cicada –s 10 100

两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的;

3、约束选项的参数通常有:

-p:指定文件名

count:指定要发送的事件数

-c:用此参数指定一个或几个类别,activity必须指定一个category,才能被启动,否则将会启动不了

4、调试选项的参数通常有:

–dbg-no-events:初始化启动的activity,但是不产生任何事件。

–hprof:指定该项后在事件序列发送前后会立即生成分析报告

–ignore-crashes:忽略崩溃

–ignore-timeouts:忽略超时

–ignore-security-exceptions:忽略安全异常

–kill-process-after-error:发生错误后直接杀掉进程

–monitor-native-crashes:跟踪本地方法的崩溃问题

工作中为了保证测试数量的完整进行,我们一般不会在发生错误时立刻退出压力测试。

monkey 测试命令如下:

adb  shell monkey -p com.swartz.cicada -s 500 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v -v 10000 > E:\monkey_log\20170831.txt

kill:此参数用来杀掉进程

kill pid 先执行adb shell 再ps |grep monkey 查询结果如下图中15248 即为PID 再kill pid(15248)即可

例子:

adb shell monkey -p com.tpnet.hlquery --throttle 100--pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:\monkeytest.txt

测试com.tpnet.hlquery这个app,间隔100毫秒,50%的触摸事件,50% 的滑动事件,三个-v输出详细的日志,执行1000个事件,日志输出到c:\monkeytest.txt

ps: 命令运行前手机先解锁,win8 以上要用管理员身份打开cmd

07、Monkey的结果与分析

1、初步分析方法:

Monkey: seed=20 count=100 --随机种子和运行次数

:AllowPackage: com.swartz.cicada --指定的测试包
:IncludeCategory: android.intent.category.LAUNCHER --Category包含LAUNCHER
:IncludeCategory: android.intent.category.MONKEY --Category包含MONKEY

// Selecting main activities from category android.intent.category.LAUNCHER
//   + Using main activity com.swartz.cicada.LauncherActivity (from package com.swartz.cicada)
// Selecting main activities from category android.intent.category.MONKEY  --查询结果列表
// Seeded: 20 --随机种子// Event percentages:
//  15.0%  --事件0 为touch事件,就是相当于按下之后弹起来的一个动作
//  10.0%  --事件1 为motion,相当于说从起始点到终点有移动了多少步,就是步骤数量
//  2.0%   --事件2 为pinchzoom,为两个手指有同时按下去后,都向中间移动后up起来,相当于一个缩放的动作。
//  15.0%  --事件3 为trackball,为轨迹球事件
//  -0.0%  --事件4 为rotation 为屏幕旋转百分比隐藏事件
//  25.0%  --事件5 为nav导航事件,就是上下左右
//  15.0%  --事件6 为majornav主导航事件,会产生一些窗口的事件
//  2.0%   --事件7 为系统按键
//  2.0%   --事件8,app应用的打开就是用的这个事件
//  1.0%   --事件9,键盘的开,关//  13.0% --事件10,按键按下在弹起等动作

日志结尾:

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

(如果Monkey执行中断,在log的最后也能查看到当前已执行的次数。)

2、详细分析:

Monkey测试出现错误之后,一般的分析步骤分为以下几种:

  • 看Monkey日志(注意第一个switch以及异常信息等)

  • 程序无响应问题,在日志中搜索 “ANR”

  • 奔溃问题: 在日志中搜索 “Exception”

  • ANR问题:在日志中搜索“ANR”(什么是ANR:Application Not Responding,即应用无响应,具体有关ANR的知识详见:):https://www.tuicool.com/articles/IfQvY3

  • ForceClosed和程序异常退出问题:在日志中搜索“致命”

3、查看Monkey里面错误前的一些事件动作,并手动执行该动作

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

Monkey执行中断,在log的最后也能查看到当前的已经执行的次数。

08、Monkey测试中内存问题分析

怎么样去确定内存泄漏?

1. 内存泄漏弹出out of memory对话框2. 对于有内存泄漏但是没有单出out of memory对话框的情况,可以通过logcat文件GC出信息,(GC:java的垃圾回收机制)GC_FOR_ALLOC: 因为在分配内存时候内存不够引起的GC_EXPLICIT 表明GC被显式请求触发的,如System.gc调用,GC_CONCCURRENT: 表明GC在内存使用率达到一定的警戒值时候,自动触发GC_BEFORE_OOM 表明在虚拟机抛出内存不够异常oom之前,执行最后一次回收内存垃圾

09、–hprof 参数报告

adb shell monkey -p com.tpnet.hlquery --hprof --throttle 100 --pct-touch 50 --pct-motion 50 -v -v -v 1000 >c:\monkeytest.txt

如果指定了这个选项,monkey会在发送事件的前后生成app内存快照文件,一般会在设备的/dada/misc目录下生成hprof文件(ps: /data/misc/需要root权限)

拖进AndroidStudio即可查看

10、Monkey Script脚本制作

Monkey script是按照一定语法规则编写有序的用户事件流并且适用于monkey命令工具的脚本,可以用txt写。

脚本编写完毕放入手机的sdcard目录下,cmd中运行命令

adb shell monkey -f/sdcard/脚本名字 运行次数

结合monkey的-v和–hhprof输出日志和性能报告

adb shell monkey --hprof -f/sdcard/*.txt -v -v -v 3 > c:\monkey.txt

一些脚本命令:

  • start data>>

将控制 monkey 的一些参数设置和具体的 monkey 命令分隔开来

  • LaunchAcitivity(pkg_name, cl_name)

启动任意应用的一个活动(界面)
pkg_name:要启动的应用包名
cl_name:要打开的活动的类名

  • DispatchPointer(downTime,eventTime,action,x,y,pressure,size,metaState,xPrecision,yPrecision,device,edgeFlags)

向一个指定位置发送单个手势消息
downTime: 发送消息的时间,只要是合法的长整型数字即可
eventTime: 主要是用在指定发送两个事件之间的停顿
action: 消息是按下还是抬起,0表示按下,1表示抬起
x:x 坐标
y:y 坐标
其余 7 个参数均可以设置为 0

模版:

count = 1       // 下面这个 count 选项, monkey 并没有用到,可以忽略它speed = 1.0    //speed  选项是用来调整两次按键的发送濒率的start data >>   // “start data >>” 是 有 大小写敏感的,而且单词间的间隔只用有一个空格!LaunchActivity(com.zhengping.contact, com.zhengping.contact.Main)     //# Activity 值可以通过 aapt 命令查看DispatchPointer(5109520,5109520,0,261,128,0,0,0,0,0,0,0);DispatchPointer(5109521,5109521,1,261,128,0,0,0,0,0,0,0);UserWait(2000)    // 停顿时间
DispatchPress (KEYCODE_Z)    // 文字输入 monkey 只识别英文和数字输入

最后: 可以关注公众号:伤心的辣条 ! 进去有许多资料共享!资料都是面试时面试官必问的知识点,也包括了很多测试行业常见知识,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

一文彻底搞懂App的Monkey稳定性测试相关推荐

  1. layer output 激活函数_一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)...

    在"一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)"中我们详细介绍了BP算法的原理和推导过程,并且用实际的数据进行了计算演练.在下篇中,我们将自己实现BP算法(不使用第 ...

  2. 一文彻底搞懂前端监控 等推荐

    大家好,我是若川.话不多说,这一次花了几个小时精心为大家挑选了20余篇好文,供大家阅读学习.本文阅读技巧,先粗看标题,感兴趣可以都关注一波,一起共同进步. 前端点线面 前端点线面 百度前端研发工程师, ...

  3. opc服务器是硬件吗,opc是什么(一文彻底搞懂什么是OPC)

    原标题:(opc是什么(一文彻底搞懂什么是OPC)) opc是什么(一文完全搞懂什么是OPC)从2000年终以来,我们就一直在运用OPC软件互操纵性范例,而那些正准备踏入和想要踏入工业自动化范畴的人们 ...

  4. 一文彻底搞懂BP算法:原理推导+数据演示+项目实战(下篇)

    在"一文彻底搞懂BP算法:原理推导+数据演示+项目实战(上篇)"中我们详细介绍了BP算法的原理和推导过程,并且用实际的数据进行了计算演练.在下篇中,我们将自己实现BP算法(不使用第 ...

  5. 一文彻底搞懂Mybatis系列(十六)之MyBatis集成EhCache

    MyBatis集成EhCache 一.MyBatis集成EhCache 1.引入mybatis整合ehcache的依赖 2.类根路径下新建ehcache.xml,并配置 3.POJO类 Clazz 4 ...

  6. 一文彻底搞懂ROC曲线与AUC的概念

    一文彻底搞懂ROC曲线与AUC的概念 1. ROC曲线的初级含义 1.1 精确率和召回率 1.2 ROC曲线的含义 2. ROC曲线如何绘制 3. ROC曲线和排序有什么关联? 4. AUC和基尼系数 ...

  7. 一文快速搞懂Kudu到底是什么

    文章目录 引言 文章传送门: Kudu 介绍 背景介绍 新的硬件设备 Kudu 是什么 Kudu 应用场景 Kudu 架构 数据模型 分区策略 列式存储 整体架构 Kudu Client 交互 Kud ...

  8. 一文快速搞懂对95%置信区间的理解

    一文快速搞懂对95%置信区间的理解 综合知乎上各大神的解答和网络资料得到本文对95%置信区间的理解 先给出结论 最常出现的对置信区间的错误理解: 在95%置信区间内,有95%的概率包括真实参数  (错 ...

  9. 奇舞周刊第 440 期:一文彻底搞懂前端沙箱

    记得点击文章末尾的" 阅读原文 "查看哟~ 下面先一起看下本期周刊 摘要 吧~ 奇舞推荐 ■ ■ ■ 一文彻底搞懂前端沙箱‍ 沙箱是一种安全机制,为运行中‍的程序提供隔离环境.通常 ...

最新文章

  1. matlab图像处理课程设计,基于MATLAB_GUI的数字图像处理程序设计课程设计
  2. 攻下《JavaScript高级程序设计》——第二章 在HTML中使用JavaScript
  3. ffmpeg+nginx+video实现rtsp流转hls流,通过H5查看监控视频
  4. lm358数据手册_如何阅读运放的数据手册(1)查找数据手册
  5. Linux下进程间通信概述
  6. 二叉树后序遍历_LeetCode算法145. 二叉树的后序遍历
  7. [渝粤教育] 中国地质大学 工业卫生技术 复习题 (2)
  8. 初中生学计算机视频,推荐一下适合中学生的在线视频学习网站
  9. 2022年,我只做 3 件事
  10. java part.inlimen_java字符串加密及动手动脑
  11. 内存模型以及分区,需要详细到每个区放什么
  12. dubbo源码解析-spi(四)
  13. STM32库函数模板创建
  14. biggan:large scale gan training for high fidelity natural image synthesis
  15. Astronauts UVA - 1391(2-sat)
  16. 计算机考试彩虹云朵,抖音王源彩虹云朵歌曲歌词完整版
  17. 教你10分钟电脑配置挑选装机速成攻略
  18. android系统蓝牙音箱功能吗,Android蓝牙开发系列文章-其实你的手机可以变成一个蓝牙音箱...
  19. matlab+whisker,Matlab Boxplot:使用特定的百分位数作为上部胡须或在手动上部胡须编辑后删除多余的异常值...
  20. CSA标准|《物联网安全规范》(征求意见稿)意见征集

热门文章

  1. android 短信文件夹,Android查看签名文件信息
  2. java 线程访问控件_多线程下访问控件的方式
  3. Linux yum软件仓库配置,linux配置软件仓库 、 yum管理应用软件 、 快速部署Web/FTP...
  4. c语言编辑学生信息录入的程序,c语言编的学生信息管理系统小程序!!有不足的请指出,谢谢!!...
  5. warning LNK4070的解决办法
  6. 常用模拟键键值对照表(Virtual-Key Codes)
  7. 光源选型的要素有哪些?
  8. 利用python解析手机通讯录
  9. Coding List
  10. Oracle 实例恢复时 前滚(roll forward) 后滚(roll back) 问题