原创文章,如有转载,请注明出处:http://blog.csdn.net/yihui823/article/details/6697535

本文章的前提:已经安装了Eclipse和ADT。android SDK也下载完毕。Eclipse里面已经设置好了android SDK。

本文章将系统的介绍Android调试的各个工具。讲的会比较细,希望对大家有所帮助。

写到后面有些偏题了。实际上已经在介绍Android工具了,不仅仅是在Eclipse上的。不过没关系,现在都讲究扩展么,就当是扩展话题吧。^_^

今天讲的是猴子。猴子?猴子跟Android有什么关系?听我说来。猴子-monkey

Moneky

1.       引子

记得听朋友说过,三星的手机在出厂的时候,需要经历一项很严格的测试。有一台测试机,模拟人去点击手机的各个按钮和屏幕,不断重复的随机操作,一定要保证不死机。虽然对韩国人印象很不好,但是客观的说,这个方式也说明了他们严禁的一面。

诚然,每个手机制造商大概都会有类似的测试(山寨机不知道有没有哦)。手机的使用环境十分复杂,任何情况都有可能发生,而手机程序必须健壮到足够的经受各种操作。

2.       定义

Monkey是Android中的一个命令行工具。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对手机应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。

Monkey的一些特点

1、测试的对象仅为应用程序包。

2、 Monkey测试使用的事件流数据流是随机的,不能进行自定义。但是可以指定随机数种子,也就是说可以重复再现。

3、可对测试的对象,事件数量,类型,频率等进行设置。

3.       用法

monkey是根植在Android系统中的。可以用adb shell进入Android命令行后输入monkey启动,也可以直接用adb shell monkey启动。我们假设已经用adb shell进入了Android命令行模式。

一个最简单的例子:

#monkey -p com.android.browser 500

马上切到手机上或模拟器上去看。哈哈,是不是屏幕在发疯似的乱跑?

最后,屏幕上会显示出模拟运行的结果。

如果程序运行过程中,出现了异常抛出,则monkey test会立即停止,并且在屏幕上输出异常堆栈。赶紧改bug吧。

4.       伪随机测试

这里又有问题了。monkey test是伪随机测试,也就是说,操作都是随机产生的。我这次发现了bug,但是我再次运行同样的命令,bug就不再出现了。这可怎么办啊。

这里需要简单的讲一下随机和伪随机。真正的随机,是完全不可重复和定义的。也就是说,从理论上是无法定义下一个随机数到底是什么。

那么在计算机里,能不能实现随机数呢?至少到目前,还不行。那我们用的随机数都是哪里来的呢?我们现在常用的是一种伪随机算法,也就是说无限接近随机,但是没法完全达到随机。

伪随机算法都需要一个种子。一系列的随机数,一般的做法就是把上一个随机数作为下一个随机数的种子。可以这么理解,伪随机数算法相当于是一个函数, 入口是一个种子,出口是一个伪随机数。我们可以无限逼真的制造种子,例如种子里面加入当前时间的因子,加入计算机一些硬件编码的因子,以保证伪随机数足够 的“随机”,但是,我说的是但是,相同的种子,出来的伪随机数还是相同的。

我们这里就不具体描述伪随机数算法了。前面说的一切,重点就是最后一句话:

相同的种子,出来的伪随机数还是相同的。

现在,我们再来理解monkey test。测试开始的时候,monkey会根据一个伪随机数种子,后面的序列将根据这个伪随机数种子依次产生。也就是说,第二次操作的种子是第一个操作的 伪随机数,第三次操作的种子是第二次操作的伪随机数。也就是说,我们第一个给的种子相同,那么monkey test的操作序列就是一样的。

我们再来看monkey test的运行结果:

** System appears to have crashed at event 48 of 500 using seed 0

系统在500个操作的第48个操作里出现了异常,用的种子是0。0就是伪随机数的种子。

我们下次想用相同的操作序列再现这个异常,只需要

#monkey -p com.android.browser -s 0 500

当然,这个操作也是需要相同的起点的。也就是说,第一次monkey test之前,画面是停在空白主页面,第二次monkey test之前,画面停在淘宝网主页,那么即使使用相同的随机数种子,现象还是会不一样的。

如果条件完全相同,随机数种子也给的是相同的,而现象还是不一样,异常还是不一定,那么,找找程序里是不是有什么不定因素吧,这就是程序的健壮性不够。不是每次都出现的BUG,才是最头疼的,谁说不是呢 :)

