前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Monkey随机性能压测初探(一)

Monkey随机性能压测初探(一)

作者头像
王大力测试进阶之路
发布2019-10-25 17:39:35
1.5K0
发布2019-10-25 17:39:35
举报
文章被收录于专栏:橙子探索测试橙子探索测试

Monkey介绍

Monkey程序由Android系统自带,是Android SDK提供的一个命令行工具, 可运行Android模拟器和实体设备上。Monkey会发送伪随机的用户事件流,通过Monkey程序模拟用户触摸屏幕、滑动、 按键等操作来对程序进行压力测试,检测多长时间发生异常、会Crash、以及内存泄露检测可称为随机测试或稳定性测试。

Monkey 命令启动方式

a)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试

b)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试

c ) 在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

Monkey框架

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值,如果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毫秒

每个事件的间隔时间3000毫秒

例:adb shell monkey -p com.shjt.map --throttle 3000 100

实施测试

1、配好sdk、adb环境

2、手机连接电脑,开启开发者模式和调试模式

3、adb devices查看设备连接情况

4、进入要测试的app,查看包名

adb shell dumpsys window | findstr mCurrentFocus

adb shell dumpsys window w |findstr \/ |findstr name=

5、向app发送一些事件

向app发送10个随机事件,adb shell monkey -p com.rabbit.doctor -v 10 仅提供启动提示、测试完成和最终结果等少量信息

向app发送10个随机事件,adb shell monkey -p com.rabbit.doctor -v -v 10 提供较为详细的日志,包括每个发送到Activity的事件信息

向app发送10个随机事件,adb shell monkey -p com.docrab.pro -v -v -v 10 最详细的日志,包括了测试中选中/未选中的Activity信息

指定一个seed值-s 10,相同的seed值执行的操作相同 adb shell monkey -p com.rabbit.doctor -v -s 10 10

向app发送100个随机事件,每个事件间隔3秒 adb shell monkey -p com.docrab.pro --throttle 3000 -v -v -v 50

向app发送10个随机事件,并保存至路径下adb shell monkey -p com.rabbit.doctor -v 10 >c:\monkeylog.txt

向指定设备device压测 adb -s emulator-5554 shell monkey -p your.www.com -v 500 -s 加 device emulator-5554

6、测试结果展示

C:\Windows\system32>adb shell monkey -p com.docrab.pro -v 100 //p表示指定测试程序,v表示monkey生成的详细随机事件名,100事件数

:Monkey: seed=1510018290134 count=100 //开始未指定时,随机生成的seed值

:AllowPackage: com.docrab.pro //包名

:IncludeCategory: android.intent.category.LAUNCHER

:IncludeCategory: android.intent.category.MONKEY

// Event percentages: //各种事件占的比例

// 0: 15.0%

// 1: 10.0%

// 2: 2.0%

// 3: 15.0%

// 4: -0.0%

// 5: -0.0%

// 6: 25.0%

// 7: 15.0%

// 8: 2.0%

// 9: 2.0%

// 10: 1.0%

// 11: 13.0% //表示跳转到com.example.android.apis 里面的ApiDemos这一个Activity里。

:Switch: #Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.docrab.pro/com.squareup.leakcanary.internal.DisplayLeakActivity;end

// Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.docrab.pro/com.squareup.leakcanary.internal.DisplayLeakActivity } in package com.docrab.pro

:Sending Touch (ACTION_DOWN): 0:(501.0,218.0)

// Injection Failed

:Sending Touch (ACTION_UP): 0:(492.16553,221.75143)

// Injection Failed

:Sending Trackball (ACTION_MOVE): 0:(-2.0,-4.0) //发送的一些动作,如点击按下,点击放开,移动。

:Sending Trackball (ACTION_UP): 0:(0.0,0.0)

:Sending Touch (ACTION_DOWN): 0:(462.0,51.0)

:Sending Touch (ACTION_UP): 0:(377.56924,0.0)

:Sending Trackball (ACTION_MOVE): 0:(1.0,-1.0)

:Sending Touch (ACTION_DOWN): 0:(451.0,1139.0)

:Sending Touch (ACTION_UP): 0:(445.72433,1140.6277)

:Sending Touch (ACTION_DOWN): 0:(717.0,464.0)

:Sending Touch (ACTION_UP): 0:(720.0,483.52737)

:Sending Trackball (ACTION_MOVE): 0:(-4.0,3.0)

:Sending Trackball (ACTION_UP): 0:(0.0,0.0)

:Sending Touch (ACTION_DOWN): 0:(684.0,69.0)

