Monkey测试

Monkey测试是一种Android应用的压力测试方法,模拟用户随机操作来检测应用的稳定性。通过adb命令执行,可以指定测试次数、目标包、事件间隔等参数。Monkey测试能检查应用是否会在大量随机事件下崩溃或出现ANR。此外,它还可以记录日志,帮助分析潜在问题。在兼容性测试中,Monkey测试配合多种设备和自动化测试平台,确保应用在不同设备上的兼容性和稳定性。

Money介绍

顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子, 在电脑面前,乱敲键盘在测试。 猴子什么都不懂, 只知道乱敲
通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常

Monkey用来做什么

Monkey 主要用于Android的稳定性测试,自动的一个压力测试小工具, 主要目的就是为了测试app 是否会Crash(崩溃)

Monkey程序介绍

(1) Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径是:/system/framework/monkey.jar;
(2) Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;
(3)Monkey 命令启动方式:
a)可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试
b)在PC上adb shell 进入Android系统,通过执行 monkey {+命令参数} 来进行Monkey 测试
c ) 在Android机或者模拟器上直接执行monkey 命令,可以在Android机上安装Android终端模拟器

Monkey 命令 基本参数介绍

1:使用monkey测试手机所有程序

adb shell monkey 100 执行monkey测试100次 针对rom测试或者

2:-p <允许的包名列表>

adb shell monkey -p 包名 100

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

3:显示日志详细程度

用亍指定反馈信息级别(信息级别就是日志的详细程度),总共分3个级别,分别对应的参数如下 表所示:Level 0: adb shell monkey -p 包名 -v 30 // 缺省值,仅提供启动提示、测试完成和最终结果等少量信息

 4:将log信息写到本地

adb shell monkey 100 >路径

 5:-s 随机数种子

用亍指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。 示例:
monkey测试1:adb shell monkey –s 10 100
monkey测试2:adb shell monkey –s 10 100

6: --throttle <毫秒>

用亍指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的 生成和发送消息。
例:adb shell monkey -p com.example.login --throttle 300 100
表示执行100个伪随机用户事件流,事件间隔为300毫秒。
注:一般设置为300毫秒,原因是实际用户操作的最快300毫秒左右一个动作事件

7:--pct-touch 触摸事件

调整触摸事件的百分比。(触摸事件是指在屏幕中的一个down-up事件,即在屏幕某处按下并抬起的操作)
–pct-touch:触摸事件。即在某一位置的Down-Up(手指的放下和抬起)事件。Down(ACTION_DOWN)和Up(ACTION_UP)的坐标临近,但并非相同。
如:adb shell monkey --pct-touch 67 -v 10
表示执行10个伪随机用户事件流,并调整其中触摸事件的百分比为67%。
注:此参数设置要适应当前被测应用程序的操作,比如一个应用80%的操作都是触摸,那就可以将此参数的百分比设置成相应较高的百分比。

--pct-motion

调整手势事件motion事件百分比。(motion事件是由屏幕上某处一个down事件、一系列伪随机的移动事件和一个up事件组成)
–pct-motion:动作事件。以Down(ACTION_DOWN)开始,Up(ACTION_UP)结尾,中间至少有一次Move
(ACTION_MOVE)。
如:adb shell monkey --pct-motion 67 -v 10
表示执行10个伪随机用户事件流,并调整其中动作事件的百分比为67%。
注:这里的移动是直线滑动

