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

标签: android 自动化测试 压力测试 monkey monkey测试
1342人阅读 评论(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的排版,文中我没能很好的区别出 一个”-“和两个 “–”,各位小伙伴执行命令的时候切记看清上文所说的参数区别

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

查看评论

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

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

【Android压力测试】monkey压力测试(很全、很详细)

一、monkey测试命令有哪些选项 二、一个完整的monkey语句 三、如何保存不连着电脑跑monkey 四、如何跑多个apk的monkey 五、如何关闭mokey 六、如何分析monkey日志 七、...
  • x00yan00
  • x00yan00
  • 2016-03-24 21:32:27
  • 4718

Android Monkey压力测试基本使用

MonKey        先打一针预防针,用monkey做app的压力测试操作起来真的很简单,知道了,也就2分钟左右(可能还不到)就搞定了。 1、MonKey是什么? 答:翻译过来就是...
  • u014769864
  • u014769864
  • 2017-05-24 10:44:29
  • 885

[Android 测试] 压力稳定性测试之: Monkey 详解分析脚本

一、什么是稳定性测试?通过随机点击屏幕一段时间,看看app会不会奔溃,能不能维持正常运行。二. Money是什么?Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户...
  • niubitianping
  • niubitianping
  • 2016-10-11 10:08:51
  • 3789

android +服务器进行压力测试+性能测试

1: 影响响应时间的因素(1): 硬件方面: 1:服务器的cpu 2:服务器内存 3:服务器带宽(4): 软件方面 1: 数据库的优化 2: sql语句的优化 3...
  • dangai0201
  • dangai0201
  • 2018-02-09 16:27:39
  • 48

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

小伙伴们大家好,今天主要分享的主题是Android App专项测试。如何进行Android App专项测试压力测试呢?我们主要通过Android平台的一门工具Monkey。在学习本门课程之前,如果你具...
  • wb1276831936
  • wb1276831936
  • 2016-11-21 10:21:39
  • 2331

android 手机app应用压力测试整理(一)

ps:对app压力测试所做的笔记。 压力测试的意义:提升app稳定性,保证使用率,保留用户,提高效益。 介入时间:功能测试通过后 monkey:存在于手机系统中...
  • u011649536
  • u011649536
  • 2016-11-29 18:10:36
  • 2105

Android 压力测试 (记录bug)

Android 压力测试 (记录bug)
  • guang_liang_
  • guang_liang_
  • 2017-04-15 16:17:50
  • 551

Android APP压力测试(一) 之Monkey工具介绍

前言   本文主要介绍Monkey工具。Monkey测试是Android平台自动化测试的一种手段,通过Monkey程序模拟用户触摸屏幕、滑动、按键等操作来对设备上的程序进行压力测试,检测程序多久...
  • tanghongchang123
  • tanghongchang123
  • 2016-07-05 10:31:34
  • 1005

android压力测试命令monkey详解

一、Monkey 是什么? Monkey 就是SDK中附带的一个工具。 二、Monkey 测试的目的? :该工具用于进行压力测试。 然后开发人员结合monkey 打印的日志 和系统打印的日志,结局测...
  • xiangyunwan
  • xiangyunwan
  • 2017-05-11 16:59:19
  • 657
    个人资料
    持之以恒
    等级:
    访问量: 3万+
    积分: 582
    排名: 8万+
    最新评论