Appium+python自动化(十九)- 猴哥失散多年的混血弟弟还是妹妹- Monkey(猴子)参数(超详解)
简介
前边几篇介绍了Monkey以及Monkey的事件,今天就给小伙伴们介绍和分享一下Monkey的参数。
首先我们看一下这幅图来大致了解一下:
1、Monkey 命令 基本参数介绍
-p <允许的包名列表>
用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果丌指定包, monkey将允许系统启动设备中的所有app。
指定一个包:adb shell monkey -p com.shjt.map 100
指定多个包:adb shell monkey -p fishjoy.control.menu –p com.shjt.map 100
-v
用亍指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下 表所示:
Level 0 : adb shell monkey -p com.shjt.map -v 100 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息
Level 1 : adb shell monkey -p com.shjt.map -v -v 100 // 提供较为详细的日志,包括每个发送到Activity的事件信息
Level 2 : adb shell monkey -p com.shjt.map -v -v -v 100 // 最详细的日志,包括了测试中选中/未选中的Activity信息
-s(随机数种子)
用亍指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。 示例:
monkey测试1:adb shell monkey -p com.shjt.map –s 10 100
monkey测试2:adb shell monkey -p com.shjt.map –s 10 100
--throttle <毫秒>
用亍指定用户操作(即事件)间的时延,单位是毫秒;如果丌指定这个参数,monkey会尽可能快的 生成和发送消息。 示
例:adb shell monkey -p com.shjt.map --throttle 3000 100
2、monkey 参数
2.1参数分类
- 常规类参数
- 事件类参数
- 约束类参数
- 调试类参数
2.2常规类参数
常规类参数包括帮助参数和日志信息参数。帮助参数用于输出Monkey命令使用指导;日志信息参数将日志分为三个级别,级别越高,日志的信息越详细。
1.帮助类参数
monkey -h
2.日志级别
$ adb shell monkey -v <event-count>
-v:打印出日志信息,每个-v将增加反馈信息的级别。-v越多日志信息越详细,不过目前最多支持3个-v,即:


2.3事件类参数
事件类参数的作用是对随机事件进行调控,从而使其遵照设定运行,如设置各种事件的百分比、设置事件生成所使用的种子值等。频率参数主要限制事件执行的时间间隔。
1.执行指定脚本
$ adb shell monkey -f <scriptfile> <event-count>
eg:
$ adb shell monkey -f /mnt/sdcard/test1
2.伪随机数生成种子值
使用 -s命令可以重复执行之前的伪随机操作。本身每次执行伪随机事件操作也会默认生成一个seed值
$ adb shell monkey -s <seed> <event-count>
eg:
$ adb shell monkey -s 666 100
3.设置间隔
如果你希望在每一个指令之间加上固定的间隔时间,可以用--throttle(注意,前面是--)命令。
$ adb shell monkey --throttle <milliseconds>
eg:
$ adb shell monkey --throttle 3000 5
--throttle:后面接时间,单位为ms(<milliseconds>),表示事件之间的固定延迟(即执行每一个指令间隔的时间),若不接该选项,monkey将不会延迟。
4.调整触摸事件百分比
如果你希望调整触摸事件的百分比,记住使用--pct-touch。
$ adb shell monkey --pct-touch
eg:
$ adb shell monkey -v -v --pct-touch 100 200
<percent>--pct-touch:后面接触摸事件百分比
注意:触摸事件不单单是按键,它泛指发生在某一位置的一个down-up事件。
5.调整手势事件百分比
$ adb shell monkey --pct-motion
eg:
$ adb shell monkey -v -v --pct-motion 100 200
6.调整应用启动事件的百分比
如果你希望调整应用启动事件的百分比,记住使用--pct-app-switch。
$ adb shell monkey --pct-appswtich <percent>
--pct-appswitch:后面接应用启动事件百分比。
应用启动事件(即activity launches)俗称打开应用,通过调用startActivity()方法最大限度地开启该package下的所有应用。
7.调整屏幕旋转事件百分比
$ adb shell monkey --pct-rotation <percent>
--pct-rotation 后面接屏幕旋转事件的比例值。
8.其他参数

2.4约束类参数
1.包约束
-p:后面接一个或多个包名(<allowed-package-name>),如果应用需要访问其他包里的Activity,那相关的包也需要在此同时指定。如果不指定任何包,monkey将允许系统启动全部包里的Activity。
$ adb shell monkey -p <allowed-package-name> <event-count>
eg:
$ adb shell monkey -p com.tal.kaoyan 500
$ adb shell monkey -p com.tal.kaoyan -p com.tencent.mm 500
2.activity类约束
如果你希望将monkey限制在一个或几个类别中,使用如下命令:
adb shell monkey -c <main-category> <event-count>
以下命令表示运行Intent.CATEGORY_LAUNCHER类别的Activity并发送1000个随机事件。
$ adb shell monkey -c Intent.CATEGORY_LAUNCHER 1000

