[摘]Android monkey命令详解

adb  Android  2019年6月3日 pm7:50发布6年前 (2019)更新 城堡大人
69 0 0

先来两个简单的Android monkey命令

Demo1

adb shell monkey -v -v -p com.125la.test --throttle 5000 1000

-v -v Level 1级日志,提供更详细的安装信息,如测试中被选中或者未被选中的Activity

-p com.125la.test 仅测试这个包名

5000 每个指定之间延迟5秒

1000 随机事件个数

Demo2

PS:由于太长,不好显示,我换行了,如果拷贝命令时注意下

monkey -p com.125la.test --ignore-crashes --ignore-timeouts --ignore-native-crashes
 --pct-touch 30 -s 1 -v -v --throttle 200 100000 2>/sdcard/error.txt 1>/sdcard/info.txt

PS: 以上命令中的/sdcard/error.txt 和 /sdcard/info.txt需要自己手动创建,否则找不到的。

-p com.125la.test 仅针对这个包名测试

--ignore-crashes 忽略应用程序崩溃(force & Close 错误),继续发送并执行事件,直到事件执行完成

--ignore-timeouts 忽略应用程序发声ANR(Application No Responding)错误时,直到事件执行完成

--ignore-native-crashes 忽略本地程序奔溃,直到事件执行完成

--pct-touch 30 调整触摸事件为30%,即整个事件中触摸实际占30%

-s 1 伪随机数生成器seed值。seed值为1,相同的seed值再次执行monkey,将产生相同的序列

-v -v 日志等级为level 1,将提供较为详细的日志,包括每一个发送到Activity的事件信息

--throttle 200 事件直接延迟200ms 可以控制monkey事件的执行速度,如果不指定该选项,monkey事件不会延迟

100000 执行事件为10万次

2>/sdcard/error.txt Level 2日志保存到sdcard的error.txt中

1>/sdcard/info.txt Level 1日志保存到sdcrad的info.txt中

一、monkey命令详解

$ adb shell monkey <event-count>   <event-count>是随机发送事件数

例:adb shell monkeyn 1000   发送1000个随机事件

$ adb shell monkey [options] <event-count>    [options]是monkey可传入的参数

Monkey的option主要分为:常规类、事件类、约束类和调试类4种

常规类命令:

adb shell monkey -v <event-count>

-v:打印出日志信息,每个-v将增加反馈信息的级别。-v越多日志信息越详情,最多支持3个-v

-v,Level 0(缺省值),除启动提示、测试完成和最终结果之外,提供较少信息

-v -v,Level 1,提供较为详细的测试信息,如:逐个发送到Activity的事件

-v -v -v,Level 2,提供更加详细的设置信息,如:测试中被选中的或未被选中的Activity

事件类命令:

$ adb shell monkey -f <scriptfile> <event-count>

-f:后接测试脚本名,表示要使用monkey运行指定的monkey脚本,

如:$ adb shell monkey -f /mnt/sdcard/test01 3

注:这里的3是指循环次数,不是事件数

如果希望重复执行之前的随机操作,需要加-s命令,可指定随机数生成器seed值

$ adb shell monkey -s <seed> <event-count>

-s:后接随机数生成器的seed值,如果使用相同的seed值再次运行monkey,将生成相同的事件序列(也就是说,重复执行刚才的随机操作)

如: $ adb shell monkey -s 100 1000

$ adb shell monkey --throttle <milliseconds>

--throttle:后面接时间,单位为ms,表示事件之间的固定延迟(即执行每一个指令间隔的时间),如果不接该项,monkey将不会延迟

$ adb shell monkey --pct-touch <percent>

--pct-touch:后面接触摸事件百分比,触摸事件泛指发生在某一位置的一个down-up事件,点击

$ adb shell monkey --pct-montion <percent>

--pct-motion:后面接动作事件百分比,动作事件泛指从某一位置接下(即down事件)后经过一系列伪随机事件后弹出(即up事件)

$ adb shell monkey --pct-trackball <percent>

--pct-trackball:后面接轨迹事件百分比,轨迹事件包括一系列的随机移动,以及偶尔跟随在移动后面的点击事件

$ adb shell monkey --pct-nav <percent>

--pct-nav:后面接基本导航事件百分比,基本导航事件主要来自方向输入设备的上、下、左、右事件

$ adb shell monkey --pct-majornav <percent>

