引导式网站,君和网站建设,网络营销工具有哪些?,微信微商城平台1 简介.. 1
1.1 Monkey是干什么的.. 1
1.2 我们为什么要用monkey. 1
1.3 试行monkey的计划.. 2
2 monkey使用.. 4
2.1 基本常识.. 4
2.2 基本使用.. 6
2.2.1 通过adb 来启动monkey. 6
2.2.2 一些命令选项.. 7
2.2.3 一些测试例子.. 7
2.2.4 执行注意事项.. 9
2.2.5侦…1 简介.. 1
1.1 Monkey是干什么的.. 1
1.2 我们为什么要用monkey. 1
1.3 试行monkey的计划.. 2
2 monkey使用.. 4
2.1 基本常识.. 4
2.2 基本使用.. 6
2.2.1 通过adb 来启动monkey. 6
2.2.2 一些命令选项.. 7
2.2.3 一些测试例子.. 7
2.2.4 执行注意事项.. 9
2.2.5侦测到错误后的处理.. 10
2.2.6 自动化执行脚本.. 11
3 总结.. 12 Made by yuechuang
1 简介
1.1 Monkey是干什么的
Monkey是运行在模拟器或设备上的一个程序用来伪随机地模拟点击和触摸等用户事件就如其它许多系统事件一样。Monkey可以用于对我们开发的应用程序进行随机和重复的压力测试。
Google他自己说Only bind this to local host. This means that you can only talk to the monkey locally, or though adb port forwarding。
简单的说就是模拟用户的touch screen和keyboard的输入 1.2 我们为什么要用monkey
客户和本司对我们产品性能以及稳定性要求越来越高基础的测试方法在一定程度上只能提供越来越基本的保障。我们现在面临着一个挑战就是“手机产品更高的测试强度和测试效率”。
一方面我们要求测试方法有高效的命中率另一方面我们需要测试人员有更高的测试效率。我们如何面对挑战在人为手工极限测试技能水平限制下如何突破 在android项目中我们知道Android application如果没有充分测试很容易出现FC(Force Close)的问题。我们这里通过使用Android自带的monkey工具来做大量的软件压力测试部分性能测试而且不需要投入很多精力并且可以延伸到很多人所不能的方面节省大量人力物力提供准确的FC信息。 1.3 试行monkey的计划
如何在我们的项目中普及monkey
如何让monkey工具发挥更好的作用
我们在使用monkey这个工具的时候打算是分为三阶段来使用的具体如下
研发阶段test level 1研发稳定阶段test level 2定制阶段test level 3
在第一阶段test level 1主要是手工测试的补充利用无数次尝试加强自由测试力度。
这是我们针对我们公司“高要求多需求”的实际情况制定的一个方法。
在长期的QT实践和观察中我们发现案例测试一般可以覆盖一些基本问题而UR上的很多问题并非是由案例去发现的大多是测试者的主观发现这种方式我们测试上姑且称之为“无序测试”同理案例测试可以称之为“有序”了。
在复杂庞大的android软体环境下认为因素的“无序”已经无法再逾越一个测试极限那么这个时候就应该引入“更加强大量大”的“无序”动作monkey应运而生
我们这阶段就是引入monkey中“执行次数count”这个参数所有的东西都是在这个参数上做文章以量变引发质变。 第二阶段test level 2主要是科学安排相关参数知道需要测试的方向进行针对测试。
就是设置延时事件类型等参数进行针对性测试。我们通过调节这些性能相关的参数或者控制设置很影响某些模块的事件以及第一阶段总结的执行次数来测试衡量模块的性能稳定性。而做这一工作单纯的人力是无法做到。
第三阶段test level 3主要是“修改”或者“等待”源码支持拟定自己的测试步骤控制事件。
对于monkey他如其他工具一样不可能是为oppo定制所以有许多自己公司特有的东西他支持的不好或者不支持需要我们去改善我们后期的工作会深入到源码、机制进行我们的定制行为。 2 monkey使用
2.1 基本常识
Monkey是自带的在手机的/system/framework/monkey.jar文件执行文件位于/system/bin/monkey,是一个shell命令。
monkey的基本架构图如下 编辑 相关事宜也可以参照源码目录 Monkey是用JAVA写成的,但是我们确可以这样运行: “adb shell monkey …..” 为什么 是因为在/system/bin目录下有一个monkey的shell脚本.内容如下
#Script to start monkey on the device, which has a very rudimentary
# shell.
#
base/system
export CLASSPATH$base/framework/monkey.jar
exec app_process $base/bin com.android.commands.monkey.Monkey $* exec 会运行起/system/framework/monkey.jar。关于源码研究的我们在这里不再深入下去了后续会有一些东西补充上来。
2.2 基本使用
2.2.1 通过adb 来启动monkey
确保目标板“设置-应用程序-开发-USB调试”选项打开。连接目标机后启动“cmd”命令。
输入“adb devices”命令可以查看连接的设备如图 连接成功后会反馈如下信息 由于Monkey运行在模拟器/设备环境中所以必须用其环境中的shell来进行启动。可以通过在每条命令前加上adb shell来达到目的也可以进入Shell后直接输入Monkey命令或者直接启动“adb shell”命令后直接使用monkey命令。基本语法如下
$ adb shell monkey [options]
具体如下 或者 如果不指定optionsMonkey将以无反馈模式启动并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例它启动指定的应用程序并向其发送500个伪随机事件 $ adb shell monkey -p your.package.name -v 500 例如测试“com.android.camera”这个包相机应用可以输入 2.2.2 一些命令选项
Monkey包括许多选项它们大致分为四大类
基本配置 选项如设置尝试的事件数量。运行约束选项如设置只对单独的一个包进行测试。事件类型 和频率。调试选项。
这里有一个附表有很详细的介绍请看 2.2.3 一些测试例子 【使用monkey测试camera】 第一阶段test level 1控制测试次数
指令如下“monkey -v -p com.android.camera x次数”
这段时间技术支持会先预测次数然后获取问题反馈增加测试次数整理次数数据。
测试每一次大概5分钟
技术意图是通过高频操作捡取内存控制不当事件适用于改动较大阶段 第二阶段test level 2控制次数和时间延时
运行指令如下“monkey -v -p com.android.camera --throttle x y”
这会根据第一阶段的数据获取相应的次数根据性能评估测试时延技术支持事先运行该模块做一个基本的概率统计
这段时间主要是看延时值参考次数值需要数据反馈
技术意图通过统计不同的时延数值和测试次数值评估性能和稳定性。
控制时间概率
运行
“monkey -v --pct-touch 60 --pct-nav 30 -p com.android.camera 500”
“monkey -v-v-v --pct-touch 60 --pct-nav 30 --throttle 300 -p com.android.camera 500”等类似复合指令
通过控制事件复杂度达到界定问题的目的
这种复杂度的控制是基于大量数据反馈到技术支持侧通过分布统计界定问题 2.2.4 执行注意事项 关于“your.package.name”
在开发data目录中根据项目实际情况寻找开发包名或者向开发工程师咨询。
试着提供一个命令执行场景
monkey -v -p com.android.camera --throttle 5000 --pct-anyevent 100 500 这条命令的解释是
-v 显示默认程度的信息
-p com.android.camera是指定测试的程序
--throttle 5000 设定延时
--pct-anyevent 100设定启动activity的百分比为100%
--500 执行500次操作。
执行场景 再执行一下
monkey -v -p com.android.camera --throttle 5000 500 仔细比较此图可见各类事件是可以控制的。要是有点经验的话我们执行“拨号盘”这个模块测试可以将虚拟键盘事件控制到零避免不必要事件发生。 2.2.5侦测到错误后的处理
这里运行一个例子对mydemo应用进行500次任何触发事件随机压力测试无时延 $ adb shell monkey -p com.example.mydemo -v 500 运行后将出现一些信息目标机上将会出现“应用程序mydemo意外停止请重试”截取的有效信息如图 注意只有“cout” “events injected” 测试才执行成功。 在一般情况下我们获取到FC后会根据小机情况我们有时可以运行“logcat”指令获取信息或者通过adb pull获取小机中的log。 2.2.6 自动化执行脚本
这里有一个实例就是让测试员运行写好的测试脚本进行“一键操作”。
大家连上机子可以运行一个小玩意附件如下 这是一个测试拨号键盘的自动化测试执行脚本你运行后他自动测试拨号盘2万次并且把log和bugreport记录到“d\bat”目录下。
大家也可以在熟悉指令后运用自己的才智进行这种脚本的编写。 3 总结
Monkey是一个灵活而强大的工具可以用来提高应用的稳定性注意它是伪随机的所以如果不指定-s seed随机数种子则每次将运行相同的事件序列。
另外虽然我们可以通过这种高强度的测试获知相关软体稳定度但是目前还无法界定测试指标。比如多少次才合格时延设置是多少可以客观反映系统性能等。这些问题并非测试软件本身的问题需要大家在实践中进一步去积累。
这次的探讨就讲到这里关于test level 3我相信随着我们了解的深入后续支持的增加我将会和大家再分享。