资讯专栏INFORMATION COLUMN

关于Monkey的一切都在这里

张率功 / 2687人阅读

摘要:忽略是的一个错误,在页面无法响应事件的时候会报出来。一般遇到这样的情况,表示当前有耗时操作在线程指定,导致卡了。基本上配置事件百分比,有一些事件已经随着发展被消失掉了,例如轨迹球,在现在主流的设备上,已经基本上看不见轨迹球的影子了。

版权声明:

本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有。

允许有条件转载,转载请附带底部二维码。

一、什么是Monkey

Monkey是Android自身提供的,可以通过adb shell模拟用户行为,发送一些伪随机用户事件到目标设备上。

Monkey和它的直接意思一样,可以像一个猴子一样,疯狂的输入各种随机事件到设备上,像是一个猴子在疯狂的点击设备。

既然Monkey有这样的功能,我们就可以利用它来对Android App做压力测试,可以在规定的范围内,任意随机触发各种事件,来验证App的抗压性和稳定性。这些随机事件包括:点击屏幕、滑动屏幕、各种无力按键等。

二、简单的使用Monkey

Monkey主要是借助adb命令来让PC与Android设备连接,adb是一种Android调试工具,在PC上配置好环境即可使用。

Monkey使用起来非常的简单,基本命令如下:

adb shell monkey

这样直接在Terminal中输入,就会像设备上发送指定的事件数的事件。但是在Terminal中不会有任何输出,如果需要有输出,可以加上-v参数。-v表示输出的Log级别,-v最低,-v -v -v最高。

adb shell monkey -v

上面的命令表示向设备输入100个随机事件,如果正确输出,可以在设备上看到各种点击效果一闪而过。

但是这种随机的输入其实也是没什么作用的,通常我们会需要制定在某一个App内做随机事件。那么,可以再增加-p参数,完整命令如下:

Adb shell monkey -p com.mipay.wallet -v

更多其他高级的命令,可以通过adb shell monkey -h进行查看。

三、Monkey的高级用法 1、设置事件间隔

上面给出的例子,基本上100次点击会在瞬间被完成,肉眼可能可以感受到被点击,但是无法明显的感觉到有那么多次。所以设定每次事件的间隔时常,是有必要的。为Monkey设定事件的间隔,使用--throttle参数。

adb shell monkey —throttle

2、复现随机点击的事件

Monkey虽然是随机点击的,但是我们主要是用它来做压力测试。所以如果在碰到崩溃的时候,可以通过一种方式,重复之前的随机事件,再来一次,看看崩溃的问题。Monkey也提供了这样的参数 -s

adb shell monkey -s

可以看到,在每次执行完Monkey之后,从输出里可以看到当前的seed值,只要通过-s参数指定相同的seed,就可以重复刚才的操作。

例如如果需要重复上面的操作,就需要在Terminal中输入:

adb shell monkey -s 1487572980979 -v 1000

3、忽略崩溃

正常来说,如果在Monkey执行的阶段,出现了崩溃,会立即停止接下去的执行。但是有时候,我们在执行Monkey的时候,是在无人员干涉的情况下,例如想要它执行一夜,等等情况。那么如果出现崩溃就停止执行,明显不是我们需要的。在Monkey中,可以通过—ignore-crashes来忽略掉异常崩溃。

adb shell monkey —ignore-crashes

如果用此参数忽略了崩溃,在发生崩溃的时候,会继续指定,表现是又从新开始执行Monkey了,而同时,用-s设定的seed值将不会生效。

4、忽略ANR

ANR是Android的一个错误,在页面无法响应事件的时候会报出来。一般遇到这样的情况,表示当前有耗时操作在UI线程指定,导致卡UI了。

在Monkey中,如果遇上ANR,同样会停止继续执行。如果想要忽略ANR,让其触发的时候依然执行下去,可以使用—ignore-timeouts参数。

adb shell monkey —ignore-timeouts

同样它也会导致-s失效。

四、指定Monkey事件

在Monkey中,虽然输入的事件是随机产生的,但是可以指定输入事件类型的百分比,让其控制在我们需要的范围内。

在Monkey中,可以设定的事件类型有:

--pct-touch :指定触摸事件的百分比。

--pct-motion :指定滑动事件的百分比。