:Sending Touch (ACTION_UP): 0:(691.5189,169.68057)

:Sending Touch (ACTION_DOWN): 0:(376.0,1005.0)

:Sending Touch (ACTION_UP): 0:(382.10815,1030.8892)

Events injected: 100 //完成次数

:Sending rotation degree=0, persist=false

:Dropped: keys=0 pointers=2 trackballs=0 flips=0 rotations=0 //丢弃的,键=0,指针=2,轨迹球=0,翻转=0。

##Network stats: elapsed time=327ms (0ms mobile, 0ms wifi, 327ms not connected) //花费时间

// Monkey finished //完成

Monkey日志分析

1、正常情况, 如果Monkey测试顺利执行完成, 在log的最后, 会打印出当前执行事件的次数和所花费的时间;// Monkey finished 代表执行完成\

2、异常情况

Monkey 测试出现错误后,一般的分析步骤

看Monkey的日志 (注意第一个swith以及异常信息等)

  1. 程序无响应的问题: 在日志中搜索 “ANR”,ANR: Application Not Responding 应用程序无响应。ANR一般有以下三种类型: A:KeyDispatchTimeout(5 seconds) --主要类型:按键或触摸事件在特定时间内无响应 B:BroadcastTimeout(10 seconds):BroadcastReceiver在特定时间内无法处理完成 C:ServiceTimeout(20 seconds) --小概率类型:Service在特定的时间内无法处理完成

此外当ANR问题发生后我们可以使用adb pull命令(此命令无需root权限)从被测设备的/data/anr目录下导出名为traces.txt的对应log文件。例子:adb pull /data/anr/traces*.txt > C:\

2. 崩溃问题搜索 “CRASH”

3、异常问题搜索 “Exception”(如果出现空指针, NullPointerException,需格外重视,肯定有bug)。

4、内存泄露问题搜索"GC"(需进一步分析)

A、当手机提示Out of Memory(内存不足)时基本确定有内存泄露的问题

B、当查看logcat时有GC字段,可能有内存泄露问题。

与GC相关的字段有如下四个:

GC_FOR_ALLOC 在分配内存时内存不够引发

GC_EXPLICIT 表明GC被显式请求触发的,如System.g

GC_CONCURRENT, 表明GC在内存使用率达到一定的警戒值时,自动触发

GC_BEFORE_OOM, 表明在虚拟机抛出内存不够异常OOM之前,执行最后一次回收内存垃圾

当出现内存泄露问题时可以加上--hprof参数再执行一次monkey测试,便可获得对应的profiling报告。

如果指定了这个选项,monkey会在发送时间的前后生成app内存快照文件,一般会在手机设备的/data/misc目录下生成hprof的文件。【/data/misc 需要root权限,可以在手机上安装个RE查看或通过手机助手查看

BUG实例1:

BUG实例2:

adb指令:

关闭adb服务 adb kill-server

开启adb服务 adb start-server

上传文件:adb push <本地文件><远程路径> 例:adb push d:\3.txt storage/sdcard

下载文件:adb pull <远程路径><本地路径> 例:adb pull storage/sdcard/3.txt d:\

输出调试的信息:adb bugreport

android list targets #显示系统中全部android平台

adb install -r 应用程序.apk #安装apk程序

adb push D:Test.apk/syste/app/ #安装apk程序

adb push D:file.txt/system/temp/ #向手机写入文件

adb pull /system/temp/ D:file.txt #从手机获取文件

adb logcat #查看日志

adb logcat | find "com.rabbit.doctor" >c:\hello.txt #记录日志到电脑上

adb logcat -v time > d:/sss.log #当前日志输出到d盘的sss.log中

打印日志保存下来

adb logcat | find "com.koubeigongzuo.ck" >C:/logg.txt

实时监控对应app日志

adb logcat | find "com.koubeigongzuo.ck"

实时监控对应app报错日志

adb logcat *:E | find "com.koubeigongzuo.ck"

显示所有优先级大于等于错误(Error)的日志

adb logcat *:E

显示所有优先级大于等于严重错误的日志

adb logcat *:F

查看安卓版本号

adb shell pm dump com.koubeigongzuo.ck | findstr "versionName

apk的应用信息、版本信息

adb shell dumpsys package com.koubeigongzuo.ck

获取应用执行时的内存等相关信息

adb shell dumpsys meminfo com.koubeigongzuo.ck

点击

adb shell input tap 250 250

滑动

adb shell input swipe 250 250 300 300

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 橙子探索测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档