Android studio测试软件——Monkey学习及运用
Android studio测试软件——Monkey学习及运用
在第十五周的个人博客上,王老师安排我们根据最终的团队大作业所用的软件(Android studio)进行软件测试的介绍,而我选择的是基于Android自动化测试的Monkey runner安卓测试软件,它将作为我们项目最后成品的效率测试工具。
1、Monkey runner简介
Monkey runner即android SDK中自带的工具之一,此工具提供API可按制android设备或模拟器。
Monkey runner提供了一个API,使用此API写出的程序可以在Android代码之外控制Android设备和模拟器。通过monkey runner,您可以写出一个Python程序去安装一个Android应用程序或测试包,运行它,向它发送模拟击键,截取它的用户界面图片,并将截图存储于工作站上。
Monkey runner工具的主要目的是用于测试功能/框架水平上的应用程序和设备,或用于运行单元测试套件,但您当然也可以将其用于其它目的。
那么在本文中,首先,我们将介绍什么是money测试工具,如何在安卓软件中运用此测试软件进行测试。
2、Monkey 的命令特性和选项分类
Monkey是一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。Monkey包括许多选项,它们大致分为四大类:
· 基本配置选项,如设置尝试的事件数量。
· 运行约束选项,如设置只对单独的一个包进行测试。
· 事件类型和频率。
· 调试选项
它是Android系统自带一个命令行工具,可以运行在模拟器里或者真是设备中运行。
monkey向系统发送伪随机的用户事件流,实现对正在开发的应用程序进行压力测试。
3、Monkey命令参数介绍
monkey前的准备(命令)→此处我们也可以在Android studio的terminal中进行,也可以在cmd命令框中进行,但手机与电脑需进行USB连接,并在开发者选项中选中USB调试。而如果你不是测试自己手机上的,如果你采用模拟器测试,你应该先启动Android studio,然后设置好模拟器,并进入模拟器测试状态。
当我在自己的电脑上输入adb命令时,其显示:'adb' 不是内部或外部命令,也不是可运行的程序或批处理文件。即说明环境配置还没有完全。

