Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法

马肤

温馨提示:这篇文章已超过441天没有更新,请注意相关的内容是否还可用!

摘要:,,本文介绍了Android Monkey工具,该工具是一种用于应用程序自动化测试的工具。文章简要阐述了Monkey工具的功能和特点,包括能够模拟用户操作、测试应用程序的稳定性和性能等。本文还介绍了Monkey工具的使用方法,包括其命令行参数和常用选项。通过阅读本文,读者可以了解如何有效地使用Monkey工具进行应用程序测试,提高应用程序的质量和稳定性。

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第1张

        过于爽快的承认失败,就可能发觉不了曾经与正确非常接近。大家好,依旧是在翻看旧文档的时候,发现一篇关于Monkey的介绍和使用,Monkey这款工具在软件测试中主要用于进行压力测试和稳定性测试。它可以模拟大量随机的用户操作,对应用程序进行长时间的高强度测试,以发现潜在的稳定性问题、崩溃问题以及其他异常情况。通过 Monkey 测试,可以在一定程度上评估应用在极端情况下的表现。

Monkey介绍

什么是Monkey

        Monkey是Android系统自带的一个命令行工具,可以在Android模拟器或手机设备中运行。通过向Android系统发送伪随机用户事件流(如屏幕的点击、滑动和系统按键操作等),实现对Android App进行稳定性测试。

Monkey的特点

我们可以在CMD命令行或adb shell命令行执行命令,根据一个特定命令来发送信息。

使用Monkey执行测试,具有如下特点:

(1)如果限定了Monkey运行在特定包上,当监测到试图转到其他包的操作,将对其进行阻止。

(2)如果应用程序崩溃或接收到任何失控异常,或程序无响应(application not responding),Monkey将记录对应的错误日志,并根据命令行参数判断是停止运行还是继续运行。

(3)按照选定的不同级别的反馈信息,在Monkey中还可以看到其执行过程报告和生成的事件。

(4)不支持条件判断,也不支持读取待测界面的UI值来执行验证和操作。

Monkey的介入时间

等产品比较稳定,没有明显或很多bug的时候,再使用Monkey进行稳定性测试。

Monkey操作

基本操作步骤

  1. 启动手机(真机或者虚拟机都可以),在其中安装要测试的应用。例如:百度地图。
  2. 执行monkey命令
  3. 进入手机系统(adb shell,如有多台设备需要指定设备 -s参数)
  4. 连接设备(adb connect 设备ID)
  5. 打开CMD命令行窗口

Monkey命令示例

        在模拟器上安装百度地图,可手动打开并打开地图显示页。打开CMD命令行执行adb shell进入 Linux命令行界面。执行如下命令,可看到Monkey的随机操作效果。

monkey -p com.baidu.BaiduMap --ignore-crashes --ignore-timeouts --ignore-native-crashes  --pct-motion 39 --pct-pinchzoom 34 --pct-trackball 20 --pct-touch 7 -s 1 -v -v -v --throttle 200 20000

        除了上面执行方式外,也可以不进入adb shell,在DOS命令行直接执行adb shell monkey命令。如下:

adb shell monkey -p com.baidu.BaiduMap --ignore-crashes --ignore-timeouts --ignore-native-crashes  --pct-motion 39  --pct-pinchzoom 34 --pct-syskeys 0 --pct-trackball 20 --pct-touch 7  -s 1 -v -v -v --throttle 200 20000

强制关闭monkey

        如果我们运行之后发现设置错误,运行了别的应用,需要中止monkey测试过程;或者monkey在运行测试中出现故障,需要中止进程,怎么实现呢?

根据monkey进程的启动方式,分为以下两种情况:

  1. monkey进程通过CMD命令行直接执行adb shell monkey启动:
  2. monkey进程通过先执行adb shell,进入Linux环境再执行monkey命令启动。

在第一种情况下,采用如下方式终止Monkey进程:

打开一个新的CMD窗口,输入命令:

adb shell ps |findstr "monkey"

查出com.android.commands.monkey 进程记录,记录其进程号(pid).

adb shell kill 进程号

杀掉monkey进程

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第2张

在第二种情况下,结束Monkey进程则比较简单,直接Ctrl+C即可结束Monkey进程运行。

Monkey命令和参数

monkey 程序组成

1、Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第3张

2、Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中的存放路径是:/system/bin/monkey;

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第4张

monkey命令帮助

命令:

adb shell monkey -help   

运行结果:如下图。

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第5张

Monkey命令参数

monkey基本参数

