monkey压力测试


一、monkey简介

monkey是Android系统的一个命令行工具,可以运行在模拟器、手机设备中。它向系统或软件发送伪随机的用户事件流(如键盘输入、触摸屏输入、手势输入、鼠标输入等),实现对正在开发的APP应用程序进行压力性能测试。

通过monkey程序模拟用户操作,检测程序多久的时间会发生异常。

monkey测试是一种测试软件稳定性、健壮性的快速有效的方法。
monkey测试目前被大规模应用在APP开发企业。

二、monkey环境配置

monkey是基于Android 的需要配置SDK环境,一个安卓APP测试工具。
运行monkey,除此之外还需要配置JDK环境

money由ADB启动。

ADB(Android Debug Bridge)
安卓调试桥,实质是安卓的调试工具。
Adb是android sdk包里面的一个工具, 可以在电脑上建立一个连接到手机的通道,用ADB可以直接操作管理android模拟器或者真实的android设备

ADB主要功能:

运行设备的shell(命令行)
管理模拟器或设备的端口映射 (ADB的端口是5037, emulator 的默认端口是5554, adb 会搜索 5555 – 5683 范围内的端口,发现有打开的端口就会认为存在模拟器)
计算机和设备之间上传/下载文件
将本地apk软件安装至 模拟器 或android设备

SDK和JDK简介

SDK包:
SDK (Soft Development Kit ):
软件开发工具包,在Android中,它为开发者提供了库文件以及其它开发所用到的工具。
被软件开发工程师用于为特定的软件包、软件设计、硬件平台、操作系统等建立应用软件的开发工具的集合

Android SDK 指的是Android专属的软件开发工具包。
Android SDK 采 用了java语言,所以需要先安装JDK 5.0及以上版本。
Android SDK 不用安装,下载后,直接解压即可。

JDK包:
JDK(Java Development Kit)
Java 语言的软件开发工具包, 包括了Java运行环境JRE (JVM等)、Java工具 (javac/java/jdb等) 和Java基础类库。

Android SDK 下载地址: http://tools.android-studio.org

解压Android SDK文件,里面有两个应用程序:

SDK Manager.exe —-负责下载或更新不同版本的SDK包
AVD Manager.exe —SDK自带的安卓模拟器

ADB环境变量配置

找到SDK里面的adb.exe,新版本是在platform-tools目录,假定所在路径为F:\SDKTOOLS\android-sdk-24.4-windows\platform-tools

右键我的电脑 - 【属性】 - 【高级系统设置】 – 【高级】 ,点击【环境变量】
在弹出窗口中找到【系统变量】,双击【path】,在编辑框最末处添加路径; F:\SDKTOOLS\android-sdk-24.4-windows\platform-tools
(注意每个变量之间需要用分引号;隔开,最后面的变量可不加;)

JDK环境变量配置

参考教程:https://blog.csdn.net/w2687713610/article/details/118936267

monkey测试环境

模拟器、真机

三、ADB命令

登录设备命令:adb devices (进入adb 检查模拟器是否上线)

进入模拟器操作系统:adb shell (adb不区分大小写,但shell区分)

当存在多个模拟器时,进入任一模拟器方式:adb –s 设备名称 shell

启动ADB服务: adb start-server
停止ADB服务: adb kill-server

1.查看Android程序包

方法1:

获取手机内所有apk对应的包名和路径
adb shell pm list package -f

方法2:

先打开需要查找的apk后,再敲入以下命令 (真机支持)
adb shell dumpsys window w | findstr name=

方法3:

将系统所有当前运行的activity(程序)输出到本地目录
adb shell dumpsys activity > E:\Android\AppName\namelog.txt

方法4:

直接在蓝叠的RE管理器看(以蓝叠模拟器为例)

2.安装和卸载Apk包命令

安装:adb install 本地路径.apk

卸载:adb uninstall 程序包名

3.pc发送文件到安卓模拟器

从PC上发送文件到安卓模拟器:Adb push 本地路径\filename 远程路径(非根目录)

先在模拟器的SD外置卡建一个mydata目录:Adb shell mkdir /sdcard/mydata

