APP压力测试与性能分析

一、adb模拟按键操作

1.1 adb模拟手机按键

  1. 打开【指针位置】设置
  2. 执行adb shell input命令

1.2 模拟事件命令

  1. 模拟点击事件
  • adb shell tap x坐标 y坐标
  1. 模拟输入事件
  • adb shell input text <输入内容>
  1. 模拟滑动事件
  • adb shell swipe <起点x> <起点y> <终点x> <重点y> <滑动时长>
  1. 模拟手机按键
  • 返回键:adb shell input keyevent 4
  • Home键:adb shell input keyevent 3(置于后台运行)
  • 音量加大:adb shell input keyevent 24
  • 音量减小:adb shell input keyevent 25

二、adb性能分析

2.1 CPU使用情况

  • 查看当前系统CPU使用情况;
    • adb shell dumpsys cupinfo

2.2 内存使用情况

  • 查看当前系统的内存:
    • adb shell dumpsys meminfo
  • 查看某个应用的内存:
    • adb shell dumpsys meminfo <应用名>

2.3 top命令

    1. adb shell top
    1. 查看某个包的一些性能指标:adb shell top |grep "包名"
    1. adb shell top -d 1 |grep "包名"

2.4 电池电量

  • 命令:
    • adb shell dumpsys battery
Hogwarts $ adb shell dumpsys battery

Current Battery Service state:
  AC powered: true
  USB powered: false
  Wireless powered: false
  Max charging current: 2000000   # 最大充电电流; mA
  status: 2    #电池状态:2:充电状态 ,其他数字为非充电状态 
  health: 2    #电池健康状态:只有数字2表示good
  present: true   #电池是否安装在机身
  level: 81    #电量: 百分比
  scale: 100
  voltage: 4108    #电池电压
  temperature: 353   #电池温度,单位是0.1摄氏度
  technology: Li-poly   #电池种类

2.5 性能相关的具体用法

三、APP压力测试

3.1 Monkey测试的定义

  • Monkey是Google提供的一个用于稳定性与压力测试的命令行工具;
  • 可以运行在模拟器或者实际设备中;
  • 它向系统发送伪随机的用户事件,对软件进行稳定性与压力测试。

3.2 Monkey测试的意义

  • Monkey就是像猴子一样上蹿下跳地乱点;
  • 为了测试软件的稳定性、健壮性;
  • 随机点击比顺序点击,更容易发现问题。

3.3 Monkey基本用法

  1. 在命令提示符中输入adb devices查看有无连接的设备;
  2. 确认有设备连接;
  3. 获取APP的包名;
  4. adb shell monkey [参数] {随机发送事件数}
  5. 最简单的Monkey命令:adb shell monkey 100

3.4 Monkey常用选项

  • -v:用于指定反馈信息级别,总共3个级别:

    • adb shell monkey -v -v -v 10
  • -s <seednumber>:用于指定伪随机数生成器的seed(种子)值

    • adb shell monkey -s 123 10
  • --throttle <milliseconds>:每个事件结束后的间隔时间

    • adb shell monkey --throttle 300 10
  • -p:用于约束限制,用此参数指定一个或多个包

    • adb shell monkey -p com.android.browser 10
  • --ignore-crashes:忽略崩溃;

  • --ignore-timeouts:忽略超时;

  • --ignore-security-exceptions:忽略安全异常;

  • --ignore-native-crashes:忽略本地代码导致的崩溃异常;

  • --monitor-native-crashes:跟踪本地方法的崩溃问题。

3.5 Monkey时间选项

  • --pct-touch:触摸事件;

  • --pct-motion:滑动事件;

  • --pct-appswitch:activity之间的切换;

  • --pct-pinchzoom:缩放事件;

  • --pct-rotation:屏幕旋转事件;

  • --pct-flip:键盘事件;

  • --pct-anyevent:任意事件。

3.5 雪球APP压力测试实战

  • 确定测试APP的包名:

    • adb shell dumpsys activity |grep mFocusedActivity
  • 执行8小时:

    • 需要跑的时间/命令之间的时间间隔=要执行的次数 86060*1000/300 = 96000
  • 日志级别:3个v

  • 确定雪球中常用的操作类型和比例:滑动、触摸、键盘、系统按键、activity切换

  • 确定seed值:-s 12345

  • 确定调试选项:

    • --ignore-crashes --ignore-timeouts --ignore-security-exceptions
  • 重定向日志到文件中: >

示例脚本:

adb shell monkey -p cpm.xueqiu.android --pct-touch 30 --pct-motion 30 \ --pct-syskeys 10 --pct-appswitch 20 --pct-flip 5 --pct-anyevent 5 \ -s 12345 --throttle 300 --ignore-crashes --ignore-timeouts \ --ignore-security-exceptions -v -v -v 200 > monkey_log.txt

3.6 Monkey日志分析

  1. 程序无响应,ANR问题:在日志中搜索“ANR”;
  2. 崩溃问题:在日志中搜索“CRASH”;
  3. 其他问题:在日志中搜索“Exception”。