关闭

Monkey——轻松带你上手安卓压力测试

标签: android自动化测试压力测试monkeymonkey测试
1020人阅读 评论(1) 收藏 举报
分类:

生活真是不可预料,四月这个欲夏还春的季节,我的生活又搅起了一池涟漪。

今天谈谈Monkey:

Monkeytest也有人叫做 搞怪测试。就是用一些稀奇古怪的操作方式去测试被测试系统,以测试系统的稳定性。

Monkey测试是Android自动化测试的一种手段,Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常。
当Monkey程序在模拟器或设备运行的时候,如果用户触发了比如点击,触摸,手势或一些系统级别的事件的时候,它就会产生随机脉冲,所以可以用Monkey用随机重复的方法去负荷测试你开发的软件.


谈到Monkey,必须介绍一下ADB:

ADB是android sdk里的一个工具, 用这个工具可以直接操作管理android模拟器或者真实的android设备. 它的主要功能有:
* 运行设备的shell(命令行)
* 管理模拟器或设备的端口映射
* 计算机和设备之间上传/下载文件
* 将本地apk软件安装至模拟器或android设备
* ADB是一个 客户端-服务器端 程序, 其中客户端是你用来操作的电脑, 服务器端是android设备.


如何让ADB帮助我们工作呢?
只要在各操作系统的控制台(Windows 是 cmd, Mac OS 是Terminal ,Linux不用说了)执行相应的命令即可。

当然,在Android Studio 中的Terminal直接执行也是可以的。只要进行简单的配置:(Windows举例)

这里写图片描述

之后,在控制台输入 : adb version

这里写图片描述

如果能输出ADB的 版本号。就大功告成了。


以下是干货阶段:

adb 的常用命令:

adb devices 获取所有连接ADB的模拟器或者真机
adb install c:/xxx.apk 安装自己的apk到设备上
adb uninstall apk包名 从设备上卸载apk
adb -s emulator-5556 uninstall apk包名 指定某设备卸载apk
adb start-server 重启adb
adb kill-server 杀死adb
adb shell pm list packages 获取所有应用的包名


monkey的常用命令:

adb shell monkey –help (获取帮助命令)
adb shell monkey 1000 (随机执行1000个模拟事件)
adb shell monkey -p xxxx 1000 (指定某个应用随机执行1000个模拟事件,xxx填应用包名)
adb shell monkey (参数) 100 (带参数执行100个模拟事件)


关于各种命令,就不多说了,小伙伴们多敲就熟悉了。

这里主要讲讲monkey命令的各个参数

-v 参数
adb shell monkey -v 1000
adb shell monkey -v -v 1000
adb shell monkey -v -v -v 1000

用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:
日志级别 Level 0
说明 缺省值,仅提供启动提示、测试完成和最终结果等少量信息

日志级别 Level 1
说明 提供较为详细的日志,包括每个发送到Activity的事件信息

日志级别 Level 2
说明 最详细的日志,包括了测试中选中/未选中的Activity信息

-s 参数
adb shell monkey -s xxx 1000

用于指定伪随机数生成器的seed值(int型),如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
这个参数在复现错误的时候非常好用

-p 参数
adb shell monkey -p com.xxx.xxx 1000
adb shell monkey -p com.xxx.xxx -p com.xxx.xxx 1000

用于指定产生随机事件的应用,如果想多个应用同时测试,就传多个-p 参数


这里是分割线,注意,以上参数是带一个”-“的,以下参数将是带两个”-“的


–throttle 参数
adb shell monkey –throttle 500 1000

用于指定用户操作(即事件)间的时延,单位是毫秒;这里我指定执行1000个事件,间隔是500毫秒.

–ignore-crashes 参数
adb shell monkey –ignore-crashes 1000