--pct-marjornav:后面接主要导航事件百分比,主要导航事件通常指引发图形界面的一些动作,如键盘中间按键、返回按键、菜单按键等

$ adb shell monkey --pct-syskeys <percent>

--pct-syskeys:后面接系统按键事件百分比,系统按键事件通常指仅供系统使用的保留按键,如HOME键、BACK键、拨号键、挂断键、音量键等

$ adb shell monkey --pct-appswtich <percent>

--pct-appswitch:后面接应用启动事件百分比,应用启动事件(activity launches)即打开应用,通过调用startActivity()方法最大限度地开启该package下的所有应用

$ adb shell monkey --pct-anyevent <percent>

--pct-anyevent:后面接其他类型事件百分比,其他类型事件指上文中未涉及的所有其他事件,如keypress、不常用的button等

[摘]Android monkey命令详解

约束类命令

约束类命令可以让随机事件运行的范围限制在某几个包或类中。

$ adb shell monkey -p <allowed-package-name>  <event-count>

-p:后面接一个或多个包名,如果不指定任何包,monkey将允许系统启动全部包里的Activity。每个-p对应一个包,指定多个包时每个包名前都需要加上-p

如:$ adb shell monkey -p com.agent.tao  1000       运行com.agent.tao 包里的Activity并发送1000个随机事件

$ adb shell monkey -c <main-category>  <event-count>

-c:后面接一个或多个类别名,monkey将只允许系统启动这些类别中某个类别列出的Activity,如果不指定任何类别,monkey将选择Intent.CATEGORY_LAUNCHER和Intent.CATEGORY_monkey里的Activity

每个-c对应一个类别,指定多个类别时每个类别名前面都需要加上-c

如:$ adb shell monkey -c Intent.CATEGORY_LAUNCHER 1000

运行Inter.CATEGORY_LAUNCHER类别的Activity并发送1000个随机事件

[摘]Android monkey命令详解

调试类命令

通过调试类命令可以对monkey进行简单的调试,这样可以快速定位monkey运行中的问题

$ adb shell monkey --dbg-no-events  <event-count>

--dbg-no-events:设置此项后,monkey将进行初始启动,进入到某个测试Activity中不会进一步生成事件,可以监视应用程序所调用的包之间的转换,为了更好的跟踪,一般该项

会与-v(日志)、-p<allowed-package-name> (包约束) 和 --throttle<milliseconds> (延迟)等联合使用

$ adb shell monkey --hprof  <event-count>

--hprof:设置此项后,将在monkey事件序列前后立即生成profilfing report,将在data/misc中生成5MB左右大小的文件

$ adb shell monkey --ignore-crashes  <event-count>

--ignore-crashes:设置此项后,当应用程序崩溃或发生失控异常时,monkey将继续运行直到计数完成。如果不设置此项,monkey遇到上述崩溃或异常将停止运行。

$ adb shell monkey --ignore-timeouts  <event-count>

--ignore-timeouts:设置此项后,当应用程序发生任何超时错误(如ANR,即Application Not Responding)时,monkey将继续运行直到计数完成。如果不设置此项,monkey

遇到此类超时将停止运行

$ adb shell monkey --kill-process-after-error  <event-count>

--kill-process-after-error:设置此项后,当monkey因为应用程序发生错误而停止时,将会通知系统停止发生错误的进程。如果不设置此项,monkey停止时发生错误的应用程度将

继续处于运行状态。

$ adb shell monkey --ignore-security-exceptions <event-count>

--ignore-security-exceptions:设置此项后,当应用程序发生任何权限错误(如启动一个需要某些权限的Activity)时,monkey将继续运行直到计数完成。如果不设置此项,

monkey遇到此类权限错误将停止运行。

$ adb shell monkey --monitor-native-crashes  <event-count>

--monitor-native-crashes:设置此项后,monkey运行时native code的崩溃事件将被监视并报告。如果不设置此选项,将不会监视此类事件。

$ adb shell monkey --wait-dbg  <event-count>

--wait-dbg:在设置此项后,将暂停执行中的monkey,直到有调试器与它连接。

[摘]Android monkey命令详解

二、monkey日志分析

结果检查与分析

