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-eclipsesdk 填写完以后,确定保存。
设置path,因为系统本来就有这个变量,点开这个变量,在变量值的最后加入;%ANDROID_HOME% ools 然后保存进入下一步。
当我们再次打开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上传下载代码的学习,到这次的软件测试环节,我都敢收到了这门课程贯穿了整个开发的需求过程,从需求的找寻到最终成品的测试和展示都有迹可循,明白了真正成功的一款软件在真正发布之前所需要做出的所有测试和努力。这是十分有利于我学习的。