原文:https://blog.csdn.net/u011541946/article/details/77417795
一、Android SDK环境安装
本系列开始,我们介绍android app的测试。由于大部分人没有同时有iPhone手机和iMac笔记本电脑,所以,我们只介绍android app的自动化测试技术。主要有两个主题,Monkey压力测试和appium前端功能自动化测试。我们先来学习下,android中Monkey的测试。
在开始Monkey测试之前,我们先来了解几个问题或者叫概念。
1. 什么是Monkey?
Monkey是发送伪随机用户事件的工具。
2. Monkey在哪里?
每台android手机里都有Monkey工具,但是我们是看不到的,因为,Monkey不是一个可视化的工具,例如手机里的微信,这是一个可视化的,能打开,有图形化界面,但是Monkey没有。
3. 手机里如何与Monkey进行通讯?
我们需要,借助ADB才能与Monkey进行通讯。
4. 什么是ADB
Android Debug Bridge,安卓调试桥
在开始Monkey测试之前,我们需要搭建环境。第一个前提条件就是安装Java JDK,第二个条件就是安装android SDK。JDK 大家肯定知道是什么,同样android SDK(software development kit)也就是android专属的软件开发工具包。接下来,就是介绍如何配置好android SDK环境。
1)下载android SDK
浏览器打开www.android-studio.org,,点击下载,然后选择下载windows版本的SDK。
这里建议下载.exe格式。由于需要访问google的网站,访问不了的朋友,可以点击这里。
2)安装
下载下来的exe文件,直接双击开始安装,安装过程会检测你是否安装过JAVA JDK。直接默认安装到C盘就好。我这安装位置是:
C:\Program Files(x86)\Android\android-sdk
安装完了就是以上图,这里我们点击一下SDK Manager.exe
如果网速好的,可以点击全部,然后进行安装。我这里点击默认安装12个包。为什么要安装这个了,因为安装之后,会产生一个platform-tools的文件夹,里面就有我们需要的adb.exe,现实安装过程,很容易失败,连接google网络问题经常遇到。
3)设置环境变量
新建一个ANDROID_HOME的环境变量
找到系统变量中的path,点击编辑,添加两个路径%ANDROID_HOME%\platform-tools和%ANDROID_HOME%\tools
3)测试ADB是否安装成功
安卓手机用usb数据线连接到电脑,需要打开开发者模式,允许USB调试。
电脑打开cmd,输入adb,如果能看到下面这张图,说明安装和配置环境变量没有问题。关于android sdk的安装就介绍到这里。(我本来想试试android studio官网的sdk tool包,结果下载下来就有tools这个文件夹,也没有sdk manager.exe,就果断放弃,还是用上面的方法,下载旧版本的sdk tools的安装exe文件。)
二、ADB安装和卸载命令
前面一篇,我们安装了Android SDK环境,里面有一些工具是我们接下来要用到的。在学习Moneky之前,我们来学习几个ADB命令。如果一个专门做app测试的,说自己不会用adb安装软件,说明这个人真的只会做功能测试,而且是前端界面那种简单的功能测试。记得,在之前的公司招聘测试工程师的时候,我问过很多人两个关于app测试的问题。第一个就是android和iOS安装包的后缀名是什么。第二个就是你会哪些方法把一个app安装到你手机里面。很奇怪,真的还有人不知道.apk是安卓安装包和.ipa是iOS程序的文件格式。第二个问题,大部分答案是通过某某手机助手安装到手机里。其实我最想知道,他们会不会在Android上用adb命令安装程序。
1.查看连接设备命令:adb devices
我们电脑,测试多了,可能用usb数据线连接多个手机设备,通过查看手机设备的唯一标识符,可以识别连接的是什么设备。
上面的WPU开头的序列号是我安卓手机的标识符,可以理解和物理地址一样,是唯一的。
2.安装软件:adb install package
我们在电脑上提前下载好,安卓端的手机百度,下载下来,把包名称改成baidu.apk,放在桌面上。然后执行下面命令,安装开始,一会就可以在手机上看到安装的手机百度app
3. 查看手机里面安装程序包名
有一个笨方法,直接列出手机里面全部安装的包的名称:adb shell pm list packages,通过这个,我们找到刚刚安装手机百度的包名是:com.baidu.searchbox
还有一个可能在iMac机器上或者linux上能识别的命令:adb logcat | grep START, 意思是获取当前激活app的包名
4.卸载app命令:adb uninstall xxxx
这里我们演示卸载手机百度这个app
建议要记住这几个常见的ADB 命令,特别是人家问了你是否做过app测试之后,很可能会问到的问题。
三、Monkey给指定app打压
前面我们介绍了ADB的几个常见的命令,这篇开始学习Monkey的知识。总的来说,我们知道Monkey是一个app稳定性测试工具。由于Monkey可以给app做很多次随机事件,所以Monkey也有时候当做app的压测工具。
下面我们举例,Monkey给手机百度这个app做随机1000个事件,看看我们的命令如何写,在输入完命令之后,你可以盯着你的手机看看Monkey的测试效果。
命令格式:adb shell monkey -p com.baidu.searchbox 1000
命令解释:参数-p 是package的缩写,后面跟着你要指定测试的app的包名,如果不知道如何或者包名,请看前面一篇文章。上面参数1000,表示要做多少个随机事件的次数。上面红圈的地方,表示事件注入了1000,看到这个表示,测试完成,如果出现小于1000这个数字,说明有些事件没有执行成功。从上面截图来看,虽然执行了1000个随机事件,一共耗时1.6452秒。我们看到了一些IO异常,这个先不管这个异常。你运行的时候cmd显示可能和我有点不一样,但是基本信息是差不多的。
四、Monkey高级参数之throttle
前面一篇文章,我演示了如何利用Monkey给手机百度,做随机100个事件。我们知道,一共差不多耗时1.7秒不到,完成了1000个事件。这里要解释一下,我们肉眼看到的事件肯定没有1000个,一般点击事件,有交互效果,才能被我们眼睛识别,主要有点击事件,输入事件和滑屏事件,还有其他事件,这1000个每种事件是随机分配的。由于执行时间很短,看起来很快,那么有没有办法,让执行速度慢一点,我们可以看得更清楚一些。
我们可以通过Monkey高级参数中throttle来设置执行的速度,下面举例,一秒做1个事件,一共完成0个事件。
上面throttle后面跟着的1000表示毫秒,10才表示随机事件次数。
五、Monkey高级参数之seed
前面一篇我们学习了Monkey的高级参数之throttle,主要是用来控住执行速度。这篇,介绍另外一个高级参数seed。seed是什么意思呢,神奇的种子吗?先来,思考这么一个场景,我们用monkey做随机操作,结果发现了一个bug。如果我们用之前学过的命令,由于monkey是随机产生事件,所以,我们是没有办法去重复当时出现bug的步骤的。如果你学习了seed之后呢,这个问题就很好解决。原来monkey都是根据seed的值来产生随机事件,如果带上了seed参数,执行了两次同样的命令,那么就可以说明,这两次执行的随机事件是一模一样的。
直接来看看效果。
参数-s 就表示seed,100表示seed的值,seed会根据这个值去生成随机事件序列,后面的50代表随机事件次数。
测试步骤:
1.手机端打开手机百度app
2.执行上面命令一次,发现我们打开的是北京市的天气预报网页
3.退出天气预报页面,后台杀掉手机百度这个进程
4.手机再次打开手机百度,电脑上cmd再次输入上面截图的命令
5.发现打开的还是北京天气的页面
六、Monkey高级参数之触摸事件
这篇我们来介绍Monkey的触摸事件,我们反复强调,Monkey是随机发送事件的。但是有时候,我们需要,只做一件事件,例如,我们只需要做点击事件,在app中,点击一般叫触摸,对应单词是touch。
1.只做100%的touch事件,下面的100表示百分比,10表示随机事件次数
2.通过添加-v参数,可以看到详细的信息
上面0表示touch事件,0到11表示不同事件类型,例如有旋转事件,轨迹球事件等等。
3.来看看不设置百分比,看看随机事件做了哪些事件。
我们不指定百分比,可以看到touch事件只做了15%,其他事件比例都是随机分配的。
七、Monkey其他事件
前面一篇我们介绍了Monkey中的touch事件,也就是我们经常说的点击或者触屏事件。什么叫点击呢,就相当于按下电脑上的键盘,按下去,然后松开,这两个动作叫点击。在Monkey中,除了touch事件,还定义了其他10种事件。
1.看看monkey中包含哪些事件
我们命令行中--pct-touch后面跟着80,看到上面圈红圈的,可以看到0表示的是touch事件。
2.motion事件
什么是motion事件,就是不同手势的动作事件。
所以,数字1表示motion事件,即手势事件。
3.pinchzoom事件
这个叫二指缩放事件,你自己用两个手指头笔画一下就理解。例如我们在阅读电子书籍,可能用到这个动作。
4. trackball 事件
中文名字叫轨迹球事件,效果有点像你下拉刷新新闻列表的效果。下面数字3表示轨迹球事件
5.屏幕旋转事件(rotation)
屏幕旋转,主要有横屏和竖屏
6.permission事件
暂时没有相关资料介绍这个事件。
7.基本导航事件
基本导航事件:设备的上 下 左 右四个方向的导航操作。下面的数字6表示基本导航事件。
8.主导航事件
设置主要导航事件,例如app的中间键,返回键,菜单按键,应该很多app底部都有三到四个按钮,例如首页,发现,我的这样的底部菜单。数字7表示主导航事件。
9.系统导航事件
系统导航事件,主要是硬件设备的Home键,返回键和拨号键和音量键。数字8的类型表示系统导航事件
10.切换Activity事件
我们知道app里有多个Activity,我们切换到不同Activity事件,可以设置这样事件的百分比,数字9表示启动Activity事件。
11.flip事件
指的是键盘轻弹,点击文本框,键盘弹起,点击其他区域,键盘收起。
12.其他事件百分比设置
其他事件是指除了上面介绍的事件。因为不知道划分在那种事件,就放在其他事件这个分类。数字11表示其他事件。
总结:如果你需要制定只做2种或者三种事件,那么你几种事件百分比相加一定要等于100%,否则剩下的会自动随机分配。语法格式,参考motion部分的这张图。
八、Monkey高级参数之忽略崩溃和超时
本篇介绍Monkey的两个参数,设置忽略崩溃和没响应的状态,继续运行。一般来说,如果app出现崩溃,那么monkey是不知道要干神马事情的,因为app都死机了,还有一种情况就是程序没有响应(application not responding,简称ANR),超时没响应的时候,monkey也不知道在干嘛。针对这两种错误,monkey可以通过指定参数去忽略崩溃和异常和ANR。
1.--ignore-crashes 忽略崩溃和异常
2.--ignore-timeouts 忽略超时
3.当然两个参数也可以一起使用
我们知道Monkey是android中app的稳定性测试工具,所以如果app不稳定,一般有两种报错。上面已经提到的崩溃(crash)或者叫异常,还有一种就是ANR,程序无响应。当我们用monkey测试,出现这样情况的时候,我们一般需要去指定路径去导出crash log文件,交给开发去查看根本原因。