测试结束后,需要将手机连接PC,拷贝以下文件:

  • info.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时发送的各种事件,如触摸事件的位置等等。
  • error.txt:此文件在手机上的SDCARD中,主要记录了MONKEY测试时产生的一些ANR、强制关闭等异常。
  • LOG文件:此文件在手机上的LOG文件夹中中,主要主要记录程序对MONKEY测试时的响应情况。

我们需要对这3个文件进行分析整理,以便提交开发人员处理。

检查测试是否完成

通过info.txt文件,可以查看Monkey是否执行成功。如下图

[摘]Android monkey命令详解

结果分析整理

我们目前执行Monkey测试的目的是为了检查是否有内存泄露,而这类问题主要是通过Log文件来体现的。

Error文件也记录了部分异常,考虑到这部分文件格式已经很规范,因此不需要再次整理。

Log文件记录了所有信息,因此我们需要进行初步分析整理后再提交研发,以减少研发工作量。

Monkey测试后在Mobilelog文件中会产生多个main_log文件,里面含有详细的log执行记录。通过main_log文件,我们可以查看可能存在内存泄露代码所在具体位置。是否该行代码存在泄露需要开发人员进一步验证。我们只提供可能存在代码泄露的信息。

含有mian_log的文件都需要进行查看。搜索关键字“leak”,在搜索结果中,查看与Ideafreiend相关的代码。如下图:

[摘]Android monkey命令详解

注:com.lenovo.ideafriend:Ideafriend包名;CursorLeakDetecter: 游标泄露检查器

1. 程序无响应的问题: 在日志中搜索 “ANR”
2. 崩溃问题:在日志中搜索 “Exception”   (如果出现空指针, NullPointerException)  肯定是有bug

 

本文摘抄于《monkey命令》,部分图片中文字转成了文字。感谢原作者,这篇文章整理得不错。

 历史上的今天

  1. 2023: AIDL之注册和解注册监听器(0条评论)
  2. 2021: [摘]修改cmd编码格式(0条评论)
  3. 2021: 郑愁予 : 错误(0条评论)
  4. 2021: [小知识]内存泄漏整理(0条评论)
版权声明 1、 本站名称: 笔友城堡
2、 本站网址: https://www.biumall.com/
3、 本站部分文章来源于网络,仅供学习与参考,如有侵权,请留言

暂无评论

暂无评论...

随机推荐

UTF-8下指定字节个数截断字符串

前言项目中存在需要截取字符串长度,比如仪表需要显示歌曲信息时,由于存在字节限制,因此传输时需要截取一部分。记录于此,方便自己查阅。正文本文使用了百度AI助手搜索的。需求UTF-8下长度超过50个字节的歌曲名需要截断。思路在Java中,如果你想要截取一个UTF-8编码的字符串,使其总...

Android Jetpack - Navigation的Fragment生命周期

前言根据《Android Jetpack - Navigation的简单使用》的使用,我们已经知道了Navigation的使用了。使用Navigation的Fragment的生命周期和FragmentTransaction管理Fragment的存在不一样,因此这里简单记录一下。正文PS: ...

朱自清:背影

那年冬天,祖母死了,父亲的差使也交卸了,正是祸不单行的日子。我从北京到徐州打算跟着父亲奔丧回家。到徐州见着父亲,看见满院狼藉的东西,又想起祖母,不禁簌簌地流下眼泪。父亲说:“事已如此,不必难过,好在天无绝人之路!”回家变卖典质,父亲还了亏空;又借钱办了丧事。这些日子,家中光景很是惨淡,一半为了丧事...

[摘]dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

前言最近因为一个紧急的项目,客户要求摘他另外一个客户的样机,为了赶进度,我们通过反编译样机中的应用,获取UI和布局等。但,做出来后,效果总感觉有些不一样,比如显示的字体大小。最后发现,我们调试的样机分辨率虽然跟样机一样,但密度不一样。客户的样机:240dpi我们的设备:160dpi获取...

PRODUCT_COPY_FILES预拷贝

在Android项目中需要使用PRODUCT_COPY_FILES 预拷贝文件和目录。 拷贝文件PRODUCT_COPY_FILES += device/qcom/msm8909/media/media_profiles_8909.xml:system/etc/media_profi...

adb shell命令控制WIFI连接开启/关闭状态

1、确保机器已经root,使用adb root 试试此命令如果返回如下,就表示不能rootadb: unable to connect for root: no devices/emulators found在上面root后,可以执行如下命令开关WiFi2、打开WIFI指令adb shel...