Event percentages:
0:--pct-touch//touch
events percentage触摸事件百分比(触摸事件是一个在屏幕单一位置的按下-抬起事件)
1:--pct-motion//motion
events percentage手势事件百分比(手势事件是由一个在屏幕某处的按下事件、一系列的伪随机移动、一个抬起事件组成)即一个滑动操作,但是是直线的,不能拐弯
2:--pct-pinchzoom//pinch
zoom events percentage二指缩放百分比,即智能机上的放大缩小手势操作
3:--pct-trackball//trackball 即单纯的Move(ACTION_MOVE)
events percentage轨迹球事件百分比(轨迹球事件包括一个或多个随机移动,有时还伴有点击。轨迹球现
在智能手机上已经没有了,就是类似手柄的方向键一样)
4:--pct-rotation//screen
rotation events percentage屏幕旋转百分比,横屏竖屏
5:--pct-nav//nav 基本导航事件。即来自于方向输入设备的上下左右操作。
events percentage”基本”导航事件百分比(导航事件包括上下左右,如方向输入设备的输入)老手机的上
下左右键,智能机上没有
6:--pct-majornav//major 即Navigation Bar的确认,菜单,返回键等
nav events percentage”主要”导航事件百分比(这些导航事件通常会引发UI的事件,例如5-way pad的
中间键、回退键、菜单键)
7:--pct-syskeys//system(key)
operations percentage”系统”按钮事件百分比(这些按钮一般专供系统使用,如Home, Back, Start
Call, End Call,音量控制)
8:--pct-appswitch//app
switch events percentage启动activity事件百分比。在随机的间隔里,Monkey会执行一个
startActivity()调用,作为最大程度覆盖包中全部Activity的一种方法
9:--pct-flip//keyboard
flip percentage键盘轻弹百分比,如点击输入框,键盘弹起,点击输入框以外区域,键盘收回
10:--pct-anyevent//anyevents 该事件可能包含其他上述事件。
percentage其他类型事件百分比。包括了其他所有的类型事件,如按键、其他不常用的设备上的按钮等等。

8: --ignore-crashes

作用:通常,应用发生崩溃或异常时Monkey会停止运行。如果设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
正常操作,不忽略异常

9:--ignore-timeouts(ANR)

作用:通常,应用程序发生任何超时错误(如“Application Not responding”对话框)Monkey将停止运行,设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
adb shell monkey --ignore-timeouts –v 10
同上

Monkey 实例

用monkey 命令 对登录apk进行 性能测试

monkey -p 包名 -s 23 --throttle 2000 --ignore-crashes --ignore-timeouts -v -v -v
100000>/data/local/tmp/log.txt

1. -p后面接着的对应的包名,对具体某个app测试
2. -s后面是对应的种子数,好像就是操作步骤,一般设置相同的种子数目的是复现bug
3. --ignore-crashes --ignore-timeouts 这里是在monkey测试的过程中遇到carash
或者timeout的情况时忽略掉,一般不设置时,出现carash或者timeout时,Monkey测试会终止。这里是防止Monkey测试终止。
4. -v 指的是Monkey测试时打印log级别。
5. 100000 这里是指点击的次数,根据她们测试的经验,对于单个应用程序这个次数设置在100000次就可以了;如果是真机,一般设置在500000次。
6. --throttle-时间 ,设置事务之间的延迟等待时间,单位是毫秒
7.>路径,设置日志存储路径

补充:--pct-touch 50:指定具体的某个事务的占比

adb shell monkey -p com.example.login --ignore-crashes --ignore-timeouts --
throttle 100 --pct-touch 50 --pct-motion 50 -v -v 1000 >c:\login\c.txt

Monkey异常分析

般我们可以一次发送5万次随机事件的请求,每个请求之间的间隔为150毫秒,测试大约会进行40min,完成以后就可以查看日志。
日志中可能的错误:
1.程序奔溃,crash (ctrl+f搜索)
2.程序无响应,ApplicationNo Response(ctrl+f搜索‘ANR ’,加空格是为了屏蔽掉一些无效信息)
3.其他问题:在日志中搜索”Exception”。
Monkey 执行中断, 在log最后也能看到当前执行次数

手机兼容性测试

Android App兼容性测试,是一个比较重要的App评价内容,
说到测试阶段,兼容性测试主要是对App在各类机型上的兼容、适配等情况进行测试。搞清楚这一阶段的测试重点后,因此,Android App在进行兼容性测试前,一定要做好其前序测试内容,否则兼容性测试效果将会较差

1. 机型配置问题

