一、性能测试工具-SoloPi
SoloPi:是一个无线化、非侵入式的 Android 自动化工具,具备录制回放、性能测试等功能。
作用如下:
基础性能测试:能够记录待测应用的各项指标,可以在悬浮窗中观察实时更新的数据,也可以对性能数据进行录制,在录制结束后查看图
表;同时,还支持性能加压,能够对CPU、内存与网络环境进行限制,复现应用在性能较差、网络环境不佳场景下的表现。
录制回放:通过SoloPi执行用例步骤,能够将用户的操作记录下来,支持在各个设备上进行回放,这一切都能够在手机上独立完成。
一机多控:支持通过操作一台主机设备来控制多台从机设备,不需要在各个设备上分别进行重复冗杂的兼容性测试,能够极大提升兼容性测试的效率。
注意事项:
——可独立安装的 SoloPi(APK,IOS无该版本),像普通APP一样安装。
——SoloPi使用时,需要申请悬浮窗权限,adb权限,读写权限

二、APP常用的性能指标
性能测试关注点:
——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)
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每秒上行和下行的报文大小
常用的流量测试方法:统计测试法。
——利用工具获取应用程序收发的数据报文,统计出对应的流量
2.3.2 流量优化方法
面试题:打开页面速度过慢,如何优化?
- 数据的压缩
- 不同数据格式的采用
- 控制访问的频次
- 只获取必要的数据
- 缓存机制
- 针对不同的网络类型设置不同的访问策略
2.3.3 性能流量测试案例
需求:打开TP商城单商户,进入首页-我要拼团,上下滑动动态2分钟,获取消耗的网络流量。
测试方法:
1、打开SoloPi工具,勾选流量监控指标网络
2、进入TP商城单商户APP,操作上述业务,观察运行时的流量指标
3、查看流量统计结果
提示:在模拟器中无法统计电脑流量使用情况,看进程使用流量即可
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等)
- 该方案取决于第三方软件的计算准确性。
SoloPi工具提供了电量的监控指标:电池。
2、电量的测试结果分析:
我们可以根据不同的业务场景测试出对应的电量消耗数据,但是是否有问题需要对比分析,对比方法:
- 与基准数据对比。(基准数据来自于产品经理,或者以往数据积累)
- 横向对比,拉上竞品一起测(目前多数采用这种方法)
- 同样的网络、手机,相似的测试场景,最后对比我们的产品和竞品在耗电量方面的差距,给出优化建议。
2.4.3 性能电量测试案例
需求:打开TP商城单商户,进入首页-我要拼团,上下滑动动态2分钟,获取消耗的电量
测试方法:
1、打开SoloPi工具,勾选电量监控指标:电池。
2、进入TP商城单商户APP,操作上述业务,观察运行时的CPU指标。
3、保存电量详细数据后,可以查看电量详细的数据统计。
提示:模拟器没有电池,无法获取电量数据
2.5 启动速度
2.5.1 启动速度介绍
APP启动测试:测试从启动app到主页面显示的时间,打开一个app等待的时间过长时就会有一种较差的体验。
SoloPi指标:启动耗时计算
APP启动:分为冷启动,热启动。
- 冷启动:app不在运行,启动app进程
- 热启动:app已经在运行,将app从后台置于前台。或者:app不同页面的启动,我的页面,购物车页面的启动时间(很短时间或为0)
2.5.2 启动速度测试方法
启动速度测试方法(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帧每秒
注意事项
——当页面多为静态时,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去测试待测试应用的稳定性。
三、稳定性测试
对本章2.7稳定性的详细补充。
3.1 Monkey工具介绍
1、什么是monkey
顾名思义,Monkey就是猴子, Monkey测试,就像一只猴子在电脑面前,乱敲键盘在测试。
android系统自带一种测试压力的小工具,主要测试系统或应用稳定性。
2、monkey测什么?
测试是否崩溃、闪退、死机。
3、monkey作用
通过Monkey程序模拟用户触摸屏幕、滑动Trackball、 按键等操作来对设备上的程序进行压力测试,检测程序多久的时间会发生异常。
4、monkey安装
不需要安装,Monkey程序由Android系统自带,使用Java语言写成,在Android文件系统中的存放路径 /system/framework/monkey.jar;
注:在文件管理器中搜索 monkey
5、启动方式:
- 方式1:可以通过PC机CMD窗口中执行: adb shell monkey {+命令参数}来进行Monkey测试;
- 方式2:在PC上adb shell进入Android系统,通过执行monkey {+命令参数}来进行Monkey测试;

3.2 Monkey命令
语法:adb shell monkey -p 包名 –v 模拟次数 > 路径/log.txt
参数:
-p:指定包名
-v:log详细程度(最高支持'-v -v -v'最详细),具体如下:
=================================================
-v︰缺省值,仅提供启动提示、测试完成和最终结果等少量信息。
-v -v∶提供较为详细的日志,包括每个发送到Activity的事件信息。
-v -v -v:最详细的日志,包括了测试中选中/未选中的Activity信息。
次数:要执行随机操作的次数
>:重定向(保存)日志
例如:
C:\Users\ggk>adb shell monkey -p com.android.browser -v 5000 >C:\Users\ggk\Desktop\log01.txt

3.3 Monkey命令参数扩展
adb shell monkey -p com.android.browser --pct-touch 70 --pct-motion 30 -v 5000 > C:\Users\ggk\Desktop\log03.txt
参数:
-s(随机数种子)用于指定伪随机数生成器的seed值,如果seed相同,则两次Monkey测试所产生的事件序列也相同
-v:日志级别(正常)
-其它参数:调整乱抓区域事件

3.4 monkey测试执行和日志分析
1、monkey执行
- 一般在功能测试完毕之后
- 执行方式:
①多次小批量事件测试 ≤10W 次事件
②大批量随机性测试
2、正常情况
如果Monkey测试顺利执行完成,在log的最后,会打印出当前执行事件的次数和所花费的时间; //Monkey finished代表执行完成
3、异常情况
执行过程中出现无响应、崩溃或异常退出后,打开日志进行分析:
- ①程序无响应的问题:在日志中搜索“ANR”(可能仅仅是因为卡)
- ②崩溃问题:在日志中搜索“Exception”(如果出现空指针,NullPointerException)肯定是有bug Monkey执行中断,在log最后也能看到当前执行次数。
四、扩展
4.1 何为性能测试?
- 功能测试:验证软件功能是否正确实现(单用户)
- 性能测试:模拟多人使用软件,服务器的处理情况
4.2 app性能测试分类
- 专项性能:app是一款软件,安装在手机中,app对手机硬件资源的使用消耗(CPU、内存、流畅度、流量、电量)
- 稳定性测试:app是一款软件,是软件就会崩溃,闪退等问题出现(monkey工具测试稳定性)
- 服务器性能:100人使用app,服务器处理情况(接口性能)。
4.3 查看日志
-
测试人员为什么要学习Linux?
原因:未来被测项目部署在Linux中。 1、搭建测试环境。 2、查看日志辅助测试。 -
查看那个日志文件?
日志类型(定位或排查错误):
1、Linux操作系统日志(安装项目报错、自动重启等原因)
2、应用服务器日志(Apache、Nginx等,①首先看错误原因,看不出错误原因事看②)
3、项目代码日志(②问开发)
4、数据库日志(③数据库日志)

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

&spm=1001.2101.3001.5002&articleId=155449264&d=1&t=3&u=ab74a104d5ba47889e15e69e869e27ac)

被折叠的 条评论
为什么被折叠?