用于指定当应用程序崩溃时(Force & Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。

–ignore-timeouts 参数
adb shell monkey –ignore-timeouts 1000

用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

–ignore-security-exceptions 参数
adb shell monkey –ignore-exceptions 1000

用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。


重中之重点来了


–pct-{事件类别} {事件类别百分比}
adb shell monkey –pct-touch 50 1000 示例

该参数用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)
本示例的含义是,指定monkey执行1000次随机事件,其中touch事件 占 总事件数的 比例为 50%

拿图说事:

第一次执行
adb shell monkey 1000
结果如下图:

这里写图片描述

第二次执行
adb shell monkey –pct-touch 50 1000
结果如下图:

这里写图片描述

这里我们看 Event percentages: 下的第一行

第一张图
0: 15.0%

第二张图
0: 50.0%

这里的0是指 touch事件, 第一次没有指定比例时,是随机的,第二次指定后,就固定是50%了。

重复执行第二次的命令。会发现,序号为0的事件是不变的,而序号为1~11的其他事件,则会随机变化


最后来说说这0~11大致是什么事件吧:

目前我所知如下:

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

1
–pct-motion
调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成),即滑动

2
–pct-trackball
调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)

3
–pct-nav
调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)

4
–pct-majornav
调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)

5
–pct-syskeys
调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)

6
–pct-appswitch
调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法

7
–pct-flip
调整“键盘翻转”事件的百分比。

8
–pct-anyevent
调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等

此处可能有谬误,欢迎指正


大致梳理了monkey的要点,更深刻的研究争取下次有机会写

这里,我们不妨看看monkey的实战

相信小伙伴们都有过应用上架审核被拒的经历,以下是某次小米应用商店被拒后的反馈

这里写图片描述

我们重点来看中间的这段monkey命令:

adb shell monkey -v –throttle 300 –pct-touch 30 –pct-motion 20 –pct-nav 20 –pct-majornav 15 –pct-appswitch 5 –pct-anyevent 5 –pct-trackball 0 –pct-syskeys 0 -p ‘%s’ 1000

首先 -v参数,指定了输出详情的等级,-throttle 300,指定了事件间隔时间300毫秒,
其次–pct-xx xx 参数
–pct-touch 30 指定了 事件总量的百分之30是touch事件 ,以及后面连串的 –pct-xx xx 参数 ,翻译过来就是,点击事件30%,滑动事件20%,导航 20% , 主导航15%, 切换activity事件 5% 其他事件5%,轨迹球事件0%,系统按键0%.
算一下。 30 + 20 + 20 + 15 + 5 + 5 + 0 +0 = 95
即指定的总事件占比95%,还剩5%事件就是随机分配给未指定的剩余事件。
最后 -p ‘%s’ 1000 ,-p参数是指定应用,那推测过去 ‘%s’就是占位变量,对应的就是提交给小米的应用包名。最后的1000就是说,总事件数1000

小米的压力测试大概是遵循这个事件比例去执行,至于到底执行了多少次,就不重要了,我们只需要照着这个命令,在自己的模拟器或者手机上多跑一跑这1000个随机事件,复现出FC/ANR等结果,通过日志就可以着手解决问题了。

文末,最后强调。因为Markdown的排版,文中我没能很好的区别出 一个”-“和两个 “–”,各位小伙伴执行命令的时候切记看清上文所说的参数区别

有机会,再来写日志分析部分吧。估计接下来的几个月,都无比忙碌。

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

android压力测试命令monkey详解

一、Monkey 是什么? Monkey 就是SDK中附带的一个工具。 二、Monkey 测试的目的? :该工具用于进行压力测试。 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测试中出现的问题。 三、Monkey 测试的特点? Monkey 测试,所有的事件都是随机产生的,不...
  • xiangyunwan
  • xiangyunwan
  • 2017-05-11 16:59
  • 465

bug日记三

22. Android动态添加布局: 1、  由于需求需要动态添加布局 而且 不同的分辨率下显示比例应该正常 所以使用了动态添加view的方式 添加view的addview 时候 如果是rootview 应该使用Fragment去获取layout参数,因为默认都是这个,如果是子view那...
  • invinjun
  • invinjun
  • 2015-12-01 17:51
  • 368

