文章目录
- 一、性能测试工具-SoloPi
- 二、APP常用的性能指标
-
- [2.1 内存](#2.1 内存)
-
- [2.1.1 内存监控指标](#2.1.1 内存监控指标)
- [2.1.2 内存问题的现象](#2.1.2 内存问题的现象)
- [2.1.3 性能内存测试案例](#2.1.3 性能内存测试案例)
- [2.2 CPU](#2.2 CPU)
-
- [2.2.1 CPU监控指标](#2.2.1 CPU监控指标)
- [2.2.2 CPU问题现象](#2.2.2 CPU问题现象)
- [2.2.3 性能CPU测试案例](#2.2.3 性能CPU测试案例)
- [2.3 流量](#2.3 流量)
-
- [2.3.1 流量监控的指标](#2.3.1 流量监控的指标)
- [2.3.2 流量优化方法](#2.3.2 流量优化方法)
- [2.3.3 性能流量测试案例](#2.3.3 性能流量测试案例)
- [2.4 电量](#2.4 电量)
-
- [2.4.1 电量介绍(真机)](#2.4.1 电量介绍(真机))
- [2.4.2 电量监控方法](#2.4.2 电量监控方法)
- [2.4.3 性能电量测试案例](#2.4.3 性能电量测试案例)
- [2.5 启动速度](#2.5 启动速度)
-
- [2.5.1 启动速度介绍](#2.5.1 启动速度介绍)
- [2.5.2 启动速度测试方法](#2.5.2 启动速度测试方法)
- [2.6 流畅度](#2.6 流畅度)
-
- [2.6.1 流畅度的监控指标](#2.6.1 流畅度的监控指标)
- [2.6.2 性能流畅度测试案例](#2.6.2 性能流畅度测试案例)
- [2.7 稳定性](#2.7 稳定性)
- 三、稳定性测试
-
- [3.1 Monkey工具介绍](#3.1 Monkey工具介绍)
- [3.2 Monkey命令](#3.2 Monkey命令)
- [3.3 Monkey命令参数扩展](#3.3 Monkey命令参数扩展)
- 四、扩展
-
- [4.1 何为性能测试?](#4.1 何为性能测试?)
- [4.2 app性能测试分类](#4.2 app性能测试分类)
- [4.3 查看日志](#4.3 查看日志)
一、性能测试工具-SoloPi
SoloPi:是一个无线化、非侵入式的 Android 自动化工具,具备录制回放、性能测试等功能。
作用如下:
基础性能测试:能够记录待测应用的各项指标,可以在悬浮窗中观察实时更新的数据,也可以对性能数据进行录制,在录制结束后查看图
表;同时,还支持性能加压,能够对CPU、内存与网络环境进行限制,复现应用在性能较差、网络环境不佳场景下的表现。
录制回放:通过SoloPi执行用例步骤,能够将用户的操作记录下来,支持在各个设备上进行回放,这一切都能够在手机上独立完成。
一机多控:支持通过操作一台主机设备来控制多台从机设备,不需要在各个设备上分别进行重复冗杂的兼容性测试,能够极大提升兼容性测试的效率。
yacas
注意事项:
------可独立安装的 SoloPi(APK,IOS无该版本),像普通APP一样安装。
------SoloPi使用时,需要申请悬浮窗权限,adb权限,读写权限

二、APP常用的性能指标
yacas
性能测试关注点:
------APP使用时对CPU、内存的占用情况;
------APP使用时是否流畅等
------APP使用时,电量流量的消耗情况;
------APP的启动时间是否过长;
------APP是否能长时间稳定运行
2.1 内存
2.1.1 内存监控指标
每个程序运行时都需要将代码和数据放入内存中,内存不足则程序无法正常运行。
内存的两个监控指标:PSS和Private dirty
1、Private dirty(私有内存):进程独占内存,也就是进程销毁时可以回收的内存容量。
2、PSS(实际使用内存):将跨进程共享页也加入进来, 进行按比例计算PSS。这样能够比较准确的表示进程占用的实际物理内存。

2.1.2 内存问题的现象
- 内存泄漏(memory leak):内存不释放
- 内存溢出(out of memory):申请没内存

2.1.3 性能内存测试案例
需求:打开TP商城单商户,进入首页-我要拼团,上下滑动动态2分钟,内存指标正常。
测试方法:
1、打开SoloPi工具,配置内存监控
2、进入TP商城单商户APP,操作上述业务,观察运行时的内存指标
3、查看内存运行结果
- 检查程序实际使用的内存PSS是否持续增长
- 检查程序是否出现crash

2.2 CPU

2.2.1 CPU监控指标
CPU的两个监控指标:全局占用CPU和应用进程CPU
1、全局占用CPU:整机的CPU使用水平,即当前手机的CPU整体使用率。
计算公式:
- 在 Linux 系统下,CPU 利用率分为用户态、系统态和空闲态。
- 用户态:表示 CPU 处于应用程序执行的时间
- 系统态:表示系统内核执行的时间
- 空闲态:表示空闲系统进程执行的时间。
- CPU 使用率 = CPU 执行非系统空闲进程使用量 / CPU 总的使用量
2、应用进程CPU:表示自开机以来,应用程序消耗的CPU时间片的总数
2.2.2 CPU问题现象
CPU出现问题产生的影响:
- CPU使用长时间处于90%以上
- 手机发热、耗电量增加
- 反应变慢、引起 应用程序无响应ANR(Application Not Responding)
yacas
ANR:xxxxx错误原因
2.2.3 性能CPU测试案例
需求:打开TP商城单商户,进入首页-我要拼团,上下滑动动态2分钟,CPU指标正常。
测试方法:
1、打开SoloPi工具,勾选CPU监控指标
2、进入TP商城单商户APP,操作上述业务,观察运行时的CPU指标
3、查看CPU运行结果
- 检查APP运行时CPU是否有快速飙升
- 检查APP运行时CPU是否长时间处于90%以上
4、保存CPU详细数据后,可以查看CPU详细的数据统计。
2.3 流量

2.3.1 流量监控的指标
流量监控指标:网络
- 网络:即网络流量,可以自动统计APP每秒上行和下行的报文大小
yacas
常用的流量测试方法:统计测试法。
------利用工具获取应用程序收发的数据报文,统计出对应的流量
2.3.2 流量优化方法
面试题:打开页面速度过慢,如何优化?
- 数据的压缩
- 不同数据格式的采用
- 控制访问的频次
- 只获取必要的数据
- 缓存机制
- 针对不同的网络类型设置不同的访问策略
2.3.3 性能流量测试案例
需求:打开TP商城单商户,进入首页-我要拼团,上下滑动动态2分钟,获取消耗的网络流量。
测试方法:
1、打开SoloPi工具,勾选流量监控指标网络
2、进入TP商城单商户APP,操作上述业务,观察运行时的流量指标
3、查看流量统计结果
yacas
提示:在模拟器中无法统计电脑流量使用情况,看进程使用流量即可
2.4 电量
2.4.1 电量介绍(真机)
相对于PC来说,移动设备的电池电量是非常有限的,因此电量测试是app性能测试中比较重要的一项。
电量测试:
- 就是测试移动设备电量消耗快慢的一种测试方法。
- 一般是用平均电流来衡量电量消耗速度(电池生产厂家一般都采用mAh来标记电池容量大小,平均电流越小,说明设备使用时间就越长)
常见的耗电量大的场景:
- 定位,尤其是调用 GPS 定位。
- 网络传输,尤其是非 Wi-Fi 环境。
- 屏幕亮度。
- CPU 运算:复杂的运算逻辑、死循环等会直接导致CPU负载过高,会导致耗电。
- wake_locker(锁屏-解锁)时间和次数。
2.4.2 电量监控方法
1、常用的电量测试方法:
①系统自带接口
- 最新的IOS和Android系统内置的Setting里可以查看各个APP的电池消耗
- 该方案不能检测固定某一时间段内的电池精准消耗。
②硬件检测
- 通过硬件可以精准地获得应用的电量消耗(如: PowerMonitor 硬件设备)
- 该方案测试时需要拆机,成本太高比较麻烦。
③软件工具检测
- 通过第三方的软件来获取应用的电量消耗(如: AccuBattery、360省电王、SoloPi等)
- 该方案取决于第三方软件的计算准确性。
yacas
SoloPi工具提供了电量的监控指标:电池。
2、电量的测试结果分析:
我们可以根据不同的业务场景测试出对应的电量消耗数据,但是是否有问题需要对比分析,对比方法:
- 与基准数据对比。(基准数据来自于产品经理,或者以往数据积累)
- 横向对比,拉上竞品一起测(目前多数采用这种方法)
- 同样的网络、手机,相似的测试场景,最后对比我们的产品和竞品在耗电量方面的差距,给出优化建议。
2.4.3 性能电量测试案例
需求:打开TP商城单商户,进入首页-我要拼团,上下滑动动态2分钟,获取消耗的电量
测试方法:
1、打开SoloPi工具,勾选电量监控指标:电池。
2、进入TP商城单商户APP,操作上述业务,观察运行时的CPU指标。
3、保存电量详细数据后,可以查看电量详细的数据统计。
yacas
提示:模拟器没有电池,无法获取电量数据
2.5 启动速度
2.5.1 启动速度介绍
APP启动测试:测试从启动app到主页面显示的时间,打开一个app等待的时间过长时就会有一种较差的体验。
yacas
SoloPi指标:启动耗时计算
APP启动:分为冷启动,热启动。
- **冷启动:**app不在运行,启动app进程
- **热启动:**app已经在运行,将app从后台置于前台。或者:app不同页面的启动,我的页面,购物车页面的启动时间(很短时间或为0)
2.5.2 启动速度测试方法
shell
启动速度测试方法(Android):
------格式:adb shell am start -W 包名/启动名
------TP商城单商户包名/Activity名为:com.tpshop.malls/com.tpshop.malls.SplashActivity
该命令获取3个关键指标:
ThisTime:当前activity的时间。
TotalTime:应用的启动时间,包括创建进程、App初始化、 Activity初始化到界面显示。
WaitTime:前一个应用activity pause的时间+TotalTime
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
adb shell dumpsys window windows | grep usedAPP # 获取包名/启动名
注意事项:
- 热启动和冷启动的启动速度测试命令完全相同。
- 冷启动的时间一般大于热启动的时间。

2.6 流畅度
动画播放或图片切换的流畅性
2.6.1 流畅度的监控指标
流畅度的监控指标:帧率FPS
- 即Frames per second:GPU在一秒内绘制的帧数。(简单理解为一秒内呈现给用户的图片数)
- FPS值越高画面越流畅
流畅度问题产生的影响:
- 想要让大脑觉得动作是连续的,至少是每秒10-12帧的速度
- 想达到流畅的效果,至少需要每秒24帧
- 60帧每秒的流畅度是最佳的,我们的目标就是让程序的流畅度能接近60帧每秒
yacas
注意事项
------当页面多为静态时,FPS值很小是正常的
------页面数据多为动态加载时,FPS值比较大(建议在24帧以上)
2.6.2 性能流畅度测试案例
需求:打开TP商城单商户,进入首页-我要拼团,上下滑动动态2分钟(下滑1分钟,再上滑1分钟),记录FPS值。
测试方法:
1、打开SoloPi工具,勾选帧率;
2、进入TP商城单商户APP,操作上述 业务,观察运行时的流畅度指标;
3、查看流畅度运行结果;
4、保存流畅度详细数据后,可以查看 流畅度详细的数据统计。
2.7 稳定性
稳定性测试:通过长时间对应用程序进行无序操作,检验应用程序是否会出现异常。如闪退crash、无响应ANR等。
稳定性测试工具------Monkey:
- Monkey是一个命令行工具,是由安卓官方提供的。
- 测试人员可以通过Monkey来模拟用户的触摸 、点击 、滑动 以及系统按键等操作(操作事件都是随机的),从而实现对APP压力的测试和稳定性测试。
- 开发人员结合monkey 打印的日志和系统打印的日志,修改测试中出现的问题。
稳定性测试的时机:一般需要等产品稳定了,bug比较少的时候,再用monkey去测试待测试应用的稳定性。
三、稳定性测试
yacas
对本章2.7稳定性的详细补充。
3.1 Monkey工具介绍
1、什么是monkey
顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子在电脑面前,乱敲键盘在测试。
2、monkey作用
通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。
3、monkey异常情况分析
Monkey 测试出现错误后,一般的分析步骤 看Monkey的日志:
- 程序无响应的问题: 在日志中搜索 "ANR"
- 崩溃问题:在日志中搜索 "NullPointerException"
4、monkey环境
Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径 /system/framework/monkey.jar;

3.2 Monkey命令
shell
语法:adb shell monkey -p 包名 --v 模拟次数 > 路径/log.txt
参数:
-p:指定包名
-v:log详细程度(最高支持'-v -v -v'最详细
次数:要执行随机操作的次数
>:重定向(保存)日志
例如:
C:\Users\ggk>adb shell monkey -p com.android.browser -v 5000 >C:\Users\ggk\Desktop\log01.txt

3.3 Monkey命令参数扩展
shell
adb shell monkey -p com.android.browser --pct-touch 70 --pct-motion 30 -v 5000 > C:\Users\ggk\Desktop\log03.txt
参数:
-s:指定随机数,随机数相同,则每次执行操作都一样
-v:日志级别(正常)
-其它参数:调整乱抓区域事件

四、扩展
4.1 何为性能测试?
- 功能测试:验证软件功能是否正确实现(单用户)
- 性能测试:模拟多人使用软件,服务器的处理情况
4.2 app性能测试分类
- 专项性能:app是一款软件,安装在手机中,app对手机硬件资源的使用消耗(CPU、内存、流畅度、流量、电量)
- 稳定性测试:app是一款软件,是软件就会崩溃,闪退等问题出现(monkey工具测试稳定性)
- 服务器性能:100人使用app,服务器处理情况(接口性能)。
4.3 查看日志
-
测试人员为什么要学习Linux?
yacas原因:未来被测项目部署在Linux中。 1、搭建测试环境。 2、查看日志辅助测试。 -
查看那个日志文件?
yacas
日志类型(定位或排查错误):
1、Linux操作系统日志(安装项目报错、自动重启等原因)
2、应用服务器日志(Apache、Nginx等,①首先看错误原因,看不出错误原因事看②)
3、项目代码日志(②问开发)
4、数据库日志(③数据库日志)

-
查看日志命令?
bashtail -f xxx.log | grep "关键字" > ~/error.log --------------------------------------------------------------------------------------------------------------------------------------------------- 查看什么内容?(关键字:) error 500 Exception 异常 ANR Null leak(内存泄漏) out of(内存溢出) -
找到内容要做什么?
1、能分析则自己分析定位问题; 2、日志截图发给开发;