-p

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

 不指定-p参数的话会对整机进行测试,即对所有APP进行测试。


-s

 用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同。

 执行monkey所产生的事件顺序,相当于一个flag,设置这个参数是为了更好地复现Bug。

 Seed值如果不指定,系统会自动生成

 seed值取值范围:1~9223372036854775807 (2的63次方-1)

如:

adb shell monkey -p com.test -v -s 10 100

第一次运行时出现了bug,但从日志也看不出来什么,再运行一次

adb shell monkey -p com.test -v -s 10 100

它的事件执行顺序与上一次相同,这样就有利于你发现产生bug的地方了。

-v  日志级别
Level 0 

示例:

adb shell monkey -p com.baidu.BaiduMap -v 100

说明:仅提供启动提示、测试完成和最终结果等少量信息

Level 1

示例:

adb shellmonkey -p com.baidu.BaiduMap -v -v 100

说明:提供较为详细的日志,包括每个发送到Activity的事件信息

Level 2

示例:

adb shellmonkey -p com.baidu.BaiduMap -v -v -v 100

说明:最详细的日志,包括了测试中选中/未选中的Activity信息

adb shell monkey  --throttle 3000 100

 --randomize--throttle

结合--throttle使用,随机延迟范围为0到throttle指定的时间

示例:

adb shell monkey --throttle 3000 --randomize-throttle 100

 --pkg-whitelist-file 白名单

 只执行在白名单中的apk

 把设置的白名单的包写入到一个txt文档里面(文档和路径名不能有中文)

 如果想指定多个程序被执行,则在文件中添加多个包名,注意包名与包名之间均用回车键换行。

 把这个文件放入到安卓手机中,放在/data/local/tmp下面:

adb push D:\whitelist.txt /data/local/tmp   
adb shell monkey --pkg-whitelist-file /data/local/tmp/whitelist.txt 200

--pkg-blacklist-file 黑名单

 执行除了黑名单中以外的apk

 设置方法和白名单类似,把文件名改为blacklist

 示例:

adb shell monkey --pkg-blacklist-file /data/local/tmp/blacklist.txt 200

  

--ignore-crashes

 用于指定当应用程序崩溃时(Force& Close错误),Monkey是否停止运行。

 如果使用此参数,即使应用程序崩溃,Monkey依然会发送事件,直到事件计数完成。


--ignore-timeouts

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

--ignore-native-crashes

忽略本地代码造成的崩溃,直到事件数执行完成

--ignore-security-exceptions count

 应用程序权限错误发生后继续发送事件

 如果你希望monkey在应用程序权限错误发生后继续发送事件,则需要用到--ignore-security-exceptions选项。

 如果不设置此选项,monkey遇到此类权限错误将停止运行

随机事件个数,必填项

Monkey事件百分比参数

--pct-事件名称 百分比(用0-100的整数表示)
--pct-touch     触摸事件,点击事件的百分比。编号为:0
--pct-motion 动作事件,设定移动事件百分比,直线滑动。编号为:1
--pct-pinchzoom 缩放事件百分比,比如放大或者缩小的操作。编号为:2
--pct-trackball 轨迹球事件百分比,不常用。编号为:3。现在手机基本没有滚动球,但滚动球事件中包含曲线滑动事件,在被测程序中需要曲线滑动时可以使用此参数
--pct-rotation     屏幕旋转事件百分比,横屏竖屏。编号为:4
--pct-nav     基本导航事件百分比。编号为:5 包括上下左右,如方向输入设备的输入,老人机的上下左右键,智能机上没有
--pct-majornav 主要导航事件百分比。号为:6例如中间键,回退键,菜单键
--pct-syskeys     系统按键事件百分比。编号为:7这些按钮一般专供系统使用,如:Home,Back,Start Call,End Call,音量控制
--pct-appswitch  Activity启动事件百分比/调整APP切换事件的百分比。编号为8
--pct-flip     键盘翻转事件百分比/键盘的隐藏,出现。编号为9
--pct-anyevent 其他事件百分比。编号为10如按键,在其他设备上不常用的按钮等

注意:

1.如果不添加任何事件百分比参数,系统将在各种事件中随机分配比例;

2.所有事件百分比相加应小于等于100,若小于100,则剩余比例将随机分配;

3.手动设置时如何分配比例,要根据应用类型决定。

