2025-1.15 实习学习日记 monkey稳定性测试

一、前期准备

  • 1、电脑配备ADB环境
  • 2、手机开启开发者模式
  • 3、电脑和手机连接好,可以使用ADB调试

二、monkey执行的前提条件

  • 手机设置常亮,锁屏关闭
  • 电量在90以上
  • 其他设置要设置好,wifi,数据网络,进程该关闭就关闭
  • app登录,数据创造,必要的情况,打开app一个页面
  • 执行命令之后少等一会,如果在可见之内发现退出账号,可以尝试换一个seed值操作

三、基本命令格式

adb shell monkey 各种参数 次数

例如:

adb shell monkey -p com.tencent.mobileqq --pct-touch 40 --pct-motion 25 --pct-appswitch 10 --pct-rotation 5 -s 1666 --throttle 400 --ignore-crashes --ignore-timeouts -v -v 20000

四、查看基本命令

adb shell monkey -h

五、测试使用基本命令

最基础的发送压力指令

  • adb shell monkey 1000
  • 1000代表monkey帮助我们实现1000个指令
  • 但是指令是monkey随机操作的

1) -p

参数-p用于约束限制,用此参数指定一个或多个包(Package,即App)。

指定包之后,Monkey将只允许系统启动指定的APP。

如果不指定包,Monkey将允许系统启动设备中的所有APP。

*指定一个包: adb shell monkey -p com.htc.Weather 100

说明:com.htc.Weather为包名,100是事件计数(即让Monkey程序模拟100次随机用户事件)。

*指定多个包:adb shell monkey -p com.htc.Weather –p com.htc.pdfreader -p com.htc.photo.widgets 100

*不指定包:adb shell monkey 100

说明:Monkey随机启动APP并发送100个随机事件。

adb shell pm list packages -3 查看手机上所有的第三方包名。

  • 2) -v
  • 用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下表所示:
  • 日志级别 Level 0 示例 adb shell monkey -p com.htc.Weather –v 100说明缺省值,仅提供启动提示、测试完成和最终结果等少量信息
  • 日志级别 Level 1示例 adb shell monkey -p com.htc.Weather –v -v 100说明提供较为详细的日志,包括每个发送到Activity的事件信息
  • 日志级别 Level 2示例 adb shell monkey -p com.htc.Weather –v -v –v 100说明最详细的日志,包括了测试中选中/未选中的Activity信息

 

  • 3)-s
  • 用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
  • *示例:Monkey测试1:adb shell monkey -p com.htc.Weather –s 10 100
  • Monkey测试2:adb shell monkey -p com.htc.Weather –s 10 100
  • 两次测试的效果是相同的,因为模拟的用户操作序列(每次操作按照一定的先后顺序所组成的一系列操作,即一个序列)是一样的。操作序列虽然是随机生成的,但是只要我们指定了相同的Seed值,就可以保证两次测试产生的随机操作序列是完全相同的,所以这个操作序列伪随机的。
  • 4)--throttle <毫秒>
  • 用于指定用户操作(即事件)间的时延,单位是毫秒;*示例:adb shell monkey -p com.htc.Weather –throttle 3000 100
  • 5)--ignore-crashes
  • 用于指定当应用程序崩溃时(Force & Close错误),Monkey是否停止运行。如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。
  • *示例1:adb shell monkey -p com.htc.Weather --ignore-crashes 1000测试过程中即使Weather程序崩溃,Monkey依然会继续发送事件直到事件数目达到1000为止;
  • *示例2:adb shell monkey -p com.htc.Weather 1000测试过程中,如果Weather程序崩溃,Monkey将会停止运行。
  • 6)--ignore-timeouts
  • 用于指定当应用程序发生ANR(Application No Responding)错误时,Monkey是否停止运行。如果使用此参数,即使应用程序发生ANR错误,Monkey依然会发送事件,直到事件计数完成。

  • 7)--ignore-security-exceptions
  • 用于指定当应用程序发生许可错误时(如证书许可,网络许可等),Monkey是否停止运行。如果使用此参数,即使应用程序发生许可错误,Monkey依然会发送事件,直到事件计数完成。
  • 8)参数: --kill-process-after-error
  • 用于指定当应用程序发生错误时,是否停止其运行。如果指定此参数,当应用程序发生错误时,应用程序停止运行并保持在当前状态(注意:应用程序仅是静止在发生错误时的状态,系统并不会结束该应用程序的进程)。

  • 9)参数: --monitor-native-crashes
  • 用于指定是否监视并报告应用程序发生崩溃的本地代码。
  • 10)
  • --pct-{+事件类别}{+事件类别百分比}
  • 用于指定每种类别事件的数目百分比(在Monkey事件序列中,该类事件数目占总事件数目的百分比)

  • --pct-touch{+百分比}
  • 调整触摸事件的百分比(触摸事件是一个down-up事件,它发生在屏幕上的某单一位置)
  • adb shell monkey -p com.htc.Weather --pct-touch 10 1000

  • --pct-motion{+百分比}
  • 调整动作事件的百分比(动作事件由屏幕上某处的一个down事件、一系列的伪随机事件和一个up事件组成)
  • adb shell monkey -p com.htc.Weather --pct-motion 20 1000

  • --pct-trackball{+百分比}
  • 调整轨迹事件的百分比(轨迹事件由一个或几个随机的移动组成,有时还伴随有点击)
  • adb shell monkey -p com.htc.Weather --pct-trackball 30 1000
  • --pct-nav{+百分比}
  • 调整“基本”导航事件的百分比(导航事件由来自方向输入设备的up/down/left/right组成)
  • adb shell monkey -p com.htc.Weather --pct-nav 40 1000

  • --pct-majornav{+百分比}
  • 调整“主要”导航事件的百分比(这些导航事件通常引发图形界面中的动作,如:5-way键盘的中间按键、回退按键、菜单按键)
  • adb shell monkey -p com.htc.Weather --pct-majornav 50 1000
  • --pct-syskeys{+百分比}
  • 调整“系统”按键事件的百分比(这些按键通常被保留,由系统使用,如Home、Back、Start Call、End Call及音量控制键)
  • adb shell monkey -p com.htc.Weather --pct-syskeys 60 1000
  • --pct-appswitch{+百分比}
  • 调整启动Activity的百分比。在随机间隔里,Monkey将执行一个startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
  • adb shell monkey -p com.htc.Weather --pct-appswitch 70 1000
  • --pct-anyevent{+百分比}
  • 调整其它类型事件的百分比。它包罗了所有其它类型的事件,如:按键、其它不常用的设备按钮、等等
  • adb shell monkey -p com.htc.Weather
  • --pct -anyevent 100 1000*
  • 指定多个类型事件的百分比:
  • adb shell monkey -p com.htc.Weather --pct-anyevent 50 --pct-appswitch 50 1000注意:各事件类型的百分比总数不能超过100%;