--pct-trackball :指定轨迹球事件的百分比。

--pct-nav :指定导航事件中,up、down、left、right等事件的百分比。

--pct-majornav :指定导航事件中,back、menu等事件的百分比。

--pct-syskeys :指定系统按键的百分比,包括HOME、Back、音量等。

--pct-appswitch :指定Activity之间切换的比例。

--pct-anyevent :指定任意事件的百分比。

默认情况下,如果不设置,会是--pct-anyevent为百分之百,也就是纯随机事件。如果通过其他的参数配置了之后,如果相加的百分比不为百分百,余下的百分比部分也会生成随机事件。

从Monkey的输出Log中,可以看出指定事件的百分比。

例如这里输入触摸事件为百分百,Event percentages的0表示的就是触摸事件,为100%。

五、举个栗子

到这里基本上就介绍为Monkey中一些主要的参数含义了,更多的可以通过-h查看帮助文档。

基本上配置事件百分比,有一些事件已经随着Android发展被消失掉了,例如轨迹球,在现在主流的设备上,已经基本上看不见轨迹球的影子了。

那么就本文介绍的一些命令,简单配置一个可以直接使用的例子:

adb shell monkey -p com.miui.cal —throttle 100 —-ignore-crashes —-ignore-timeouts --pct-touch 50 --pct-majornav 10 --pct-syskeys 20 --pct-appswitch 20 -v 1000 > ./monket_log.txt

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/13513.html

相关文章

  • JavaScript创世神话——一切源于对象

    摘要:但是,中并没有类的概念,而是通过构造函数替代了类的功能,为某一类的对象提供共同的属性和方法。一只名叫的狗,首先继承了构造函数的原型对象,而的原型对象中的有继承了函数的原型对象,函数对象中的有继承了的原型对象。 《圣经》里的第一章创世纪中其中有一段经典记载上帝是如何创造人的。神说:我们要照着我们的形象,按照我们的样式造人。不谋而合的是,JavaScript中似乎也遵循着上帝的旨意去创造程...

    enda 评论0 收藏0
  • 接口和抽象类异同及适用场景

    摘要:不同点语法上的不同,对接口的使用是通过关键字,定义是使用关键字对抽象类的使用是通过关键字当然接口也可以通过关键字继承,定义是使用关键字。接口只有常量和方法,抽象类则包含普通类中的一切机构。接口中的方法都必须是类型的,而抽象类则不受限制。 不同点 语法上的不同,对接口的使用是通过关键字implements,定义是使用关键字interface;对抽象类的使用是通过关键字extends(...

    hiYoHoo 评论0 收藏0
  • JavaScript > 继承与拷贝

    摘要:继承与拷贝本文讨论中如何实现继承关系,以及如何拷贝对象。谈完继承方法后,再谈论对象的拷贝。我们在临时构造器法基础上进一步完善之。这让我想到了中覆盖构造函数的办法,如下关于继承的话题到此结束。 JavaScript 继承与拷贝 Date: 7th of Aug, 2015 Author: HaoyCn 本文讨论JavaScript中如何实现继承关系,以及如何拷贝对象...

    tylin 评论0 收藏0
  • Decorator:从原理到实践,我一点都不虚~

    摘要:描述符必须是这两种形式之一不能同时是两者。可以是任何有效的值数值,对象,函数等。当且仅当该属性的为时,才能被赋值运算符改变。特点就是不影响之前对象的特性,而新增额外的职责功能。 前言 原文链接:[Nealyang/personalBlog]() showImg(https://segmentfault.com/img/remote/1460000018958861); ES6 已经不必...

    XanaHopper 评论0 收藏0
  • 手把手用Monkey写一个压测脚本

    摘要:一为什么需要一个测试脚本昨天讲解了命令的使用方式,今天趁着还热乎就手把手用写一个压力测试的脚本。对一些在测试情况下,各项状态的监控并不好。一个简单的测试脚本,包括这些基本上就足够了。六多说两句其实这个的压力测试脚本,已经满足测试的基本要求。 版权声明: 本账号发布文章均来自公众号,承香墨影(cxmyDev),版权归承香墨影所有。 允许有条件转载,转载请附带底部二维码。 一、为什么需...

    tomato 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<