Monkey稳定性测试初探(二)

记得 关注转发~~~

之前写过一篇关于稳定性测试的文章:

Monkey随机性能压测初探(一)

01

什么是稳定性测试

       稳定性测试,是在一定压力的情况下,对系统或某个模块持续进行长时间的操作(一般遵循7*24小时原则),系统没有出现业务问题、业务异常、内存泄露溢出等性能问题,保证了系统的稳定性,说明稳定性测试是通过的。稳定性测试一般在业务测试、性能测试完成后再进行。

        我们可以借助Monkey工具模拟用户操作进行稳定性测试。

02

Money是什么

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

官方介绍:
https://developer.android.com/studio/test/monkey.html


03

Monkey的介绍

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 100

Monkey 测试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-touch50 --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 只识别英文和数字输入

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568172.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Fiddler抓包 | 竟然有这些骚操作,太神奇了?

一、双击Session时,使请求页始终显示到“webform”tab页,使响应页始终显示到”json”tab页在QUICK EXEC命令执行窗口,执行:PREFS SET fiddler.ui.inspectors.request.alwaysuse "WebForms"PREFS SET fiddler.ui.inspect…

pycharm连接sqlite

进行创建上了一个Django项目之后,进行点击 菜单中的view 菜单。 进行点击了view菜单之后,进行点击下拉菜单选中为tool windows的选项。 弹出了下拉下一级菜单选中为 database 的选项。 弹出了database的选项之后,进行点击 添加 按钮。 弹出了…

抓包工具mitmproxy | mitmweb基本用法(二)

上一篇:我们分享了抓包工具mitmproxy环境配置使用(一)这一篇我们主要介绍下mitmweb抓包工具的基本用法一、mitmproxy介绍mitmproxy是Python编写的一款功能完善的代理工具,mitmproxy是一款支持拦截HTTP和HTTPS请求和响应并即时修改…

mitmproxy抓包 | Python实时生成接口自动化用例

抓包工具mitmproxy环境配置使用(一)抓包工具mitmproxy | mitmweb基本用法(二)前面已经给大家分享了mitmproxy的环境配置和基本使用,文章浏览量很高,相信对抓包工具感兴趣的朋友,已经熟练运用起来…

mitmproxy抓包 | Python实时生成接口自动化用例(三)

抓包工具mitmproxy环境配置使用(一)抓包工具mitmproxy | mitmweb基本用法(二)前面已经给大家分享了mitmproxy的环境配置和基本使用,文章浏览量很高,相信对抓包工具感兴趣的朋友,已经熟练运用起来…

To disable deprecation,,use _CRT_SECURE_NO_WARNINGS

解决方法:ok,也就是加入一个_CRT_SECURE_NO_WARNINGS的问题。 转载自https://blog.csdn.net/guoming0000/article/details/8838810 或者在cpp文件最顶端添加:#define _CRT_SECURE_NO_WARNINGS

测试管理 | 基于风险的测试

基于风险的测试风险是指负面或不希望发生的后果或事件发生的可能性。当引起客户、用户、参与者或干系人对产品质量或项目成功的信心减弱的问题可能发生时,风险就存在。当潜在问题主要影响的是产品质量时,它们被称为质量风险、产品风险或产品质量风险。而…

听说全链路压测已经杀疯了?劝你别盲目!

不知道大家发现没,阿里、京东、字节、美团、饿了么、滴滴、陌陌等大厂的技术文章里,最近频繁提到全链路压测在企业内部的落地。本想抱着拜读一二的心理去看,结果一旦涉及到具体的落地细节,他们却都跟约好了一样三缄其口。不怪我眼…

opencv Hog Demo

需注意此代码要在Release x64之下运行 #include <iostream> #include <stdexcept> #include <opencv2/objdetect.hpp> #include <opencv2/highgui.hpp> #include <opencv2/imgproc.hpp> #include <opencv2/imgcodecs.hpp> //Release x64…

图像分类 数据准备(将文件夹中所有图片路径写到TXT文件中)

0文件夹里都是负样本&#xff0c;1文件夹的图像都是正样本图片&#xff0c;接下来就是生成图片的描述文件。 进入控制台 进入你的0/1文件夹下&#xff0c;输入以下命令&#xff1a; dir /b/s/p/w *.jpg > pos.txt&#xff0c;dir /b/s/p/w *.jpg > neg.txt&#xff0c;…

瀑布、V、W、快速原型模型、增量、螺旋模型

瀑布模型&#xff08;Waterfall Model&#xff09; 是最早出现的软件开发模型&#xff0c;它提供了软件开发的基本框架&#xff0c;开发过程是通过设计一系列阶段顺序展开的&#xff0c;从系统需求分析开始直到产品发布和维护&#xff0c;每个阶段都会产生循环反馈&#xff0c;…

opencv Hog学习总结

一、方向梯度 梯度&#xff1a;在向量微积分中&#xff0c;标量场的梯度是一个向量场。标量场中某一点上的梯度指向标量场增长最快的方向&#xff0c;梯度的长度是这个最大的变化率。更严格的说&#xff0c;从欧几里得空间Rn到R的函数的梯度是在Rn某一点最佳的线性近似。在这个…

深入浅出理解HOG特征---梯度方向直方图

梯度方向直方图 原文路径&#xff1a;https://www.learnopencv.com/histogram-of-oriented-gradients/ 最近在搞车牌识别的时候&#xff0c;训练样本去识别车牌的时候用到HOG特征。国外一篇文章让我受益良多 什么是特征描述符&#xff1f; 特征描述符是指通过提取有用的信息并…

陕西居民医保微信缴纳教程来了,太方便了

2022年居民医保交费步骤如下&#xff1a;1、进入微信&#xff0c;我的页面&#xff0c;点支付进入—点城市服务2、城市服务页面&#xff0c;顶部可切换所在城市&#xff0c;输入框搜索“陕西省社保”&#xff0c;选第一个 “陕西省社保缴纳”进入3、选城乡居民医疗保险&#xf…

SVM理论学习记忆

转载自https://blog.csdn.net/chaipp0607/article/details/73662441 SVM算法在在1995年正式发表&#xff0c;在针对中小型数据规模的分类任务上有着卓越的效果&#xff0c;同时有着完整的理论证明&#xff0c;在20世纪末的几年和21世纪初的10年完胜神经网络&#xff0c;吴恩达…

Python中jmespath解析提取json数据

在做接口自动化&#xff0c;测试断言时&#xff0c;我们经常需要提取接口的的响应数据字段&#xff0c;以前用过jsonpath&#xff0c;有几篇相关文章&#xff0c;可以参考下&#xff08;Python深层解析json数据之JsonPath、【Jmeter篇】后置处理器之正则提取器、Json提取器 、J…

SVM学习记录

第一个min&#xff1a;先在数据中找离决策边界距离最近的样本点 第二个max&#xff1a;寻找w和b使得刚才找到的点离决策边界最远的平面&#xff08;平面方程&#xff1a;&#xff09; 求解出后即可求出w和b。 例如&#xff1a; 如果等于0.根据上面的公式&#xff0c;得到w就为…

缺陷定位 | 测试发现了Bug,还要分析定位Bug?(一)

hello今天分享的内容&#xff0c;可能会有很多朋友持不同观点&#xff0c;或被很多同行朋友diss&#xff0c;不过没关系&#xff0c;即使被喷被diss&#xff0c;我依然会坚持我的观点&#xff0c;把最真实的干货分享给大家&#xff0c;希望得到支持。测试工程师在互联网行业里&…