一、基础知识
1. 为什么要开展压力测试?
- 提高产品的稳定性
- 提高产品的留存率
2. 什么时候开展压力测试?
- 首轮功能测试通过后
- 下班后的夜间进行
3. 什么是Monkey?Monkey在哪?
monkey是发送伪随机用户事件的工具,就在我们的手机系统里面,但是没有显示的icon。
4. 我们用什么来操作monkey呢?
5. 什么是MonkeyScript?
MonkeyScript是一组可以被monkey识别的命令集合
MonkeyScript可以完成重复固定的操作
6. 什么是MonkeyRunner工具?
MonkeyRunner提供了一系列的API
MonkeyRunner可以完成模拟事件及截图操作
7. Monkey和MonkeyRunner的区别?
Monkey:在adb shell中,生成用户或是系统的伪随机事件
MonkeyRunner:通过api定义特定命令和事件控制设备
8. MonkeyRunner都包括哪些APIs呢?
- MonkeyRunner:用来连接设备或模拟器
- MonkeyDevice:提供安装卸载应用,发送模拟事件
- MonkeyImage:完成图像保存,及对比操作
9. MonkeyRunner都能测试哪些类型?
- 多设备控制
- 功能测试
- 回归测试
10. 压力测试的结果:
crash:崩溃
ANR:application not responding
二、手机压力测试步骤:
step1:
在手机开发者选项中,将usb调试选上。
step2:
确认手机和电脑已经成功连接
cmd中输入:adb devices,如果连接成功会显示手机的序列号,如下
step3:
安装测试的app
adb install packagename.apk(注意:需要进入apk所在的目录执行命令)
step4:
发送压力指令
adb shell monkey 1000
这里的数字1000是指monkey随机发出的1000个指令
step5:
获取app的包名
adb logcat | grep START (注意:这样输入会说grep不是内部命令,看下面的解释)
grep 是linux下的命令,windows系统可以使用 findstr 替代 grep。或者执行adb shell进入到手机,在手机系统下,执行logcat | grep START。android系统是linux的,所以支持grep。
输入上面的命令后,如果你想知道哪个app的包名是什么,你就打开哪个app,我打开了魅族手机原带的计算器,如图,这样我们就知道了计算器的包名。
step6:
给指定的包打压力
adb shell monkey -p package 1000
比如我用魅族手机原带的计算器测试,就输入:adb shell monkey -p com.meizu.flyme.calculator 1000,这样就对计算器进行了压力测试。下图为测试的结果,注意标红的部分,翻译过来就是注入了1000个事件,如果这样显示说明测试没用问题,如果那个数小于你原来输入的值,说明有问题。
三、Monkey高级参数的应用
1.throttle参数:指定事件之间的间隔
adb shell monkey --throttle <延时时间>
比如:adb shell -p com.meizu.flyme.calculator --throttle 1000 100
这是给魅族自带的计算器执行100个事件,每1秒一次
2. seed参数:指定随机生成数的seed值
adb shell monkey -s<seed> event-count
比如:adb shell monkey -p com.meizu.flyme.calculator -s 100 50
为什么需要seed值,比如我们用monkey发现了异常,需要开发人员处理,这时我们需要复现异常。由于monkey的命令是随机的所以很难复现。seed值相当于一个标示,相同的seed值和相同的事件次数,monkey会执行相同的序列操作,就会复现问题。
3.触摸事件参数:设定触摸事件的百分比
adb shell monkey --pct-touch<percent>
解释:monkey是随机事件,现在我们只想让monkey来操作点击事件,其他的什么滑动事件都不处理,怎么办?这里就用我们的触摸事件参数。
4.动作事件:设定动作事件的百分比
** adb shell monkey --pct-motion<percent>**
解释:比如我们只想测试三种事件,那么我们要让三种事件的百分比加起来为100,如果不等于100,比如等于80,那么剩余的20monkey还是随机测试。
下图就是touch事件50,motion事件30,这是占比,20%的时间是随机的。
还有一些命令,在课程的4-5节,需要自己仔细看下。
5.崩溃事件:忽略崩溃和异常
正常情况下,如果monkey发现崩溃和异常,就会停止继续操作。为了能让monkey继续执行,我们就引入这个参数。
adb shell monkey --ignore-crashes <event-count>
6.超时事件(ANR):忽略超时事件
adb shell monkey --ignore-timeouts <event-count>
四、CRASH结果取析:
- step1:安装可以一起crash的app
- step2:执行压力命令
- step3:析取crash的Execption信息
上图为ANR的异常信息,同样crash也会显示CRASH的一异常信息。
五、Monkey script:
执行monkey脚本的命令,可以执行我们想要的有序命令
adb shell monkey -f <scriptfile> <event-count>
monkey script有许多命令,这里不详细说了,可以看课程的4-9。