2.5调试类参数
1.应用程序崩溃后继续发送事件
如果你希望monkey在应用程序崩溃后继续发送事件,则需要用到--ignore-crashes命令
$ adb shell monkey --ignore-crashes <event-count>
在设置此选项后,当应用程序崩溃或发生失控异常时,monkey将继续运行直到计数完成。如果不设置此选项,monkey遇到上述崩溃或异常将停止运行。
2.超时错误继续发送事件
如果你希望monkey在任何超时错误发生后继续发送事件,则需要用到--ignore-timeouts命令。
$ adb shell monkey --ignore-timeouts
<event-count>--ignore-timeouts:在设置此选项后,当应用程序发生任何超时错误(如ANR,即Application Not Responding)时,monkey将继续运行直到计数完成。如果不设置此选项,monkey遇到此类超时对话框将停止运行。
3.应用程序权限错误发生后继续发送事件
如果你希望monkey在应用程序权限错误发生后继续发送事件,则需要用到--ignore-security-exceptions命令。
$ adb shell monkey --ignore-security-exceptions
<event-count>--ignore-security-exceptions:在设置此选项后,当应用程序发生任何权限错误(如启动一个需要某些权限的Activity)时,monkey将继续运行直到计数完成。如果不设置此选项,monkey遇到此类权限错误将停止运行。
4.其他

3、Monkey参数应用综合案例
3.1测试场景
测试考研帮app Android版。测试希望通过Monkey来模拟用户的随机操作,检查被测应用是否会出现异常(应用崩溃或者无响应)。
3.2需求分析
1、测试是指定应用,因此需要使用-p指定被测app包名:com.tal.kaoyan
2、这个测试的目的是希望模拟用户操作,因此需要让Monkey执行的事件尽可能地接近用户的常规操作,这样才可以最大限度地发现用户使用过程中可能出现的问题。因此需要对Monkey执行的事件百分比做一些调整:
触摸事件和手势事件是用户最常见的操作,所以通过--pct-touch和--pct-motion将这两个事件的占比调整到40%与25%;目标应用包含了多个Activity,为了能覆盖大部分的Activity,所以通过--pct-appswitch将Activity切换的事件占比调整到10%;被测应用在测试中出现过不少横竖屏之间切换的问题,这个场景也必须关注,因此通过--pct-rotation把横竖屏切换事件调整到10%。
3、使用-s参数来指定命令执行的seed值 Monkey会根据seed值来生成对应事件流,同一个seed生成的事件流是完全相同的。这里指定了seed值,是为了测试发现问题时,便于进行问题复现。
4、使用--throttle参数来控制Monkey每个操作之间的时间间隔 指定操作之间的时间间隔,一方面是希望能更接近用户的操作场景,正常用户操作都会有一定的时间间隔;另一方面也是不希望因为过于频繁的操作而导致系统崩溃,尤其是在比较低端的手机上执行测试时。因此通过--throttle设置Monkey每个操作固定延迟0.4秒。
5、使用--ignore-crashs和--ignore-timeouts参数使Monkey遇到意外时能继续执行 在执行Monkey测试时,会因为应用的崩溃或没有响应而意外终止,所以需要在命令中增加限制参数--ignore-crash和--ignore-timeouts,让Monkey在遇到崩溃或没有响应的时候,能在日志中记录相关信息,并继续执行后续的测试。
6、使用-v指定log的详细级别 Monkey的日志输出有3个级别:日志的级别越高,其详细程度也越高。为了方便问题的定位,这里将日志设为 -v -v.
3.3测试命令
adb shell monkey -p com.tal.kaoyan
--pct-touch 40 --pct-motion 25
--pct-appswitch 10
--pct-rotation 5
-s 1666 --throttle 400
--ignore-crashes
--ignore-timeouts
-v -v 200
4、小结
好了,Monkey参数暂且到这里,告一段落,下一篇计划介绍分享Monkey的日志管理,各位小伙伴敬请期待哈!!!
您的肯定就是我进步的动力。如果你感觉还不错,就请鼓励一下吧!记得点波 推荐 哦!!!(点击右边的小球即可)
个人公众号

微信群