(注意:不能在模拟器根目录 ”/” 下新建文件夹,也不能直接adb push 文件到模拟器根目录

从安卓模拟器下载文件到电脑

Adb pull 远程路径/ filename 本地路径(不能直接D盘,D盘下的某一个目录)

四、monkey参数及用法

monkey启动方式:adb shell monkey {+命令参数}

-p <测试的包名列表>

用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果不指定包, monkey将允许系统启动设备中的所有app。

指定一个包:adb shell monkey -p 程序名称 100
指定多个包:adb shell monkey –p 程序名称1 –p 程序名称2 100

示例: adb shell monkey -p com.android.calculator2 -p com.android.calendar 100

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

-v
用于指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下所示:
示例:

Level 0 : adb shell monkey -p com.android.calculator2 -v 100
// 缺省值,仅提供启动提示、测试完成和最终结果等少量信息

Level 1 : adb shell monkey -p com.android.calculator2 -v -v 100
// 提供较为详细的日志,包括每个发送到Activity的事件信息

Level 2 : adb shell monkey -p com.android.calculator2 -v -v -v 100
// 最详细的日志,包括了测试选中/未选中的Activity信息

-s
随机数种子,用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。(重复上次一样的操作)。
示例:

测试1:adb shell monkey -p com.android.calculator2 –s 10 -v 100

测试2:adb shell monkey -p com.android.calculator2 –s 10 100

–throttle <毫秒>
在事件之间插入固定延迟。通过这个选项可以减缓 Monkey 的执行速度。如果不指定该选项, Monkey 将不会被延迟,事件将尽可能快地被执行完成。

示例:adb shell monkey -p com.android.calculator2 –throttle 3000 -v 100

       该参数应放在事件数前面 (人的思考时间是300毫秒一个动作)

五、monkey事件

0:触摸事件百分比 参数–pct-touch

1:滑动事件百分比 参数–pct-motion

2:缩放事件百分比 参数–pct-pinchzoom

3:轨迹球事件百分比 参数–pct-trackball

4:屏幕旋转事件百分比 参数–pct-rotation

5:基本导航事件百分比 参数–pct-nav

6:主要导航事件百分比 参数–pct-majornav

7:系统事件百分比 参数–pct-syskeys

8:Activity启动事件百分比 参数–pct-appswitch

9:键盘翻转事件百分比 参数–pct-flip

10:其他事件百分比 参数–pct-anyevent

六、monkey运行调试约束参数

- -hprof 设置此选项,将在Monkey事件序列之前和之后立即生成profiling报告。这将会在data/misc中生成大文件(~5Mb),所以要小心使用它,不常用。
- -ignore-crashes 当应用程序崩溃或发生任何失控异常时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。
- -ignore-timeouts 当应用程序发生任何超时错误(如“Application Not Responding”对话框)时,Monkey将停止运行。如果设置此选项,Monkey将继续向系统发送事件,直到计数完成。
- -ignore-security-exceptions 当应用程序发生许可错误(如启动一个需要某些许可的Activity)时,Monkey将停止运行。如果设置了此选项,Monkey将继续向系统发送事件,直到计数完成。
- -kill-process-after-error 当Monkey由于一个错误而停止时,出错的应用程序将继续处于运行状态。当设置了此选项时,将会通知系统停止发生错误的进程。
- -monitor-native-crashes 监视并报告Android系统中本地代码的崩溃事件。如果设置了–kill-process-after-error,系统将停止运行。
- -wait-dbg 停止执行中的Monkey,直到有调试器和它相连接。

七、monkey真机测试

1: 使用USB数据线连接PC和手机
2: 安装手机驱动程序
3: 允许USB调试 - - 确定
4: 输入adb devices
5: 找到所测试的APP的包名
6: 执行monkey命令

monkey日志分析

C:\Users\Administrator>adb shell monkey -p com.android.calculator2 -v –v -v 10
:Monkey: seed=1476026024055 count=10 //伪随机种子为1476026024055,事件总数10
:AllowPackage: com.android.calculator2  //测试包名
:IncludeCategory: android.intent.category.LAUNCHER //包的类别
:IncludeCategory: android.intent.category.MONKEY
// Selecting main activities from category android.intent.category.LAUNCHER   //选择主activities
//   - NOT USING main activity com.android.vending.AssetBrowserActivity (from package com.android.vending)   //不被测试的包的activity 
//   - NOT USING main activity com.android.contacts.activities.PeopleActivity (from package com.android.contacts)
//   - NOT USING main activity com.android.camera.CameraLauncher (from package com.android.camera2)
//    - NOT USING main activity com.android.calendar.AllInOneActivity (from package com.android.calendar)
// Seeded: 1476026024055  //随机种子
// Event percentages:     //事件百分比,可调
//   0: 15.0%
//   1: 10.0%
//   2: 2.0%
//   3: 15.0%
//   4: -0.0%
//   5: 25.0%
//   6: 15.0%
//   7: 2.0%
//   8: 2.0%
//   9: 1.0%
//   10: 13.0%

:Switch:    
//表示跳转到com.android.calculator2里面的Calculator这一个Activity里
#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=com.android.calculator2/.Calculator;end
//允许此Intent跳转( Intent在android中起着一个媒体中介的作用,它是一个对象,专门提供组件间互相调用的相关信息)
    // Allowing start of Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.android.calculator2/.Calculator } in package com.android.calculator2

Sleeping for 0 milliseconds  //事件间的延迟思考时间为0
// 下列为发送的些操作,如点击按下,点击放开,触摸移动
:Sending Key (ACTION_DOWN): 172    // KEYCODE_GUIDE
:Sending Key (ACTION_UP): 172    // KEYCODE_GUIDE
Sleeping for 0 milliseconds
:Sending Touch (ACTION_DOWN): 0:) (804.0,229.0  //坐标系
:Sending Touch (ACTION_UP): 0:(809.7128,228.16101)	
Sleeping for 0 milliseconds
:Sending Trackball (ACTION_MOVE): 0:(4.0,4.0)
:Sending Trackball (ACTION_MOVE): 0:(-1.0,-3.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,-1.0)
:Sending Trackball (ACTION_MOVE): 0:(-2.0,3.0)
:Sending Trackball (ACTION_MOVE): 0:(1.0,-2.0)
Events injected: 10  //注入事件数为10
:Sending rotation degree=0, persist=false  // 发送屏幕翻转度=0,存留=假
:Dropped: keys=0 pointers=0 trackballs=0 flips=0 rotations=0  //被丢弃:键=0,指针=0,轨迹球=0,键盘轻弹=0,屏幕翻转=0,0表示全部成功

##Network stats: elapsed time=58ms (0ms mobile, 0ms wifi, 58ms not connected) // 网络状态:占用时间=58ms(0ms用在手机上, 0ms用在无线网络中,没有连接是 58ms)

// Monkey finished    //monkey测试完毕

异常情况

monkey 测试出现错误后,一般的分析步骤
1.看monkey的日志 (注意第一个switch以及异常信息等)
2.程序无响应的问题: 在日志中搜索 “ANR ”(Application No Response )

3.崩溃问题:在日志中搜索 “Exception” (如果出现空指针, NullPointerException) 肯定是有bug
4.Crash , error

logcat

logcat是Android中一个命令行工具,可以用于得到程序的log信息。
adb logcat 输出全部日志
adb logcat -v time| findstr appname >d:/para/xx.log只显示需要的应用日志输出到指定路径 -v time 显示时间

adb logcat -f /sdcard/log.txt & 注意这个log文件是输出到手机上,需要指定合适的路径, &符号表示后台执行

Android日志系统提供了记录和查看系统调试信息的功能。日志都是从各种软件和一些系统的缓冲区中记录下来的,缓冲区可以通过 logcat 命令来查看和使用


补充:

一、monkey测试,怎么分析BUG?
将APP操作日志重定向到本地文件(monkey.log),然后通过查看本地monkery日志,搜索关键词ANR、Exception、Crash、error,若找到关键词,则说明程序存在错误。
ANR:程序无响应
Exception:空指针异常,对象找不到C=A/B,A=null
Crash(崩溃,闪退)、error(错误)

二、一般monkey测试,事件总数设置多少?事件百分比怎么定义的?

一般monkey事件设置20000-100000次,一般没有规定这个具体百分比,我们可以根据实际情况来定一个百分比。
比如一部手机,那么我们根据用户习惯,最常用的就是点击、滑动、系统按键事件,这三个占用百分比多一些,其他事件设置百分比少一点。

三、monkey日志中一般出现什么问题?出现这些问题你一般怎么做的?

系统崩溃、超时无响应、空指针问题

1.在monkey操作日志,查询ANR、crash、exception、error
2.若查找到相关信息,根据上下文信息分析bug是怎么出现的,截图给开发。
3.通过locat获取系统缓冲区中的程序日志信息截图给开发。
4.开发根据以上截图及日志信息找到问题并解决
5.开发修复后,我们在使用相同的种子数及相关参数,做回归验证测试。

四、怎么测试你的APP的性能?(资源消耗CPU,内存,流量消耗等)
场景一:对APP运行monkey测试,使其在繁忙的时候测试APP的内存,CPU,流量,电量的消耗
1.在手机安装测试测试性能的软件(如:Emmagee),打开Emmagee,选择要测试的软件,开始测试
2.用monkey命令运行被测试软件
3.在手机sdcard找到Emmagee的测试数据;
4.最导出并查看:CPU,内存,流量,电量

场景二:使APP切换到后台运行,测试APP的内存,CPU,流量,电量
1.在手机安装测试测试性能的软件(如:Emmagee),打开Emmagee,选择要测试的软件,开始测试
2.在手机sdcard找到Emmagee的测试数据;
3.最导出并查看:CPU,内存,流量,电量

五、简述Android四大组件及其作用
一、活动(activity):表现功能,界面呈现,相当于我们web网页一个页面,即一个APP页面对应一个activity。
二、服务(server):后台运行服务
三、广播接收器:接收系统或其他APP信息,软件处理或响应
四、内容提供者(content provider):支持不同软件间的数据交互

六、什么是FPS,你了解的FPS值一般为多少?
帧率,一般fps值为60以上,值越高画质越流畅。

七、使用手机做monkey测试的步骤?

1.数据线连接手机跟电脑
2.手机启动开发者模式打开usb调试功能
3.打开cmd,查看adb设备是否上线
4.找到手机APP包名,打开APP
5.输入命令adb shell monkey -p APP包名 -s 100 –throttle 1000 –pct-touch 40 –pct-motion 30 –pct-syskeys 30 –ignore-crashes –ignore-timeouts –ignore-security -v -v -v 1000 >F:\lianxi\monkey.log1
6.adb logcat APP包名 >F:\lianxi\app.log
7.打开monkey.log查找关键字,若出现关键词,定位行数。
8.打开app.log结合monkey错误行数定位java错误行数
9.截图给开发


文章作者: 派大星是一个天才
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 派大星是一个天才 !
评论
  目录