六、monkey的11种事件

Monkey 是 Android 中的一个命令行工具,用于对应用进行压力测试,它可以产生多种事件来模拟用户操作。以下是 Monkey 的 11 种主要事件类型:

  1. 触摸事件(Touch Event)

    • 详细解释:触摸事件是模拟用户手指在屏幕上的触摸操作。包括点击(Tap)、长按(Long Press)等。这些操作是用户与 Android 应用交互的最基本方式之一,例如在屏幕上点击按钮来执行某个功能,或者长按某个元素来弹出菜单等。
    • 示例:当用户在一个游戏应用中,触摸屏幕来控制游戏角色的移动或者发动技能时,就相当于产生了触摸事件。
  2. 手势事件(Gesture Event)

    • 详细解释:手势事件涵盖了比简单触摸更复杂的用户手势,如滑动(Swipe)、缩放(Pinch)等。滑动手势常用于屏幕之间的切换,像在查看相册或者浏览网页时,左右滑动屏幕来查看下一张图片或者下一页内容。缩放手势则用于对图片、地图等内容进行放大或缩小操作,方便用户查看细节或者获取整体视图。
    • 示例:在地图应用中,用户通过双指缩放手势来查看不同比例尺的地图,这就是手势事件的一种体现。
  3. 按键事件(Key Event)

    • 详细解释:按键事件模拟了用户对设备物理按键或软键盘按键的操作。这包括返回键(Back Key)、主页键(Home Key)、菜单键(Menu Key)等物理按键,以及软键盘上的字母、数字、符号等按键。例如,用户按下返回键来关闭当前活动或者返回上一个界面,或者在输入框中通过软键盘输入文字等操作都会产生按键事件。
    • 示例:在一个文本编辑应用中,用户通过软键盘输入文字,每按下一个字符键就会产生一个按键事件。
  4. 基本导航事件(Basic Navigation Event)

    • 详细解释:这些事件用于模拟设备的基本导航操作,如上下左右方向键(D - Pad)的操作。在一些应用中,特别是那些适配了物理按键导航的应用,用户可以使用方向键来在界面元素之间进行焦点切换或者滚动内容。
    • 示例:在一个电视盒子上的视频播放应用中,用户可以使用方向键来在视频播放界面的菜单选项(如播放 / 暂停、快进 / 快退等按钮)之间进行焦点切换,这种操作就涉及基本导航事件。
  5. 轨迹球事件(Trackball Event)

    • 详细解释:轨迹球事件是模拟带有轨迹球的设备上用户对轨迹球的操作。轨迹球的操作可以产生滚动或者选择等效果,不过随着触摸屏设备的普及,轨迹球设备已经比较少见,但在一些特定的旧设备或者专业设备上可能还会用到。
    • 示例:在早期的一些 Android 智能手机上,用户通过滚动轨迹球来在网页或者长列表中进行上下滚动操作,这就是轨迹球事件。
  6. 屏幕旋转事件(Screen Rotation Event)

    • 详细解释:屏幕旋转事件模拟了用户旋转设备屏幕的操作。当设备的方向从竖屏变为横屏或者反之,应用需要能够正确地处理界面布局的变化,以提供良好的用户体验。这个事件可以测试应用在不同屏幕方向下的兼容性和稳定性。
    • 示例:在观看视频时,用户将手机从竖屏模式旋转为横屏模式,此时应用会接收到屏幕旋转事件,并且应该相应地调整视频播放界面的布局,使视频能够全屏播放。
  7. 活动管理器事件(Activity Manager Event)

    • 详细解释:这些事件主要涉及 Android 系统中活动(Activity)的管理。例如,启动一个新的活动、关闭当前活动、将活动切换到后台或者恢复到前台等操作。活动是 Android 应用中用户界面的基本组成部分,这些事件可以测试应用在不同活动状态转换下的行为是否正确。
    • 示例:当用户从一个应用的主界面(一个活动)进入到应用的设置界面(另一个活动),就涉及活动管理器事件,即启动了一个新的活动。
  8. 系统按键事件(System Key Event)

    • 详细解释:系统按键事件是针对系统级别的按键操作,如电源键(Power Key)、音量键(Volume Key)等。这些按键操作会影响系统的状态或者应用的音频输出等方面。例如,用户按下音量键来调节应用的声音大小,或者长按电源键来弹出关机 / 重启等选项菜单。
    • 示例:在播放音乐应用时,用户通过按音量增大键来提高音乐的播放音量,这就产生了系统按键事件。
  9. 拨打电话事件(Phone Call Event)

    • 详细解释:这个事件用于模拟用户拨打电话的操作。虽然在大多数应用测试场景下可能不会频繁用到这个事件,但对于一些具有通话功能或者与通信相关的应用(如社交应用中的语音通话功能),这个事件可以用于测试应用在通话过程中的行为,如通话界面的显示、通话质量等方面。
    • 示例:在一个即时通讯应用中,当用户发起语音通话时,就相当于产生了拨打电话事件,应用需要正确地处理通话连接、音频传输等一系列操作。
  10. 接听电话事件(Answer Call Event)

  • 详细解释:接听电话事件模拟用户接听来电的操作。当有来电时,应用可能需要暂停当前的操作或者切换到合适的通话界面,这个事件可以测试应用在这种情况下的响应能力。
  • 示例:当手机接收到来电,用户通过滑动屏幕或者按下接听键来接听电话,应用(如果正在运行)应该正确地处理这个接听电话事件,例如暂停正在播放的音频或视频等。

   11.挂断电话事件(End Call Event)

  • 详细解释:挂断电话事件用于模拟用户结束通话的操作。在通话结束后,应用需要能够恢复到之前的状态或者正确地处理通话结束后的清理工作,如释放音频资源等。
  • 示例:当用户在通话结束后按下挂断键,应用会接收到挂断电话事件,并且应该相应地调整界面状态,例如重新显示之前被暂停的内容。