Android兼容测试一定要做到宽范围覆盖,如果做不到这个,那么就违背了兼容性测试的目标——测试App在各类机型、系统上的运行是否兼容、适配。
因此,兼容性测试必须要在各个机型、系统上对App进行运行、测试,查看相关UI是否适配、功能是否正常。
所以,必须要为兼容性测试配备尽可能多的机型。这是不是意味着,你的公司要去购置各类机型设备?当然不是。对于一般的公司或者开发者,这将会是一大笔开销,为了节约资金而造成进行覆盖率较低的话,则失去了兼容性测试的意义。另外,这也是没必要的,因为往往你就一个或两三个App,为了这少量App测试,而去购置
如此大量的设备,无疑是一种资源浪费。除此,还有一个原因,将在兼容性测试如何展开里去说。除此,机型量的多少也是一个权衡的过程,目前,通用的兼容性测试一般覆盖Top100-300的机型,对于实在是小量机型或者老旧机型,用户量非常小,在一定程度上,是否需要覆盖则需要权衡,总的来说,Top排名的手机基本足够

2. 兼容性如何展开?

这是一个经验性的过程,可以去借鉴大型互联网公司的成熟App的测试方法。目前,无论是国际知名App,还是国内知名App,谷歌、Facebook,BAT等,他们都有大量的App对外推出,对于App兼容性要求非常高,因此,他们的做法是非常值得借鉴的。这些公司的兼容性测试,都有一个相同的解决方案,那就是自动化测试框架与平台的实现。通过浏览上述公司在各种大会公布的内容,或者通过论坛知识分享,都能看到,他们不仅有自己的测试实验室,拥有大量的手机,除此,还有一整套的自动化测试平台,来完成兼容性测试

3. 有哪些好用的App云测试平台?

目前对移动App的测试主要指的是下面几部分:
兼容性测试——App对不同手机、操作系统版本的兼容性测试,包括安装、启动、卸载等.
功能测试——遍历应用的每一个角落,查看应用的功能、逻辑是否正常,完整.
性能测试——应用的性能怎样,如启动时间、反应时间、CPU占用率,内存占用率等.
稳定性测试——在一定时间内对App进行持续地测试,测试App运行的稳定性.
网络场景测试——测试不同网络环境中App的运行状况,如2G&3G,弱网络等.

参考:

 真机测试:注意:下载手机助手,换一根数据线

1. 第一步:让手机显示开发者选项

多次点击版本号,显示开发者选项

2. 允许USB调试

若使用真机,用USB将手机和电脑连接,在手机端进行操作:
(1)选择USB连接方式为设备文件管理;
(2)设置->开启开发者选项->勾选‘USB调试’(真机和模拟器上皆需进行)。

3. 检测连接设备

在终端中输入’adb devices‘,此时已连接设备列表下应存在设备序列号

4. 执行相应的测试操作

 