Monkey日志管理

        我们使用Monkey进行测试,目的是测试应用的稳定性,在运行时是否发生了诸如崩溃或无响应的问题。Monkey通过日志来记录执行过程以及其中的出错信息。默认情况下,Monkey日志打印在命令行窗口(Windows CMD窗口或adb shell窗口),显示范围有限,内容比较多的时候,无法查看先前生成的内容。而且,如果关闭了命令行窗口日志就丢失了。所以我们要处理的第一个问题,就是日志的保存。

monkey日志保存

        Monkey运行日志可以保存在PC中,也可以保存在移动设备(或模拟器)上。而且保存在手机上时,可以将标准流和错误流分开保存。

1、保存在PC中

前提是Monkey测试在PC端执行,命令格式如下:

adb shell monkey [选项参数] 事件数 >Windows文件全路径

此时所有信息输出到一个日志文件。例如:

adb shell monkey -p com.baidu.BaiduMap -v -v -v --throttle 200 100 >d:\monkey.log


2、保存在移动设备(或模拟器)上

        前提是Monkey测试在移动设备(或模拟器)执行,先通过执行adb shell进入设备中。   有两种保存方式:

标准信息、错误信息保存在同一个文件,命令格式如下:

monkey [选项参数] 事件数 1>Linux文件全路径 2>&1

例如:

monkey -p com.baidu.BaiduMap -v -v -v --throttle 200 100 1>/sdcard/monkey.log 2>&1

 标准信息、错误信息分开保存在两个文件,命令格式如下:

monkey [选项参数] 事件数 1>Linux文件全路径 2>Linux文件全路径

 例如:

monkey -p com.baidu.BaiduMap -v -v -v --throttle 200 100 1>/sdcard/monkey_std.log     2>/sdcard/monkey_error.log

Monkey日志分析

        Monkey日志分析是Monkey测试中非常重要的一个环节,通过日志分析,可以获取当前测试对象在测试过程中是否发生异常,以及发生的概率,同时还可以获取对应的错误信息,帮助开发定位和解决问题。

Monkey日志详解

Monkey日志由以下几部分组成:

1、测试命令信息:包括随机种子、事件总数、允许测试包和使用的Activity、各事件百分比。。

 2、App切换和Activity跳转:可以看到切换到了哪个App,从哪个Activity跳转到了哪个Activity,如果发生了异常,就可以看出是在哪个App和Activity中发生的。

3、伪随机事件流:各种随机事件。

4、异常信息:应用崩溃、无响应等异常相应信息。

5、测试结果信息:完成事件数、其他信息。

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第6张Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第7张Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第8张

App切换和Activity跳转

        可以看到切换到了哪个App,从哪个Activity跳转到了哪个Activity,如果发生了异常,就可以看出是在哪个App和Activity中发生的。

注:在允许一次测试多个应用时,会看到多次App切换;只测试一个应用时,一般只看到一次App切换,除非应用异常后重启。

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第9张Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第10张Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第11张

伪随机事件流

记录各种随机操作及中间的延迟时间,主要是以下几种操作:   

touch 触摸操作

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第12张

motion 滑动操作

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第13张

trackball 曲线滑动操作

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第14张

pinch-zoom 缩放操作

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第15张

rotation 旋转操作

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第16张

异常信息

应用无响应、崩溃等异常信息

应用无响应时信息:

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第17张

崩溃信息:

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第18张

测试结果信息

完成事件数、其他信息              

完成事件数:

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第19张

其他信息:

Android Monkey工具介绍与使用,Android Monkey工具的介绍与使用方法 第20张

从日志中发现并提交bug

        使用Monkey进行测试结束后,我们关注的是应用在测试中是否出现崩溃或无响应这类问题。测试结果可以通过如下方法判断:

(1)在日志中搜索“CRASH”,如果搜到,可以判断App在测试过程中发生过崩溃(闪退)问题;

(2)在日志中搜索“ANR”,如果搜到,可以判断App在测试过程中发生过无响应的问题;

        我们可以把这些关键字,连同其上下文,包括Java异常信息和其他相关信息一起提交。其中,Java异常信息主要有以下类型:

算术异常类:ArithmeticExecption

空指针异常类:NullPointerException

类型强制转换异常:ClassCastException

数组负下标异常:NegativeArrayException

数组下标越界异常:ArrayIndexOutOfBoundsException

违背安全原则异常:SecturityException

文件已结束异常:EOFException

文件未找到异常:FileNotFoundException

字符串转换为数字异常:NumberFormatException

操作数据库异常:SQLException

输入输出异常:IOException

违法访问错误:IllegalAccessError

内存不足错误:OutOfMemoryError

