Monkey基本使用及介绍

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]

具体如下:

或者

如果不指定options,Monkey将以无反馈模式启动,并把事件任意发送到安装在目标环境中的全部包。下面是一个更为典型的命令行示例,它启动指定的应用程序,并向其发送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,我相信随着我们了解的深入,后续支持的增加,我将会和大家再分享。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/94699.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Centos7 安装mysql 8.0.34并设置不区分大小写

索引 Centos7 安装mysql 8.0.34准备工作安装教程安装并配置配置MySQL配置远程访问重新启动MySQL服务 为已安装的MySQL8设置不区分大小写背景操作步骤 Centos7 安装mysql 8.0.34 准备工作 centos7 服务器 xshell 安装教程 安装并配置 在安装MySQL之前&#xff0c;我们应该…

c++ 基础知识(一)

文章目录 1. C关键字 2. 命名空间 3. C输入&输出 4. 缺省参数 文章内容 1. C关键字(C98) C总计63个关键字&#xff0c;C语言32个关键字 ps&#xff1a;下面我们只是看一下C有多少关键字&#xff0c;不对关键字进行具体的讲解。后面我学了以后再细讲。 2. 命名空间 …

Kaggle - LLM Science Exam上:赛事概述、数据收集、BERT Baseline

文章目录 一、赛事概述1.1 OpenBookQA Dataset1.2 比赛背景1.3 评估方法和代码要求1.4 比赛数据集1.5 优秀notebook 二、BERT Baseline2.1 数据预处理2.2 定义data_collator2.3 加载模型&#xff0c;配置trainer并训练2.4 预测结果并提交2.5 deberta-v3-large 1k Wiki&#xff…

【Docker】Docker的应用包含Sandbox、PaaS、Open Solution以及IT运维概念的详细讲解

前言 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 &#x1f4d5;作者简介&#xff1a;热…

​苹果应用高版本出现:“无法安装此app,因为无法验证其完整性”是怎么回事?竟然是错误的?

最近经常有同学私聊我问苹果应用签名后用落地页下载出现高版本是什么意思&#xff1f;我一脸懵&#xff01;还有这个操作&#xff1f;高版本是个啥玩意&#xff01;所以我就上了一下科技去搜索引擎搜索了下&#xff0c;哈哈哈&#xff0c;然后了解下来发现是这样的首先我们确定…

Doris数据库BE——冷热数据方案

新的冷热数据方案是在整合了存算分离模型的基础上建立的&#xff0c;其核心思路是&#xff1a;DORIS本地存储作为热数据的载体&#xff0c;而外部集群&#xff08;HDFS、S3等&#xff09;作为冷数据的载体。数据在导入的过程中&#xff0c;先作为热数据存在&#xff0c;存储于B…

十天学完基础数据结构-第五天(栈(Stack)和队列(Queue))

栈的定义和特点 栈是一种线性数据结构&#xff0c;它遵循后进先出&#xff08;LIFO&#xff09;原则。栈具有以下基本概念和特点&#xff1a; 栈顶&#xff1a;栈的顶部元素&#xff0c;是唯一可访问的元素。 入栈&#xff1a;将元素添加到栈顶。 出栈&#xff1a;从栈顶移除…

《计算机视觉中的多视图几何》笔记(12)

12 Structure Computation 本章讲述如何在已知基本矩阵 F F F和两幅图像中若干对对应点 x ↔ x ′ x \leftrightarrow x x↔x′的情况下计算三维空间点 X X X的位置。 文章目录 12 Structure Computation12.1 Problem statement12.2 Linear triangulation methods12.3 Geomet…

Boost程序库完全开发指南:1.2-C++基础知识点梳理

主要整理了N多年前&#xff08;2010年&#xff09;学习C的时候开始总结的知识点&#xff0c;好长时间不写C代码了&#xff0c;现在LLM量化和推理需要重新学习C编程&#xff0c;看来出来混迟早要还的。 1.const_cast <new_type> (expression)[1] 解析&#xff1a;const_c…

2023年哪款PDF虚拟打印机好用?