android monkey 测试

adb shell monkey -v –throttle 300 –pct-touch 30 –pct-motion 20 –pct-nav 20 –pct-majornav 15 –pct-appswitch 10 –pct-anyevent 5 –pct-trackball 0 –pct-sy...
  • zhangzhihong8001
  • zhangzhihong8001
  • 2017-09-30 09:26
  • 91

小米应用是如果进行monkey测试的

前情提要因发布了两次app到小米的应用商城都是报monkey测试不通过,但是看到问题貌似报的感觉都不应该啊,于是自己动手写个脚本测试一下算了。 开测在测之前要输入命令简单测试一下: adb shell monkey -p 您的包名 -v 500这段话的意思是用封装好的伪测试简单500模拟测试 最后...
  • aibieqing241
  • aibieqing241
  • 2016-09-08 14:57
  • 3306

Monkey测试问题及解决方法

目录 1.1 Monkey测试简介... 1 1.2 Monkey程序介绍... 1 1.3 Monkey命令的简单帮助... 2 1.4 Monkey命令参数介绍... 2 1.5 Monkey测试步骤... 2 1.6 Monkey测试问题分析及处理技巧... 3 1.7 Monkey测试注意事...
  • u013947002
  • u013947002
  • 2015-10-10 21:02
  • 8879

Android App压力测试(慕课网学习笔记)

一  背景 1. 为什么开展压力测试  目标1:提高产品稳定性(产品稳定性是一项重要指标,据统计百分之七十用户会遇到不稳定问题,这时有的会忍受继续使用(比如QQ、微信等成熟产品),有的直接放弃(使用一些新产品),百分之五用户在遇到页面缓慢等问题会直接卸载) 目标2:提高产品的留存...
  • a923751813
  • a923751813
  • 2017-06-06 17:44
  • 482

Android App专项测试-压力测试篇

小伙伴们大家好,今天主要分享的主题是Android App专项测试。如何进行Android App专项测试压力测试呢?我们主要通过Android平台的一门工具Monkey。在学习本门课程之前,如果你具有一定的Shell基础,将很有助于理解。本次课程大纲主要分为3个部分:第一部分 背景探讨两个问题:1...
  • wb1276831936
  • wb1276831936
  • 2016-11-21 10:21
  • 1828

个人开发者App分发应用市场时需要注意的几点

最近手头有几个app需要分发到各个市场,通过几次的折腾,总结出来几点“应用上市场”的经验,这里分享给大家。 开发App的最终目的当然是为了money,对于企业开发者就不讨论了,个人开发者的App都是加入广告来获取一定的收益,我用过的国内广告平台有万普、酷果、有米,万普是比较老名气了,酷果独创的“酷...
  • androidmonkey
  • androidmonkey
  • 2015-01-08 20:19
  • 2219

monkey实战--测试步骤、常用参数、常规monkey命令

简要步骤:adb devices---了解包名--adb shell monkey -p 包名 -v 运行次数(多个参数的组合形成不同的用例以求最大的覆盖)--当崩溃或无响应时分析monkey日志 常规monkey命令(可直接在项目里使用): adb shell monkey 包名 --ttrott...
  • u011649536
  • u011649536
  • 2015-04-15 10:05
  • 9122

Android Monkey测试入门

Monkey是一款通过命令行来对我们APP进行测试的工具,可以运行在模拟器里或真机上。它向系统发送伪随机的用户事件流,实现对正应用程序进行压力测试。官方介绍 :https://developer.android.com/studio/test/monkey.html 测试?这不是抢测试妹子的...
  • true100
  • true100
  • 2016-10-14 11:27
  • 15169
    个人资料
    • 访问:26318次
    • 积分:533
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:4篇
    • 译文:0篇
    • 评论:17条
    文章分类
    最新评论