堆栈溢出错误:StackOverflowError

注意:长时间运行Monkey时,产生的日志文件非常庞大,用记事本无法打开,可以使用如Notepad++或UltraEdit之类的流式读取的编辑器打开。

ANR异常和traces.txt文件

        Monkey日志中ANR相关信息不够详细,当发现APP运行中存在ANR问题时,我们还需要使用adb pull命令从被测设备的/data/anr目录下导出名为traces.txt的对应log文件,一并交给开发人员排查问题。命令如下:

adb pull /data/anr/traces.txt  D:\logs\
adb logcat 查看Android系统日志(logcat日志)

        使用monkey进行测试时,还要注意logcat日志。这是Android系统日志,包含更详细的内容,可以帮助开发人员定位问题。如果要获取logcat日志,需要在执行monkey测试前开始记录logcat日志。完整步骤如下:

① adb logcat -c 清理现有日志

② adb logcat -v time > D:\logcat.log 开始记录日志

③ 运行monkey程序  

运行monkey程序结束后,可以把logcat日志文件logcat.log也提交给开发作为定位问题的参考。

复现问题

        如果需要复现问题,可以在日志中找到当时执行的seed值,再构建monkey命令运行几次。构建命令时,seed值自定义,定义成与第一次运行相同。程序运行的初始界面也跟第一次运行相同。

        后续回归问题也用同一个命令,seed值保持相同。 如果问题不易复现,需要多运行几次,或多运行一段时间。

另外,还应保持初始界面、网络条件、位置、运行时长一致。

一次测试发现多个问题

        monkey 执行时如果加了--ignore-crashes和--ignore-native-crashes,App出现崩溃退出后,还会自动重启并继续发送事件(否则monkey中断)。我们可以等monkey进程结束后,去日志里直接搜索CRASH。可能会看到多处问题。所以加这两个选项可以帮助我们在一次测试中发现多处崩溃问题。

        monkey 执行时如果加了--ignore-timeouts,App出现无响应后还会继续发送事件;我们可以等monkey进程结束后,去日志里直接搜索ANR,可能会看到多处问题。所以加这个选项可以帮助我们在一次测试中发现多处无响应的问题。

上述三个选项都加,则可能在一次测试中发现多处CRASH或ANR问题。


0
收藏0
文章版权声明:除非注明,否则均为VPS857原创文章,转载或复制请以超链接形式并注明出处。

相关阅读

  • 【研发日记】Matlab/Simulink自动生成代码(二)——五种选择结构实现方法,Matlab/Simulink自动生成代码的五种选择结构实现方法(二),Matlab/Simulink自动生成代码的五种选择结构实现方法详解(二)
  • 超级好用的C++实用库之跨平台实用方法,跨平台实用方法的C++实用库超好用指南,C++跨平台实用库使用指南,超好用实用方法集合,C++跨平台实用库超好用指南,方法与技巧集合
  • 【动态规划】斐波那契数列模型(C++),斐波那契数列模型(C++实现与动态规划解析),斐波那契数列模型解析与C++实现(动态规划)
  • 【C++】,string类底层的模拟实现,C++中string类的模拟底层实现探究
  • uniapp 小程序实现微信授权登录(前端和后端),Uniapp小程序实现微信授权登录全流程(前端后端全攻略),Uniapp小程序微信授权登录全流程攻略,前端后端全指南
  • Vue脚手架的安装(保姆级教程),Vue脚手架保姆级安装教程,Vue脚手架保姆级安装指南,Vue脚手架保姆级安装指南,从零开始教你如何安装Vue脚手架
  • 如何在树莓派 Raspberry Pi中本地部署一个web站点并实现无公网IP远程访问,树莓派上本地部署Web站点及无公网IP远程访问指南,树莓派部署Web站点及无公网IP远程访问指南,本地部署与远程访问实践,树莓派部署Web站点及无公网IP远程访问实践指南,树莓派部署Web站点及无公网IP远程访问实践指南,本地部署与远程访问详解,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南,树莓派部署Web站点及无公网IP远程访问实践详解,本地部署与远程访问指南。
  • vue2技术栈实现AI问答机器人功能(流式与非流式两种接口方法),Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法探究,Vue2技术栈实现AI问答机器人功能,流式与非流式接口方法详解
  • 发表评论

    快捷回复:表情:
    评论列表 (暂无评论,0人围观)

    还没有评论,来说两句吧...

    目录[+]

    取消
    微信二维码
    微信二维码
    支付宝二维码