Appium+python自动化(十九)- 猴哥失散多年的混血弟弟还是妹妹- Monkey(猴子)参数(超详解)的更多相关文章
- Appium+python自动化(二十)- 猴哥失散多年的混血弟弟还是妹妹- Monkey(猴子)日志(超详解)
简介 日志是非常重要的,用于记录系统.软件操作事件的记录文件或文件集合,可分为事件日志和消息日志.具有处理历史数据.诊断问题的追踪以及理解系统.软件的活动等重要作用,在开发或者测试软系统过程中出现了问 ...
- Appium+python自动化(十八)- 你难道是猴哥失散多年的混血弟弟还是妹妹???- Monkey事件(超详解)
操作事件简介 Monkey所执行的随机事件流中包含11大事件,分别是触摸事件.手势事件.二指缩放事件.轨迹事件.屏幕旋转事件.基本导航事件.主要导航事件.系统按键事件.启动Activity事件.键盘事 ...
- Appium+python自动化(十七)- 你难道猴哥失散多年的混血弟弟 - Monkey简介之开山篇(超详解)
简介 今天由宏哥给小伙伴们来介绍猴哥的混血弟弟=Monkey.Monkey 是Android SDK提供的一个命令行工具, 可以简单,方便地运行在任何版本的Android模拟器和实体设备上. Monk ...
- Appium+python自动化(二十九)- 模拟手指在手机上多线多点作战 - 多点触控(超详解)
简介 在网页中我们经常使用缩放操作来便利的查看具体的信息,在appium中使用MultiAction多点触控的类来实现.MultiAction是多点触控的类,可以模拟用户多点操作.主要包含加载add( ...
- Appium+python自动化(二十四)- 白素贞千年等一回许仙 - 元素等待(超详解)
简介 许仙小时候最喜欢吃又甜又软的汤圆了,一次一颗汤圆落入西湖,被一条小白蛇衔走了.十几年后,一位身着白衣.有青衣丫鬟相伴的美丽女子与许仙相识了,她叫白娘子.白娘子聪明又善良,两个人很快走到了一起.靠 ...
- Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)
简介 前边具体操作和实战已经讲解和分享了很多了,但是一些android的一些基础知识,你又知道多少了,你都掌握了吗?这篇就由宏哥给小伙伴们既是一个分享,又是对前边的一次总结.为什么要对这些做一个简单的 ...
- Jmeter(四十九) - 从入门到精通高级篇 - jmeter使用监视器结果监控tomcat性能(详解教程)
1.简介 上一篇宏哥讲解了利用jmeter的插件来监控服务器资源,这一篇讲解分享如何使用jmeter的监视器结果监控tomcat性能. 2.准备工作 文章标题中提到jmeter和tomcat,那么只需 ...
- Jmeter(五十二) - 从入门到精通高级篇 - jmeter之跨线程组传递参数(详解教程)
1.简介 之前分享的所有文章都是只有一个线程组,而且参数的传递也只在一个线程组中,那么如果需要在两个线程组中传递参数,我们怎么做呢?宏哥今天就给小伙伴或者童鞋们讲解一下,如何实现在线程组之间传递参数. ...
- Appium+python自动化(二十一)- 让猴子按你指令大闹手机,让你成为耍猴高手 - Monkey(猴子) - MonkeyScript(超详解)
简介 一年一度的暑假如期而至,每年必不可少的,便是<西游记>这部经典电视连续剧的播出,作为一名90后,对于这部经典剧的情谊,就是观看已成为一种习惯.依然深刻的记得,小时候妈妈为了催促我睡觉 ...
随机推荐
- String 源码分析
Java 源码阅读 - String String 类型看起来简单,实际上背后的复杂性基本可以涵盖了整个 Java 设计,涉及到设计模式(不可变对象).缓存(String Pool 的理念).JVM( ...
- WPF Path.Data 后台代码赋值
Path path = new Path(); string sData = "M 250,40 L200,20 L200,60 Z"; var converter = TypeD ...
- WM_CopyData 用法
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- LeetCode - 4 - Longest Substring Without Repeating Characters
题目 URL:https://leetcode.com/problems/median-of-two-sorted-arrays/ 解法 二分法. 总的思想是将 2 个数组用 2 个指针“整体”二分. ...
- C# WebApi使用AttributeRoutes特性路由
1.在创建WebApi中默认的路由规则,只能满足一般简单的RESTful风格,如 api/Products/{id}. 但是在实际运用中很难严格满足RESTful要求的WebApi.因此需要使用高版本 ...
- HTTP协议入门(一)- 版本
当我们在浏览器的地址栏输入URL后,信息会被发送到WEB服务器,服务器得到响应,将数据传输回来,展示到WEB页面上,这其中的传输方法就是HTTP协议. 一.HTTP 0.9 发布于1991年,是首个H ...
- shell中特殊变量及if条件
特殊变量: linux中shell变量$#,$@,$,$,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? ...
- Android零基础入门第48节:可折叠列表ExpandableListView
原文:Android零基础入门第48节:可折叠列表ExpandableListView 上一期学习了AutoCompleteTextView和MultiAutoCompleteTextView,你已经 ...
- 基于VUE实现的新闻后台管理系统-二
基础环境及最后的开发效果已完成说明,接下来就开始配置. ¶npm初始化 新建项目文件夹VueDemo,在其内执行如下脚本 npm init -y 安装vue-cli构建包 yarn add vue-c ...
- Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案
原文:Windows10 使用Virtual Box一启动虚拟机就蓝屏(错误代码SYSTEM_SERVICE_EXCEPTION)解决方案 一打开虚拟机电脑就立马蓝屏重启,新建虚拟机也没用,然后就开始 ...
