Android工具 - 随机测试(猴子)
原创文章,如有转载,请注明出处: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工具 - 随机测试(猴子)的更多相关文章
- Android 工具-adb
Android 工具-adb 版权声明:本文为博主原创文章,未经博主允许不得转载. Android 开发中, adb 是开发者经常使用的工具,是 Android 开发者必须掌握的. Android D ...
- xUtils 1.8.4 (Android工具库) 发布 - http模块优化
感谢关注xUitls的网友最近一段时间给予的热心反馈,xUtils近期做了很多细节优化,同时修复和优化了大家反馈的一些问题.重要的变化有http请求返回更全面的结果信息:下载设置断点续下时,如果服务器 ...
- android 工具库
https://github.com/xybCoder/AndroidCommon android工具类集合
- google的android工具常用下载路径
android的bug工具在网上搜的时候,经常被索引到垃圾网站,今天找到了一个网站下载android工具 都是最新的,十分不错,就做个分享吧. Google 提供了 Windows.macOS 以及 ...
- [Android Pro] 常用的android工具类和库
reference to : http://blog.csdn.net/lovexieyuan520/article/details/50614086 这篇博客主要记录我认为比较有用的Android ...
- Android工具与其它
文本文件: Tool: NotePad++ 代码工具: Tool:Eclipse+STAN+(乱七八糟c,c++,java,android),Source Insight 3 Log工具: Tool: ...
- 摘录android工具类
import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.Pac ...
- Android(工具・集成)
■ NDK Android从始(2009)至终是支持JNI的. 只不过一开始没有NDK.需要自己安装交叉编译器创建so,然后放到assert之类捆绑so发布. 有了NDK.有了什么? libc lib ...
- 【Android工具】DES终结者加密时报——AES加密演算法
转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 在前面的两篇文章中.我们介绍了DES算法,3DES算法以及他们的Android程序实现,并研究了怎样才干实现 ...
随机推荐
- 关于Java内存泄漏的介绍
翻译自这篇文章 Java一个最显著的优势就是它的内存管理.你只需要简单地创建对象,而Java垃圾收集器会负责内存的分配与释放.不过,事情并没有那么简单,因为在Java应用中时常会出现内存泄漏. 1. ...
- Java8-JVM内存区域划分白话解读
前言 java作为一款能够自动管理内存的语言,与传统的c/c++语言相比有着自己独特的优势.虽然我们无需去管理内存,但为了防范可能发生的异常,我们需要对java内部数据如何存储有一定了解,已应对突发问 ...
- 【IDEA】头注释和方法注释
头注释和方法注释 2020-09-08 10:16:17 by冲冲 1.头注释 ①设置 ②模板内容 /** * @ClassName ${NAME} * @Description ${DESCRI ...
- python之元编程
一.什么是元编程 元编程是一种编写计算机程序的技术,这些程序可以将自己看作数据,因此你可以在运行时对它进行内省.生成和/或修改. Python在语言层面对函数.类等基本类型提供了内省及实时创建和修改的 ...
- BehaviorTree.CPP行为树BT的入门(二)
节点与树 用户必须创建自己的ActionNodes和ConditionNodes(LeafNodes):该库可帮助您轻松地将它们组成树. 将LeafNodes视为组成复杂系统所需的构建块. 根据定义, ...
- Codeforces 878D - Magic Breeding(bitset,思维题)
题面传送门 很容易发现一件事情,那就是数组的每一位都是独立的,但由于这题数组长度 \(n\) 很大,我们不能每次修改都枚举每一位更新其对答案的贡献,这样复杂度必炸无疑.但是这题有个显然的突破口,那就是 ...
- [NOIP2017 提高组] 列队
考虑我们需要维护的是这样一个东西. 即可能变化的只有每一行前\(m - 1\)个,和最后一列. 我们考虑对每一行开一个权值线段树,记录原本序列的第\(x\)个是否被一出,且用一个\(vector\)记 ...
- NOIP 2020 游记
第一次写比赛游记,请多多指教! I. 考前 由于最近参加了太多太多比赛了,所以没有敲模板题: 考前一周:主要是在做 AtCoder 的题和 xjoi 的模拟赛,相当于恶补了一些套路吧! 考前一天:上午 ...
- CMake 工程调用 Makefile 编译项目
本文主要介绍如何将一个依赖 Makefile 项目(MIDG)移植到 CMake 上. 首先介绍项目文件结构,文件主要由三个目录组成 3rdParty include src 其中,3rdParty ...
- Linux非root安装Python3以及解决SSL问题
说明 接上一篇. [Linux]非root安装Python3及其包管理 上一篇虽然成功安装了Python3及一些常用的模块,但因为一直装不上SSL模块,导致一些包无法安装,尝试了不少方法都失败了(网上 ...