七、测试日志保存

  • adb shell monkey -p 包名 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes -s 360 -v -v --throttle 450 350000 >D:\log\monkeylog.txt

  • 重定向,用于保存。否则所有log都在cmd中,不好查找。

保存在PC端:adb shell monkey 命令参数 count计数 >pc端路径+文件名.txt

adb shell monkey [options] 1000 >d:\monkey.txt 保存在手机中:adb shell 进入Android shell中 ,monkey [options] count计数 > 手机端路径+文件名.txt monkey [options] 1000 >/sdcard/monkey_info.txt

将错误流和信息流分开保存成两个文件:

如都保存在PC端:

adb shell monkey 命令参数 count计数 1>pc端路径+信息流日志文件名.txt 2>pc端路径+错误流流日志文件名.txt

adb shell monkey [options] 1000 1>d:\monkey_info.txt 2>d:\monkey_error.txt 注意: 要么都在手机端,要么都在PC端。1表示monkey正常运行日志,2表示monkey错误的运行日志,如果错误日志为空,表示运行中无错误日志。

八、结果分析

(1)分析日志和开头和结尾(seed、count、package、times)

(2)查找日志中出现的错误信息(crash、ANR、error、exception、timeout)

(3)如果出现错误,按照seed值重新执行monkey命令分析错误,如果monkey命令执行无法发现问题,可以根据日志上下文手动执行相关步骤