Android工具 - 随机测试(猴子)的更多相关文章

  1. Android 工具-adb

    Android 工具-adb 版权声明:本文为博主原创文章,未经博主允许不得转载. Android 开发中, adb 是开发者经常使用的工具,是 Android 开发者必须掌握的. Android D ...

  2. xUtils 1.8.4 (Android工具库) 发布 - http模块优化

    感谢关注xUitls的网友最近一段时间给予的热心反馈,xUtils近期做了很多细节优化,同时修复和优化了大家反馈的一些问题.重要的变化有http请求返回更全面的结果信息:下载设置断点续下时,如果服务器 ...

  3. android 工具库

    https://github.com/xybCoder/AndroidCommon android工具类集合

  4. google的android工具常用下载路径

    android的bug工具在网上搜的时候,经常被索引到垃圾网站,今天找到了一个网站下载android工具 都是最新的,十分不错,就做个分享吧. Google 提供了 Windows.macOS 以及 ...

  5. [Android Pro] 常用的android工具类和库

    reference to  : http://blog.csdn.net/lovexieyuan520/article/details/50614086 这篇博客主要记录我认为比较有用的Android ...

  6. Android工具与其它

    文本文件: Tool: NotePad++ 代码工具: Tool:Eclipse+STAN+(乱七八糟c,c++,java,android),Source Insight 3 Log工具: Tool: ...

  7. 摘录android工具类

    import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.Pac ...

  8. Android(工具・集成)

    ■ NDK Android从始(2009)至终是支持JNI的. 只不过一开始没有NDK.需要自己安装交叉编译器创建so,然后放到assert之类捆绑so发布. 有了NDK.有了什么? libc lib ...

  9. 【Android工具】DES终结者加密时报——AES加密演算法

    转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现 ...

随机推荐

  1. 【Microsoft Azure 的1024种玩法】一.一分钟快速上手搭建宝塔管理面板

    简介 宝塔Linux面板是提升运维效率的服务器管理软件,其支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能.今天带大家一起学习的内容为一分钟快速上手搭建 ...

  2. [loj2478]林克卡特树

    原题等价于选择恰好$k+1$条不相交(无公共点)的路径使得边权和最大 证明:对于原题中的最优解,一定包含了k条0边权的边(否则可以将未使用的边删掉,然后将这条路径的末尾与不在同一个连通块内的点连边), ...

  3. form-create 3.0 版本发布,好用的Vue3版本动态表单生成组件

    form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成组件.支持2个UI框架,并且支持生成任何 Vue 组件.内置20种常用表单组件和自定义组件,再复杂 ...

  4. Lilypond+TexLive(LuaLatex+lyluatex)+VS Code实现谱文混排

    没想到发文章反而更难被预览了,那就复制一份到随笔里好了. 多次尝试之下,终于实现了现阶段谱文混排的最理想方式: 1. 综合Latex的排版(还有广泛适用人群)的优势以及Lilypond的美观优势: 2 ...

  5. [源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer

    [源码解析] PyTorch 分布式(11) ----- DistributedDataParallel 之 构建Reducer 目录 [源码解析] PyTorch 分布式(11) ----- Dis ...

  6. salesforce零基础学习(一百零九)Lightning Login启用以及配置

    本篇参考:https://help.salesforce.com/s/articleView?id=sf.security_ll_overview.htm&type=5 我们在之前的篇中提到过 ...

  7. Pollard-Rho 算法

    Pollard-Rho 一种复杂度大概在 $ O(n^{\frac 1 4} \log n) $ 的分解质因数方法. Miller-Rabin 给定一个 $ 10^{18} $ 范围的数,判断质数 由 ...

  8. Matlab指针数组

    Matlab指针数组 前面博客Matlab指针中介绍了如何在Matlab中使用handle类型对象作为指针使用,本文则介绍一些使用这些类型指针的小技巧. 自定义类型的指针数组 在大部分编程语言中,我们 ...

  9. 文件IO与标准IO的区别

    文件IO与标准IO的区别 文件I/O就是操作系统封装了一系列函数接口供应用程序使用,通过这些接口可以实现对文件的读写操作,文件I/O是采用系统直接调用的方式,因此当使用这些接口对文件进行操作时,就会立 ...

  10. (转载)java排序实现

    Java实现几种常见排序方法 日常操作中常见的排序方法有:冒泡排序.快速排序.选择排序.插入排序.希尔排序,甚至还有基数排序.鸡尾酒排序.桶排序.鸽巢排序.归并排序等. 冒泡排序是一种简单的排序算法. ...