一、什么是稳定性测试
1:稳定性测试概念
稳定性测试就是指软件长时间的持续运行,系统版本是否稳定,是否能否持续的为用户提供服务。
稳定性测试其实也是性能测试范畴中的一种方式。
2:稳定性测试指标
异常的次数
异常的频率
3:稳定性测试工具
1:首选Monkey
Monkey是向系统发送随机的用户事件流(如按键输入、触摸屏输入和手势输入等),实现对正在开发的应用程序进行稳定性测试。可以更好的模拟用户操作,确保App的稳定性。
通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常
2:MonkeyRunner
monkeyRunner 对monkey 命令进行封装后的api
3:Monkey 局限性
1)发送的事件无法指定,是随机发送的
2)测试的应用只能是app
3)Monkey虽然可以通过指令来发送事件,但是没有支持条件判断,也不支持读取待测界面的信息来执行验证操作
4:Monkey原理
- Monkey 程序是由 Android 系统自带,使用 Java 语言写成,其本身是安卓系统下的一个monkey.jar文件。在Android文件系统中的存放路径是: /system/framework/monkey.jar;
- Monkey.jar程序是由一个名为“monkey”的Shell脚本来启动执行,shell脚本在Android文件系统中 的存放路径是:/system/bin/monkey;
- Monkey 启动方式:在 cmd 命令提示符里面输入命令行来启动 monkey 测试。
- 命令行:adb shell monkey——monkey.shell——monkey.jar——安卓进程——设备上执行测试
二、如何用Monkey进行稳定性测试
1:Monkey环境搭建
1)Android SDK环境:下载网址:http://www.androiddevtools.cn/
2)设备(真机/模拟器)
夜神、mumu等都可以
2:Monkey支持参数
1)连接设备
连接设备
设备:开启USB调试选项
通过在命令行输入adb devices来进行连接
2)事件数
Monkey支持的所有命令:adb shell monkey查看
必选的命令:COUNT:事件数 通过事件数量来测试稳定性
3)事件间隔时间设置
--throttle <milliseconds> 在事件之间插入固定延迟。通过这个选项可以控制Monkey发送事件的频率。时间单位是ms
例1:发送10个事件,持续执行时间1分钟
adb shell monkey --throttle 6000 10
例2:模拟用户操作,持续执行时间1分钟
adb shell monkey --throttle 500 120
4)指定执行apk包
-p <allowed-package-name> 此参数指定了一个包,Monkey将只允许系统启动这些包里的Activity
-p <allowed-package-name1> -p <allowed-package-name2> 如果用此参数指定了几个包,Monkey将只允许系统启动这些包里的Activity
例3:对58同城进行稳定性测试,执行100次事件
adb shell monkey -p com.wuba 100
获取包名
adb shell pm list packages
5)日志
-v Level 0 除启动提示、测试完成和最终结果之外,提供较少信息
-v-v Level 1 提供较为详细的测试信息,如逐个发送到Activity的事件
-v-v-v Level 2 提供更加详细的设置信息,如测试中被选中的或未被选中的Activity。
例4:对58同城进行稳定性测试,执行100次事件,分别查看不同日志级别记录的信息情况
adb shell monkey -p com.wuba -v 100
adb shell monkey -p com.wuba -v-v 100
adb shell monkey -p com.wuba -v -v -v 100
日志导出到本地
adb shell monkey -p com.wuba -v-v-v 100 >d:\wuba.txt
6)seed值
在Monkey运行过程中,肯定会发现异常、奔溃、无响应等问题,对于此类问题如何进行复现呢?
-s <seed> 伪随机数生成器的seed值。如果用相同的seed值再次运行Monkey,它将生成相同的事件序列。
使用场景:
复现bug,回归测试(验证bug)
adb shell monkey -s 1593077384911 -p com.wuba -v-v-v 100 >d:\wuba4.txt
adb shell monkey -s 100 -p com.wuba -v-v-v 50
7)调试选项
在Monkey运行过程中,我们可以通过结束进程的方式来终止Monkey的执行,当然在运行过程中遇到异常、奔溃等情况Monkey也会停止。为了保证执行的事件数执行完整,我们可以通过调试选项的设置来防止在运行过程中Monkey命令的提前结束。
--ignore-crashes 忽略在应用程序出现crash时导致的monkey停止
--ignore-timeouts 忽略在应用程序出现ANR问题时导致monkey停止
--ignore-security-exceptions 忽略应用程序发生许可错误时导致monkey停止
例5:对58同城进行稳定性测试,执行50次事件,忽略过程中遇到的异常,直到50次事件完成
adb shell monkey -p com.wuba --throttle 500 --ignore-crashes --ignore-timeouts --ignore-security-exceptions -v-v-v 50
三、Monkey事件类型
1:操作事件简介
monkey所操作的随机事件流中包含11大事件,分别是触摸事件、手势事件、二指缩放事件、轨迹球事件、屏幕旋转事件、基本导航事件、主要导航事件、系统按键事件、启动activity事件、键盘事件、其他类型事件
2:操作事件简要说明
- 触摸事件:指在屏幕某处按下并抬起的操作,可通过--pct-touch参数来配置其事件百分比。
- 手势事件:指在屏幕某处的按下、随机移动、抬起的操作,即直线滑动操作;可通过--pct-motion参数来配置其事件百分比
- 二指缩放事件:二指缩放事件是指在屏幕上的两处同时按下,并同时移动,最后同时抬起的操作,即智能机上的放大缩小手势操作;可通过--pct-pinchzoom参数来配置其事件百分比。
- 轨迹球事件:轨迹事件是由一个或多个随机的移动组成的,有时会伴随着点击,即一系列的曲线滑动操作;可通过--pct-trackball参数来配置其事件百分比。
- 屏幕旋转事件:模拟的Android手机的横屏和竖屏切换;可通过--pct-rotation参数来配置其事件百分比。
- 基本导航事件:现在手机上很少有上、下、左、右按键,这种事件一般用得比较少;可通过--pct-nav参数来配置其事件百分比。 -- 用的比较少
- 主要导航事件:主要导航事件是指点击“主要导航”按键的操作,这些按键通常会导致UI界面中的动作,如键盘的中间键、回退按键、菜单按键,可通过--pct-majornav参数来配置其事件百分比。
- 系统按键事件:系统按键事件是指点击系统保留使用的按键的操作,如点击Home键、返回键、音量调节键等。
- 启动activity事件:启动Activity事件是指在手机上启动一个Activity的操作。在随机的时间间隔中,Monkey将执行一个startActivity()方法,作为最大限度上覆盖被测包中全部Activity的一种方法。可通过--pct-appswitch参数来配置其事件百分比。
- 键盘事件:键盘事件主要是一些与键盘相关的操作。比如点击输入框键盘弹起、点击输入框以外区域键盘收回等。可通过--pct-flip参数来配置其事件百分比。
- 其他类型事件:其他类型事件包括了除前面提到的10种事件外其他所有的事件,如按键、其他不常用的设备上的按钮等。可通过--pct-anyevent参数来配置其事件百分比。 -- 用的比较少
指定执行触摸事件--pct-touch 100次 adb shell monkey -v -v -v -s 6789 --throttle 300 --ignore-crashes --ignore-timeouts --pct-touch 100 -p com.android.calculator2 100 > 日期.log