51Testing软件测试论坛
标题:
【金阳光测试】--深入Monkey工具和使用--Android系列(3)2014年八月八号
[打印本页]
作者:
sun888
时间:
2014-8-19 18:46
标题:
【金阳光测试】--深入Monkey工具和使用--Android系列(3)2014年八月八号
网上介绍Monkey用法不计其数。我也不想炒剩饭,写的和他们一样。Monkey基本原理是伪随机算法。这个算法我想大致介绍下(不感兴趣的朋友情无视它)。伪随机数,或称伪乱数,是使用一个确定性的算法计算出来的似乎是随机的数序,因此伪随机数实际上并不随机。在计算伪随机数时假如使用的开始值不变的话,那么伪随机数的数序也不变。伪随机数的随机性可以用它的统计特性来衡量,其主要特征是每个数出现的可能性和它出现时与数序中其它数的关系。伪随机数的优点是它的计算比较简单,而且只使用少数数值很难推算出计算它的算法。
每个伪随机数列都有一个Seed,我们叫种子数,它是生成伪随机数的一个参数。有了它我们可以随机的生成一种不重复的数字。为了证实谷歌的Monkey用了伪随机算法,我们必须深入到Monkey源文件**才知道。
获取Monkey的源代码方法有二:直接去谷歌官网查找,可惜我没找到;第二种方法:打开eclipse,启动一个模拟器,切换到DDMS视图,你也可以用真机,但是必须得root才能随意查看文件。启动FileExplorer,找到system/framework/monkey.**a.用jd-gui-0.3.5反编译工具查看。然后我们拷贝到eclipse里面查看代码
看下图MonkeySourceR**m306和307行。明眼的人一看就是导入**a.util.math的随机函数。
那有人说,那seed从何而来呢?不要着急,在189行,
用.setSeed方法来设置种子,这个参数到使用的时候才生效,因为是用户输入的。
从上面枯燥的源代码中,我们看到了Monkey的基本原理,那我们该如何使用呢?别着急,在/system/bin目次下有一个monkey的shell脚本。内容如下。
哈哈,看到这个,我们可以用exec外部命令启动它,对就是adb shell。进来就linux命令了,是不是感觉到世界又变得美好一些了?很多人不知道adb是什么,全名叫安卓调试桥接(android debuge bridge),意思是通过命令行和设备交互调试。基本上市面上所有自动化工具都是用了这个接口,包括你去刷机器,开root,都少不了它。
你用adb shell进去**。然后运行monkey+回车
帮助文档就出来了,是不是很简单。到此你可以不用看任何人写的文档,都是谷歌**给我们的,不知道问谷歌。不需要问其他人,包括百度。
对于测试一个简单app应用,我们完全可以用一行代码来完成。比如你应用程序包名叫com.tencent.mta。这里啰嗦两句,android系统识别应用程序的唯一性是靠包名+签名(这个第6讲后会详细说明,现在说扯得太远)。一个简单的monkey脚本命令是:
monkey -p com.tencent.mta –v 100
这里没有指定种子数,-p后面是包名,v后面是生成多少个点,速度是一秒8个。很快吧。当然平时测试app应用需求很复杂。不会这么简单的使用。一个比较完备的monkey测试必须用到一些高级参数:monkey -pcom.tencent.mtaexample -s 23 --throttle2000 --ignore-crashes --ignore-timeouts -v -v -v 100000>/data/local/tmp/log.txt 2>&1 &
1. -p后面接着的对应的包名,如果是整机测试,就不需要 -ppackage_name
2. -s后面是对应的种子数,好像就是操作步骤,根据她们测试的经验,一般种子数在23,同步她们测试的结果,一般种子的个数固定为23,和她们选择的操作步骤就是同步的。
3. --ignore-crashes --ignore-timeouts 这里是在monkey测试的过程中遇到carash或者timeout的情况时忽略掉,一般不设置时,出现carash或者timeout时,Monkey测试会终止。这里是防止Monkey测试终止。
4. -v 指的是Monkey测试时打印log级别。
5. 100000 这里是指点击的次数,根据她们测试的经验,对于单个应用程序这个次数设置在100000次就可以了;如果是整机,一般设置在500000次。
/data/local/tmp/log.txt测试的log记录在手机上/data/local/tmp/ 下面的log.txt里面,这个名字可以自己写。
6. 2>&1 固定的写法,这个也很重要,代表的意思是中间忽略的东东的日志一并输入到指定的文件中。
7. 最后单独的一个"&" 是一旦Monkey测试开始了,之后可以拔掉数据线,不会影响Monkey测试。
8. 测试所有模块 monkey -s 23 --ignore-crashes --ignore-timeouts -v-v -v 100000> /data/local/tmp/log.txt 2>&1 &
总结:这篇比较简单,但是实用性特别强。不懂技术的人都可以灵活使用,对没有时间写自动化脚本和框架的同学,或者在版本很忙的时间可以偷懒用用,对工作中帮助很大。下一篇,第四篇。笔者会给大家介绍谷歌升级版本的MonkeyRunner。做自己适合的自动化脚本。
作者:
kimgreat
时间:
2014-11-12 18:55
up
作者:
su123456789chao
时间:
2015-2-27 10:08
找到system/framework/monkey.jar 还需要先解压(改成zip格式即可),得到.dex文件,再用dex2jar进行反编译,得到classes_dex2jar.jar文件,才可以用jd-gui查看
作者:
fengye1113
时间:
2015-11-18 15:04
学习了!谢谢分享
作者:
cuikejie123
时间:
2016-5-17 13:47
正在学习Monkey中。。。。
欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/)
Powered by Discuz! X3.2