【功能测试】4_APP项目 _APP性能测试

文章目录

  • 一、性能测试工具-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、数据库日志(③数据库日志)
  • 查看日志命令?

    bash 复制代码
    tail -f xxx.log | grep "关键字" > ~/error.log
    
    ---------------------------------------------------------------------------------------------------------------------------------------------------
    查看什么内容?(关键字:)
    error
    500
    Exception 异常
    ANR  
    Null
    leak(内存泄漏)
    out of(内存溢出)
  • 找到内容要做什么?

    复制代码
    1、能分析则自己分析定位问题;
    2、日志截图发给开发;
相关推荐
软件测试曦曦15 小时前
使用Python接口自动化测试post请求和get请求,获取请求返回值
开发语言·自动化测试·软件测试·python·功能测试·程序人生·职场和发展
软件测试媛19 小时前
软件测试工程师面试题大全(附答案)
功能测试·职场和发展·测试用例
2401_861277551 天前
大数据测试工具一般有哪些
大数据·功能测试·集成测试
云半S一1 天前
春招准备之测试基础理论篇
经验分享·笔记·功能测试·测试覆盖率
少云清1 天前
【功能测试】2_APP项目 _APP开发模型以及发布策略
功能测试·开发模型
2401_861277554 天前
适合使用判定表设计测试用例的条件,如何使用判定表构造测试用例,举例说明
功能测试·单元测试·测试用例
少云清4 天前
【功能测试】6_Web端抓包 _Fiddler抓包工具的应用
前端·功能测试·fiddler
少云清5 天前
【功能测试】3_Web项目 _单功能模块测试
功能测试·模块测试
少云清5 天前
【功能测试】4_Web端抓包 _网络知识
网络·功能测试·抓包