因此以下步骤是如何配置环境,使系统中由adb命令。
①下载SDK(Software Develpoment Kit):软件开发程序包
但是此步骤基本上不用操作,因为在下载完Android studio后,就应当自动配置完毕,如果没有配置完毕,可以进入官网进行相应版本的下载。
(https://android-sdk.en.softonic.com/)

在文件夹中就会出现sdk软件。接着,进入电脑设置中的高级设置以及环境变量配置中。

在系统变量下面点击新建,输入的变量名为ANDROID_HOME,变量值为SDK的存储路径,你存在哪里就填那个地址,我是存在D盘中路径为如下:D:\adt-eclipse\sdk 填写完以后,确定保存。

设置path,因为系统本来就有这个变量,点开这个变量,在变量值的最后加入;%ANDROID_HOME%\tools 然后保存进入下一步。

当我们再次打开cmd输入adb之后,就会成功显示输入adb devices,真机和模拟器名称。

4、Monkey命令测试过程
①当我们在cmd的命令中输入adb shell monkey 或者 adb shell monkey -help命令之后,我们可以查看到monkey中的help选项命令,包括图和通过脚本文件进行monkey测试等等。

② 如果在monkey参数中不指定任何参数,monkey所得到的动作都是随机分配的,9个动作其每个动作分配的百分比之和为100%,我们可以通过添加命令选项来控制每个事件的百分比,进而可以将操作限制在一定的范围内。
我操作了一下不加动作百分比控制,系统默认分配事件百分比的情况。


再看一下指定事件,控制事件百分比之后的情况
命令:adb shell monkey -v -p your.www.com --pct-anyevent 100 500


说明:--pct-anyevent 100 表明pct-anyevent所代表的事件的百分比为100%。
③ 应用程序包都在data目录中的data目录下,我们输入命令:cd data/data 进入目标data文件夹,在执行命令:ls,可找到刚才加载项目的应用程序包。
而当我们再次输入adb shell的时候:

参数介绍:
最后的500,表示测试触发500个事件(500个事件要按比例分摊到9个事件当中,如何指定不同的事件比例上面已经说过了)。
如果在事件之间插入延时,使用参数:--throttle 5000 这里的5000为毫秒单位。通过这个选项,可以降低monkey的执行速度;如果不指定该选项,Monkey将不会被延迟,事件将尽可能快的被产生。
-s <seed> 伪随机数生成器的seed值。如果用相同的seed值再次运行monkey,它将生成相同的事件序列,对9个事件分配相同的百分比。
-v 命令行的每一个-v将增加反馈信息的级别。
④而当我们想测试所连接的手机,不让手机进入锁屏状态。
查看包名:查看电脑中某一位置的apk文件的包名:电脑打开CMD-进入TMG目录-运行设备--查看包名aapt dump badging *.apk(apk文件的路径,可以直接拖拽)。

或者直接查看手机中存在的apk包,进入adb shell 命令后---手机的data/data文件夹--ls查看所有包名 找到要测apk的包名

运行monkey,对此包进行300次无规律点击。

或者运行monkey,对此包进行300次无规律点击后将日志导出到电脑的某一位置
测试停止后,查看导出的monkey日志,发现问题。

在log的最开始都会显示Monkey执行的seed值、执行次数和测试的包名。
首先我们需要查看Monkey测试中是否出现了ANR或者异常,无响应问题(ANR问题):在日志中搜索“ANR ”(此处有空格), 崩溃问题:在日志中搜索“Exception”,快速定位到关键事件信息 。然后查看Monkey里面出错前的一些事件动作,并手动执行该动作,找出重现步骤,给开发。
5、monkey常用参数详解
注意,此处操作都应该打开自己的安卓虚拟器。


-v 日志详细程度
Level 0 : adb shell monkey -p fishjoy.control.menu -v 100 最简单(默认),除了启动、测试完成和最终结果外只提供较少的信息。

在不同的测试中,我们会发现参数都是有所不同的。
Level 1 : adb shell monkey -p fishjoy.control.menu -v -v 100 提供了较为详细的测试信息,如逐个发送到Activity的事件信息
Level 2 : adb shell monkey -p fishjoy.control.menu -v -v -v 100 提供了更多的设置信息,如测试中选中或未选中的Activity信息
比较常用的是-v -v -v,一般会保存到指定文件中供开发人员查找bug原因时使用
-s(随机数种子)
指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同的。
示例: monkey测试1:adb shell monkey -p fishjoy .control.menu –s 10 100
monkey测试2:adb shell monkey -p fishjoy .control.menu –s 10 100
--throttle <毫秒>
指定用户操作(即事件)间的时延,单位是毫秒;如果不指定这个参数,monkey会尽可能快的生成和发送消息。
示例:adb shell monkey -p fishjoy.control.menu --throttle 3000 100
-p <允许的包名列表>
用此参数指定一个或多个包。指定包之后,monkey将只允许系统启动指定的app。如果不指定包,monkey将允许系统启动设备中的所有app。
--ignore-security-exception
作用:通常,当程序发生许可错误(例如启动一些需要许可的Activity)导致的异常时,Monkey将停止运行。设置此项,Monkey将继续发送事件给系统,直到事件计数完成。
--pct-touch<percent>
设定触摸事件的百分比,触摸事件是一个有手指按下、抬起事件的手势,它发生在屏幕上的某个单一位置,在手机上看到的实际操作类似于点击。
--pct-motion< percent >
设定滑动事件的百分比,滑动事件是一个先在某一个位置手指按下,滑动一段距离后再抬起手指的手势,在手机上看到的实际操作是一个没有拐弯的直线滑动操作。
Monkey执行滑动事件对外输出的日志由一个ACTION_DOWN事件、一系列ACTION_MOVE事件和一个ACTION_UP事件组成:
--pct-pinchzoom< percent>
设定二指缩放事件的百分比,二指缩放事件是指在屏幕上的两处按下,并同时移动,最后同时抬起的操作,即智能机上的放大缩小手势操作。

--pct-nav< percent >
设定基本导航事件的百分比,基本导航事件是指点击方向输入设备的上、下、左、右按键的操作,现在的手机上很少有上、下、左、右按键,这种事件一般用的比较少。

6、心得体会
在这次的作业上,其实我认为是有一定的难度的,因为在之前的课程上我们学习并且完成的是网页的测试软件介绍,例如Jmeter,连接数据库的JDBC等等,但是这次要测试的是安卓,而我对安卓的了解其实也还没有到完全很深刻的地步,并且再开始准备学习这个测试软件的时候,我还觉得有一些困难,因为安装和配置都有一定的问题,在一开始,我觉得我安装了Android studio就应该是吧sdk配置完了,但没有想到我输入adb显示没有,后来发现是环境配置还有一些问题,因此我搜索了百度并进行了问题解决,还知道他原来不只是可以测试虚拟机还可以测试的是直接连接手机测试手机上的一些软件。
而他最简单的测试方式便是输入进指定的文件包之后,对其进行命令的输入,此处的操作就很简单了,因为网络上有很多命令的介绍,我只需要根据网络上的指导进行命令的输入,就可以完成许多软件效率的测试和验证。俗话说得好,万事开头难,因此我认为这次的软件测试实验只要认真的去寻找了相关的资料,进行了一定的了解,基本上都可以进行很清晰的了解,而此块测试的特殊性在于,他并不是下载一个特殊的软件进行软件上的测试和操作,而是在配置环境之后,在自带的cmd命令行中进行命令输出既可以完成所有的操作,因此具有很强的便捷性。
因此通过这次的作业,加上前几次的个人作业,无论是从git上传下载代码的学习,到这次的软件测试环节,我都敢收到了这门课程贯穿了整个开发的需求过程,从需求的找寻到最终成品的测试和展示都有迹可循,明白了真正成功的一款软件在真正发布之前所需要做出的所有测试和努力。这是十分有利于我学习的。
Android studio测试软件——Monkey学习及运用的更多相关文章
- Android压力测试工具——Monkey
Android压力测试工具——Monkey Monkey是运行在模拟器上和真机设备上的一段程序,它会产生用户事件的一系列伪随机流,比如点击.触摸.手势,还有很多系统级别的事件.Monkey通常是用来做 ...
- Android稳定性测试工具Monkey的使用
综述 Monkey是一个命令行工具,它可以运行在我们的模拟器或者设备当中.它可以发送一些伪随机的用户事件流,例如点击.触摸.手势等.我们能够使用Monkey工具来对我们所开发的应用进行压力测试. ...
- Android 压力测试工具Monkey
原文地址http://www.syhm52.com/tools/17.html 一.Monkey定义探索软件测试工具有哪些,本文主要介绍Monkey工具.Monkey测试是Android平台自动化测试 ...
- android adb shell and monkey 学习记录
Monkey环境: android SDK and JDK SDK目录下的platform-tools和tools目录要配置环境变量 查看版本: ADB 的安装这里就不多说了,输入以下命令有如下提示就 ...
- 【Android压力测试】monkey压力测试
1.首先安装adb.java环境 2.下载地址: 链接: https://pan.baidu.com/s/1i5xltpN 密码: ra6g monkey 很简单的理解是 像猴子一样一顿点乱点,看是否 ...
- 如何将Android Studio与华为软件开发云代码仓库无缝对接(二)
上篇文章:如何将Android Studio与华为软件开发云代码仓库无缝对接(一) 上一章讲了,如何用Android Studio以软件开发云代码仓库为基础,新建一个项目.接下来,这一章继续讲建好项目 ...
- Android Studio 插件开发详解一:入门练手
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/78112003 本文出自[赵彦军的博客] 一:概述 相信大家在使用Android S ...
- 从 Eclipse 迁移至 Android Studio
从 Eclipse 迁移至 Android Studio 本文内容 Android Studio 基础知识 迁移先决条件 将项目导入 Android Studio 后续步骤 将项目迁移至 Androi ...
- Mac电脑使用Android Studio进行真机调试
第一步: 为mac电脑配置 adb 命令的环境变量,分为2小步 1.找到 Android Studio 为你安装的 SDK : 打开电脑中 Android studio 的工具的软件,在启动 Andr ...
随机推荐
- 安装keystone
在控制节点上执行 controllerHost='controller' MYSQL_PASSWD='m4r!adbOP' RABBIT_PASSWD='0penstackRMQ' ADMIN_PAS ...
- 【并行计算-CUDA开发】有关CUDA当中global memory如何实现合并访问跟内存对齐相关的问题
ps:这是英伟达二面面的一道相关CUDA的题目.<NVIDIA CUDA编程指南>第57页开始 在合并访问这里,不要跟shared memory的bank conflic ...
- Linux软链接的创建,删除,修改
Linux软链接,类似于windows系统的快捷键.譬如你将windows系统的D盘中某一个文件夹放在桌面上当做快捷键. 一.软链接创建 1.创建软链接 ln -s [目标目录] [软链接地址] [目 ...
- ActiveMQ 即时通讯服务 入門指南及淺析
转:http://www.cnblogs.com/hoojo/p/active_mq_jms_apache_activeMQ.html 一. 概述与介绍 ActiveMQ 是Apache出品,最流行的 ...
- Web安全小结之后端
- RMQ+差分处理(Let Them Slide)Manthan, Codefest 19 (open for everyone, rated, Div. 1 + Div. 2)
题意:https://codeforc.es/contest/1208/problem/E 现有n行w列的墙,每行有一排连续方块,一排方块可以左右连续滑动,且每个方块都有一个价值,第i 列的价值定义为 ...
- 基于全备份+binlog方式恢复数据
基于全备份+binlog方式恢复数据 将bkxt从库的全备份在rescs5上恢复一份,用cmdb操作 恢复全备后执行如下操作 set global read_only=OFF; stop slave; ...
- 你不知道的css各类布局(五)之em布局、rem布局
em布局/rem布局 em和rem的区别 在了解弹性布局前我们需要先知道em和rem rem:font size of the root element,rem是相对于根元素<html>来 ...
- Oracle数据库中的变量
Oracle数据库中的变量 来源:https://blog.csdn.net/wahaa591/article/details/46772769 1.define(即host变量) define va ...
- vue2.0关于for循环 index的使用方法
<!DOCTYPE html> <html> <head> <title>for循环</title> </head> <b ...