PDF文档想必大家都不陌生&#xff0c;在工作中经常会用到该格式的文档&#xff0c;那么有哪些方法能制作PDF文档呢&#xff1f;一般都是借助PDF虚拟打印机的&#xff0c;那么有哪些好用的软件呢&#xff1f; pdfFactory不仅为用户提供了丰富的PDF文档生成、打印功能&#xff0…

JAVA学习(4)-全网最详细~

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…

【k8s】集群搭建篇

文章目录 搭建kubernetes集群kubeadm初始化操作安装软件(master、所有node节点)Kubernetes Master初始化Kubernetes Node加入集群部署 CNI 网络插件测试 kubernetes 集群停止服务并删除原来的配置 二进制搭建(单master集群)初始化操作部署etcd集群安装Docker部署master节点解压…

在visual studio里配置Qt插件并运行Qt工程

Qt插件&#xff0c;也叫qt-vsaddin&#xff0c;它以*.vsix后缀名结尾。visual studio简称为VS&#xff0c;从visual studio 2010版本开始&#xff0c;VS支持Qt框架的开发&#xff0c;Qt以插件方式集成到VS里。这里简述在visual studio 2019里配置Qt 5.14.2插件&#xff0c;并配…

MyBatisCodeHelper Pro3.x新版本插件自由

1效果图 我的版本为3.2.2 2.资源链接 码云地址点这里 3.使用说明 将我修改好后的MyBatisCodeHelper-Pro-obfuss.jar替换MybatisCodeHelperNew-3.x.x.zip&#xff08;原版本插件&#xff09;\MyBatisCodeHelper-Pro\lib中的MyBatisCodeHelper-Pro-obfuss.jar 4.实现与感谢…

全志ARM926 Melis2.0系统的开发指引②

全志ARM926 Melis2.0系统的开发指引② 编写目的4. 编译工具链使用4.1.工具链通用配置4.2.模块的工具链配置4.3.简单的 makefile 5. 固件烧录工具的安装5.1.PhoenixSuit 的安装步骤5.2.检验 USB 驱动安装5.3.使用烧录软件 PhoenixSuit -全志相关工具和资源-.1 全志固件镜像修改工…

Foxit PDF

Foxit PDF 福昕PDF 软件&#xff0c;可以很好的编辑PDF文档。 调整&#xff30;&#xff24;&#xff26;页面大小 PDF文档中&#xff0c;一个页面大&#xff0c;一个页面小 面对这种情况,打开Foxit PDF 右键单击需要调整的页面,然后选择"调整页面大小". 可以选择…

Java8 Lambda.stream.sorted() 方法使用浅析分享

文章目录 Java8 Lambda.stream.sorted() 方法使用浅析分享sorted() 重载方法一升序降序 sorted() 重载方法二升序降序多字段排序 mock代码 Java8 Lambda.stream.sorted() 方法使用浅析分享 本文主要分享运用 Java8 中的 Lambda.stream.sorted方法排序的使用&#xff01; sorted…

Go语言面经进阶10问

1.Golang可变参数 函数方法的参数&#xff0c;可以是任意多个&#xff0c;这种我们称之为可以变参数&#xff0c;比如我们常用的fmt.Println()这类函数&#xff0c;可以接收一个可变的参数。可以变参数&#xff0c;可以是任意多个。我们自己也可以定义可以变参数&#xff0c;可…

Day-06 基于 Docker安装 Nginx 镜像

1.去官方公有仓库查询nginx镜像 docker search nginx 2.拉取该镜像 docker pull nginx 3. 启动镜像&#xff0c;使用nginx服务&#xff0c;代理本机8080端口(测试是不是好使) docker run -d -p 8080:80 --name nginx-8080 nginx docker ps curl 127.0.0.1:8080

[CSCCTF 2019 Qual]FlaskLight 过滤 url_for globals 绕过globals过滤

目录 subprocess.Popen FILE warnings.catch_warnings site._Printer 这题很明显就是 SSTI了 源代码 我们试试看 {{7*7}} 然后我们就开始吧 原本我的想法是直接{{url_for.__globals__}} 但是回显是直接500 猜测过滤 我们正常来吧 {{"".__class__}} 查看当前…