第一部分:背景
1.为什么要开展压力测试?
提高产品的稳定性
提高产品的留存率
2.什么时候开始压力测试?
首轮功能测试通过后
下班后的夜间进行
第二部分:理论
1.什么是monkey?
Monkey是发送伪随机用户事件的工具;
2.monkey在那里?
在手机系统里,为了跟monkey进行通信,要借用adb
3.什么是adb?
Android debgu bridge
monkeyScript
4.什么是MonkeyScript?
monkeyScript是一组可以被monkey识别的命令集合
Monkeyscript可以完成重复固定的操作;
monkeyRunner
5.什么是monkeyRunner
monkeyRunner提供了一系列的API
monkeyRunner可以完成模拟事件及截图操作
6.monkey和monkeyRunner的区别
Monkey:在adb shell中,生成用户或系统的伪随机事件;
monkeyRunner:通过API定义特定命令和事件控制设备;
7.monkeyRunner APIs
monkeyRunner:用来连接设备或模拟器
monkeyDevice:提供安装、卸载应用,发送模拟事件;
monkeyImage:完成图像保存,以及对比的操作;
8.monkeyrunner的 测试类型
多设备控制 功能测试 回归测试
9.压力测试结果
1)crash:崩溃,应用程序在使用中非正常退出;
2)Anr:application not responding无响应
第三部分:实践
1.准备测试环境
准备Android sdk环境 http://www.android-studio.org/
准备Python环境 https://www.python.org/downloads/ 2.7
2.一个app的压测实践
压测过程step1
在手机开发者选项中,将usb调试选上
压测过程Step2
确认手机和电脑已经成功连接 使用命令adb devices 进行确认
压测过程Step3
安装测试app,使用命令adb install package.apk
压测过程Step4
发送压测指令,使用adb shell monkey 1000
1000告诉monkey帮助完成1000个指令,包括home键,滑屏减等等;
压测过程Step5
获取app包名,使用命令adb logcat|grep START
|在Linux下代表把上一个命令的输出作为下一个命令的输入
Grep start表示抓取日志中包含有start标签的输出
###查找包名和activity
A. Windows上使用adb logcat | find /I "START" 查找
B.清除logcat内容,使用命令adb logcat -c
启动logcat,使用命令adb logcat AcitivityManager:I*:s
启动查看程序
C. Adb logcat >d:/111.log
D:adb -s LE67A06140256238 shell pm list packages | find /I "LETV"
压测过程Step6
给指定包打压力
Adb shell monkey -p package 1000
3.monkey高级参数的应用
1)throttle参数
指定事件之间的间隔(毫秒)
Adb shell monkey --throttle
2)seed参数
指定随机生成数的seed值,如果两次seed值一样那操作结果也是一样的
Adb shell monkey -s
Adb shell monkey -s 100 50 seed值为100,执行50个事件
3)触摸事件(只要求monkey完成点击事件,滑动,音量键,主导行键)
设定触摸事件百分百
Adb shell monkey --pct-touch
再此基础上添加-v参数会把做的事件都列出来
Adb shell monkey -v -p 包名 --pct-touch 100 99 占百分百的点击事件,完成99事件
事件都是成对出现的
4)动作事件
设定动作事件百分比(这里的百分比和其他事件的百分比之和要等于100,如果不等于100就会把剩余部分的比例进行随机操作)
Adb shell monkey --pct-motion
Adb shell monkey -v -p 包名 --pct-touch 50 --pct-motion 30 100 touch事件50%,motion事件30%,执行100个事件
Adb shell monkey -v -p 包名 --pct-touch 50 --pct-motion 50 100
5)轨迹球事件
设定轨迹球事件百分比
Adb shell monkey --pct-trackball
6)基本导航事件
设定基本导航事件百分比,输入设备的上下左右
Adb shell monkey --pct-nav
7)主要导航事件(软件盘上的导航键)
设定主要导航事件百分比,兼容中间键,返回键,菜单按键
Adb shell monkey --pct-majornav
8)系统导航事件(跟硬件相关)
设定系统导航事件百分比,home,back,拨号,音量键
9)启动activity事件
设定启动activity的事件百分比
Adb shell monkey --pct-appswitch
10)不常用事件
设定不常用事件的百分比
Adb shell monkey --pct-anyevent
11)崩溃事件
忽略崩溃和异常
Adb shell monkey --ignore-crashes
12)超时事件anr
忽略超时事件,知道完成指定的事件数
Adb shell monkey --ignore-timeouts
Adb shell monkey -v -p 包名 --pct-touch 50 --pct-motion 50 --ignore-crashes
--ignore-timeouts 100 如果出现anr和crash继续完成知道完成100个事件
4.crash结果分析
实践过程:
Step1:安装可以引起crash的app
Adb install apk.apk
Step2:执行压力命令
adb logcat | grep START 点下要测试的app会输出包名
Adb shell monkey -p包名 1000
Step3:分析crash的exception信息
把这些crash信息发给研发;
重现问题使用seed值:Adb shell monkey -p包名 -s 1468814836964 1000
如果使用忽略anr和crash时没有seed值;
5.anr结果分析
实践过程
Step1:安装可以引起anr的app
Step2:执行压力命令
Step3:分析anr的exception信息
手动找到anrlog的信息
Adb shell 进入手机
Cd /data/anr/ 有一个traces.txt
如果出现anr了会抛出一条信息,这条信息会在traces.TXT的最上面部分
重要:
1.adb无法使用,提示error:unknown host service的解决办法,需要辨别电脑的5037端口被哪个应用程序占用的方法:(使用adb时需要5037端口是空闲的)
1)打开命令行,输入命令:netstat -ano |findstr "5037"
2)tasklist /fi "pid eq 6728"
3)taskkill /pid 6728 /f 可停止占用的进程