(4)一般,0 CRASH, 0 ANR 是测试标准 由于运行时间比较久,所以日志文件可能会比较大(M/G),打开会比较慢。

九、结果分析步骤

(1)分析开头 显示本次测试seed值,执行次数,测试package包

(2)分析结尾 如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间; Monkey finished代表执行完成。 如果Monkey执行中断,在log的最后也能查看到当前已执行的次数。

(3)日志内容分析---搜索关键字 程序无响应,ANR问题:在日志中搜索“ANR” 崩溃问题:在日志中搜索":“CRASH” 其他问题:在日志中搜索: "Exception”

(4)详细分析monkey日志 Switch:查看log中的Switch,主要是查看Monkey执行的是那一个Activity,两个swtich之间如果出现了崩溃或其他异常,可以在该Activity中查找问题的所在。 Sleeping:Sleeping for 300 milliseconds这是执行Monkey测试时,throttle设定的间隔时间,每出现一次就代表一个事件。

(5)重现问题---Monkey测试出现错误后,一般的查错步骤为: 找到是monkey里面的哪个地方出错; 查看Monkey里面出错前的一些事件动作,并手动执行该动作; 若以上步骤还不能找出,可以使用之前执行的monkey命令再执行一遍,注意seed值要一样。 一般 0 ANR 、0 CRASH是测试标准。手机中的traces.txt日志文件可配合共同查错

十、实际命令举例

  • adb shell monkey -p 包名 --ignore-crashes --ignore-timeouts --ignore-security-exceptions --monitor-native-crashes -s 360 -v -v --throttle 450 350000 >D:\log\monkeylog.txt
  • 这个测试的目的是希望模拟用户操作,因此需要让Monkey执行的事件尽可能地接近用户的常规操作,这样才可以最大限度地发现用户使用过程中可能出现的问题。
  • 测试是指定应用,因此需要使用-p指定被测app包名:com.tencent.mobileqq
  • 触摸事件和手势事件是用户最常见的操作,所以通过--pct-touch和--pct-motion将这两个事件的占比调整到40%与25%;
  • 目标应用包含了多个Activity,为了能覆盖大部分的Activity,所以通过--pct-appswitch将Activity切换的事件占比调整到10%;
  • 被测应用在测试中出现过不少横竖屏之间切换的问题,这个场景也必须关注,因此通过--pct-rotation把横竖屏切换事件调整到10%。
  • 使用-s参数来指定命令执行的seed值 Monkey会根据seed值来生成对应事件流,同一个seed生成的事件流是完全相同的。这里指定了seed值,是为了测试发现问题时,便于进行问题复现。
  • 使用--throttle参数来控制Monkey每个操作之间的时间间隔 指定操作之间的时间间隔,一方面是希望能更接近用户的操作场景,正常用户操作都会有一定的时间间隔;另一方面也是不希望因为过于频繁的操作而导致系统崩溃,尤其是在比较低端的手机上执行测试时。因此通过--throttle设置Monkey每个操作固定延迟0.4秒。
  • 使用--ignore-crashs和--ignore-timeouts参数使Monkey遇到意外时能继续执行 在执行Monkey测试时,会因为应用的崩溃或没有响应而意外终止,所以需要在命令中增加限制参数--ignore-crash和--ignore-timeouts,让Monkey在遇到崩溃或没有响应的时候,能在日志中记录相关信息,并继续执行后续的测试。
  • 使用-v指定log的详细级别 Monkey的日志输出有3个级别:日志的级别越高,其详细程度也越高。为了方便问题的定位,这里将日志设为 -v -v
  • adb shell monkey -p com.tencent.mobileqq --pct-touch 40 --pct-motion 25 --pct-appswitch 10 --pct-rotation 5 -s 1666 --throttle 400 --ignore-crashes --ignore-timeouts -v -v 20

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值