Eclipse调试Android工具集锦之五:猴子

2024-04-08 13:08

本文主要是介绍Eclipse调试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,才是最头疼的,谁说不是呢 :)



这篇关于Eclipse调试Android工具集锦之五:猴子的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885669

相关文章

Python实现微信自动锁定工具

《Python实现微信自动锁定工具》在数字化办公时代,微信已成为职场沟通的重要工具,但临时离开时忘记锁屏可能导致敏感信息泄露,下面我们就来看看如何使用Python打造一个微信自动锁定工具吧... 目录引言:当微信隐私遇到自动化守护效果展示核心功能全景图技术亮点深度解析1. 无操作检测引擎2. 微信路径智能获

Java中的工具类命名方法

《Java中的工具类命名方法》:本文主要介绍Java中的工具类究竟如何命名,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Java中的工具类究竟如何命名?先来几个例子几种命名方式的比较到底如何命名 ?总结Java中的工具类究竟如何命名?先来几个例子JD

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Android实现两台手机屏幕共享和远程控制功能

《Android实现两台手机屏幕共享和远程控制功能》在远程协助、在线教学、技术支持等多种场景下,实时获得另一部移动设备的屏幕画面,并对其进行操作,具有极高的应用价值,本项目旨在实现两台Android手... 目录一、项目概述二、相关知识2.1 MediaProjection API2.2 Socket 网络

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

Android实现悬浮按钮功能

《Android实现悬浮按钮功能》在很多场景中,我们希望在应用或系统任意界面上都能看到一个小的“悬浮按钮”(FloatingButton),用来快速启动工具、展示未读信息或快捷操作,所以本文给大家介绍... 目录一、项目概述二、相关技术知识三、实现思路四、整合代码4.1 Java 代码(MainActivi

Android Mainline基础简介

《AndroidMainline基础简介》AndroidMainline是通过模块化更新Android核心组件的框架,可能提高安全性,本文给大家介绍AndroidMainline基础简介,感兴趣的朋... 目录关键要点什么是 android Mainline?Android Mainline 的工作原理关键

基于Java实现回调监听工具类

《基于Java实现回调监听工具类》这篇文章主要为大家详细介绍了如何基于Java实现一个回调监听工具类,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录监听接口类 Listenable实际用法打印结果首先,会用到 函数式接口 Consumer, 通过这个可以解耦回调方法,下面先写一个