<think>首先,用户的问题是关于“monkey 测试工具 测试框架 使用方法”。根据系统级指令,我需要使用中文回答,并遵循格式要求:行内数学表达式用$...$,独立公式用$$...$$,但我注意到这个问题不涉及数学表达式,所以可能不需要。但指令说“所有行内数学表达式”,所以如果出现,我会处理。 用户意图是查找与“monkey”相关的测试内容,涉及测试工具、测试框架或测试实践。参考提供的引用: - 引用[1]: 介绍Monkey测试工具在Android平台上的使用,通过命令行或脚本调用,指定参数如时间、事件频率等。 - 引用[2]: 解释Monkey测试通过模拟用户操作来测试应用程序的稳定性,强调其随机性和全面性。 - 引用[3]: 提供一个示例命令:monkey -p com.baidu.BaiduMap --throttle 500 -v -v -v 1000000 >/sdcard/monkey.log & logcat -v time >/sdcard/logcat.log &,并提到学习更多参数。 用户的问题具体是“monkey 测试工具 测试框架 使用方法”,所以我需要回答Monkey测试工具的使用方法。 系统指令要求: 1. 回答结构清晰,帮助用户逐步解决问题。 2. 尽量保证回答真实可靠。 3. 生成相关问题。 4. 在回答中引用的段落末尾自然地添加引用标识,如[^1]。 另外,指令说“生成相关问题”,并在末尾有“§§相关问题§§”部分。 回顾我的角色:我是AI助手,应该基于知识和引用提供帮助。 构建回答结构: - 介绍Monkey测试工具:简要解释它是什么,基于引用。 - 详细说明使用方法:包括命令行参数、示例等。 - 确保使用中文。 - 在引用信息时添加引用标识。 - 最后,生成相关问题。 步骤: 1. **介绍Monkey测试工具**:基于引用[1]和[2],解释它是Android平台上的一个工具,用于模拟用户操作测试应用程序稳定性。 2. **使用方法**:详细描述如何使用,包括常见参数和示例命令。参考引用[3]的示例命令。 - 参数如:-p(指定包名)、--throttle(事件间隔)、-v(详细级别)、事件数量等。 - 提供示例命令。 3. **框架和实践**:用户提到“测试框架”,但Monkey本身是一个工具,不是框架。我可以解释它如何融入测试框架,但基于引用,它主要是命令行工具。引用中没有提到框架,所以我会专注于工具的使用。 4. **添加引用**:当引用信息时,在句末添加[^1]、[^2]等。 5. **生成相关问题**:在回答末尾,添加“§§相关问题§§”部分,列出2-3个相关问题。 参考示例结构: - 先有标题或主题。 - 然后内容。 - 代码块(如果有)。 - 相关问题。 对于代码:用户问题涉及命令,所以我可以包括命令行示例,使用代码块格式。 最终回答结构: - 开头:简要介绍Monkey测试工具。 - 主体:逐步解释使用方法。 - 包括代码块示例。 - 结尾:相关问题。 确保回答真实可靠:基于提供的引用,我不会添加额外信息,除非常识。引用是可靠的来源。 现在,草拟内容: **介绍**: Monkey测试工具是Android平台提供的一个命令行工具,用于模拟用户的随机操作来测试应用程序的稳定性。它通过发送随机事件序列来发现潜在的崩溃、ANR(Application Not Responding)等问题[^1][^2]。 **使用方法**: Monkey测试工具的使用主要通过ADB(Android Debug Bridge)命令行接口执行。基本命令格式为: ``` adb shell monkey [options] <event-count> ``` 常见参数包括: - `-p <package-name>`:指定要测试的应用程序包名。 - `--throttle <milliseconds>`:设置事件之间的延迟时间(毫秒)。 - `-v`:设置详细级别;多个`-v`增加详细程度(例如,`-v -v -v`为最高详细级别)。 - `--ignore-crashes`:忽略崩溃,继续测试。 - `--ignore-timeouts`:忽略ANR错误,继续测试。 - `<event-count>`:指定要发送的事件数量。 示例命令(参考引用[3]): ```bash adb shell monkey -p com.baidu.BaiduMap --throttle 500 -v -v -v 1000000 > /sdcard/monkey.log & logcat -v time > /sdcard/logcat.log & ``` 此命令测试百度地图应用,事件间隔500毫秒,详细级别最高,发送100万个事件,并将输出重定向到日志文件[^3]。 **步骤指南**: 1. 确保设备连接并开启USB调试。 2. 打开命令行终端。 3. 使用ADB命令执行Monkey测试。 4. 分析生成的日志文件以识别问题。 **最佳实践**: - 测试前备份数据。 - 监控设备资源使用情况。 - 结合Logcat日志分析。 **相关问题**: 在末尾添加。 添加引用标识:在相关句子后添加[^1]、[^2]、[^3]。 最后,生成相关问题,如: 1. Monkey测试的常见问题及解决方法? 2. 如何优化Monkey测试的效率? 3. Monkey测试与其他测试框架的比较?</think>### Monkey测试工具使用方法指南 Monkey测试工具是Android平台提供的一个命令行工具,主要用于模拟用户的随机操作来测试应用程序的稳定性。它通过生成随机事件序列(如点击、滑动、按键等)来模拟真实用户行为,帮助开发者发现潜在的崩溃、ANR(Application Not Responding)或性能问题[^1][^2]。Monkey工具本身不是一个完整的测试框架,而是常用于自动化测试脚本或集成到CI/CD管道中,作为稳定性测试的一部分。以下我将逐步介绍其使用方法,确保内容基于可靠引用并结构清晰。 #### 1. **准备工作** - **环境设置**:确保已安装Android SDK,并配置好ADB(Android Debug Bridge)工具。连接Android设备或模拟器,开启USB调试模式。 - **获取包名**:使用命令 `adb shell pm list packages` 列出设备上所有应用的包名,找到你要测试的应用包名(例如,`com.baidu.BaiduMap`)。 - **备份数据**:测试前建议备份应用数据,以防随机操作导致数据丢失[^2]。 #### 2. **基本命令格式** Monkey测试通过ADB命令行执行,基本语法为: ```bash adb shell monkey [options] <event-count> ``` - `<event-count>`:指定要发送的事件数量(例如,1000表示1000个随机事件)。 - 常用参数说明(基于引用[1][^3]): - `-p <package-name>`:指定测试的应用包名(必需参数)。 - `--throttle <milliseconds>`:设置事件之间的延迟时间(毫秒),例如500表示0.5秒间隔,模拟用户操作节奏。 - `-v`:设置输出详细级别;多个`-v`增加详细度(如`-v -v -v`为最高级别,输出更多调试信息)。 - `--ignore-crashes`:忽略应用崩溃,继续测试。 - `--ignore-timeouts`:忽略ANR错误,继续测试。 - `-s <seed>`:设置随机种子值,用于复现相同测试序列。 - 其他参数:如`--pct-touch <percent>`调整触摸事件比例,可通过`adb shell monkey --help`查看完整列表。 #### 3. **示例命令及执行步骤** 参考引用[3],以下是一个完整测试示例,用于测试百度地图应用: ```bash adb shell monkey -p com.baidu.BaiduMap --throttle 500 -v -v -v 1000000 > /sdcard/monkey.log & logcat -v time > /sdcard/logcat.log & ``` - **命令解释**: - `-p com.baidu.BaiduMap`:测试百度地图应用。 - `--throttle 500`:事件间隔500毫秒。 - `-v -v -v`:最高详细级别输出。 - `1000000`:发送100万个随机事件。 - `> /sdcard/monkey.log`:将Monkey输出重定向到设备SD卡的日志文件。 - `& logcat -v time > /sdcard/logcat.log &`:同时捕获系统Logcat日志,用于后续分析崩溃或错误。 - **执行步骤**: 1. 打开命令行终端(如Windows的CMD或macOS/Linux的Terminal)。 2. 运行上述命令,测试会在后台执行。 3. 测试完成后,使用`adb pull /sdcard/monkey.log` 和 `adb pull /sdcard/logcat.log` 将日志文件拉到本地分析。 4. 查看日志文件,搜索关键词如`CRASH`、`ANR`或`Exception`来定位问题[^3]。 #### 4. **最佳实践和注意事项** - **测试时长控制**:事件数量`<event-count>`决定测试时长;例如,1000个事件约需1-5分钟,100万个事件可能需要数小时。建议从较小事件数开始,逐步增加[^1]。 - **稳定性分析**:Monkey测试的随机性能全面覆盖应用场景,但需结合日志分析工具(如Android Studio的Logcat)来诊断根本原因[^2]。 - **集成到测试框架**:虽然Monkey是独立工具,但可嵌入自动化框架如Jenkins或Appium。例如,编写Shell脚本定期执行Monkey测试,并邮件通知结果。 - **常见问题**: - 如果测试中断,检查设备连接或参数错误。 - 使用`--ignore-crashes`避免测试因崩溃提前结束。 - 对于复杂应用,调整事件比例(如`--pct-touch 50`)以模拟更真实的用户行为[^1][^3]。 #### 5. **总结** Monkey测试工具是Android应用稳定性测试的核心手段,通过简单命令行即可执行。它高效、易用,但需结合日志分析才能发挥最大价值。在实际测试中,建议定期运行Monkey测试作为质量保障的一部分[^1][^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值