2020-06-30app功能测试整理

【Android与ios区别】
两者运行机制不同:IOS采用的是沙盒运行机制,安卓采用的是虚拟机运行机制。
两者后台制度不同:IOS中任何第三方程序都不能在后台运行;安卓中任何程序都能在后台运行,直到没有内存才会关闭。
IOS中用于UI指令权限最高,安卓中数据处理指令权限最高。
【Android四大组件】
Activity:描述UI,并且处理用户与机器屏幕的交互。
BroadcastReceiver广播接收器:处理Android操作系统和应用程序之间的通信。
ContentProvider内容提供者:处理数据和数据库管理方面的问题。
Service服务
【app性能测试】
普遍的apk性能测试,主要是以下七类
1、响应
2、内存
3、cpu
4、FPS (app使用的流畅度)
5、GPU过度渲染
6、耗电
7、耗流

一、响应
软件的响应时间和响应速度直接影响到用户的体验度,如果一个软件,迟迟加载不出来,会直接影响到软件的日活、留存。因此对于一个软件,对响应速度测试是必不可少的。
主要测试点:
1、冷启动:首次启动app的时间间隔(只是启动时间,不包括页面加载)
2、热启动:非首次启动app的时间间隔(只是启动时间,不包括页面加载)
3、完全启动:从启动到首页完全加载出来的时间间隔
4、有网启动:从发起跳转,到页面完全加载出来的时间间隔
5、无网启动:从发起跳转,到页面完全加载出来的时间间隔
(在项目中,主要测试关注点是冷启动,热启动)测试方法:
1、使用adb命令
1) 冷启动

adb shell am start -W packageName/ActivityName(绝对路径,首个Activity)
image.png
含义:
ThisTime: 该Activity的启动耗时;
TotalTime: 应用自身启动耗时, ThisTime+应用application等资源启动时间;
WaitTime: 系统启动应用耗时, TotalTime+系统资源启动时间
2)热启动:按back按键后再启动adb命令
image.png

测试标准:冷启动时间不超过1.5s, 热启动不超过1s
3)完全启动,无网启动,有网启动都可以通过charles抓包来获取启动的时间
image.png

限制网络情况需要用到charles的一个功能: Throttle Setting
image.png
2、使用AndroidStudio的Android Monitor,查看手机日志系统输出

Android Monitor总共有5大模块:logcat, memory, cpu, network,GPU

我们可以通过logcat获取应用的响应时间(如何使用,内存中有介绍)
image.png
二、内存
在Android系统中,每个APP进程除了同其他进程共享内存(shared dirty)外,还独用私有内存(private dirty),通常我们使用PSS(私有内存+比例分配共享内存)来衡量一个APP的内存开销。由于一个移动设备的内存是固定的,如果内存消耗过大就会造成应用卡顿或者闪退,需要对内存进行测试。正常情况下,应用不应占用过多的内存资源,且能够及时释放内存,保证整个应用内的稳定性和流畅性。

测试点:
1、空闲状态:切换至后台或者启动后不做任何操作,消耗内存最少。
2、中强度状态:时间偏长的操作应用。
3、高强度状态:高强度使用应用,可以跑monkey来测试(通常用来测试内存泄漏)。
** 内存泄漏:指应用里的内存一直没有释放,内存一直增加 ,系统内存一直减少 **

测试方法:
1、使用adb命令: adb shell dumpsys meminfo packageName

获取应用包名和Actively:
adb shell dumpsys window | findstr mCurrentFocus

image.png

测试关注点:
1、Native heap alloc
2、Dalvik heap alloc
3、PSS


image.png

2、使用性能测试工具:Emmagee(只支持Android)
Emmagee是网易开发的一款测安卓应用性能的测试apk
1、安装Emmagee.apk,打开。
2、选择需要测试性能的应用启动
3、被测应用界面会展示内存、CPU、电流、流量等数据
4、stop Test之后,在本地SD卡中保存一份性能测试数据,可以从里面获取内存信息。
5、可以通过execl将数据转化成图表,更直观的查看各性能指标的数据。
(保存地址:/sdcard/Emmagee/******* .csv文件)
生成的csv文件:


image.png
原理:Emmagee是使用Android自身提供的ActivityManager.MemoryInfo()方法获得
可查看: cpu 内存 流量 电量 FPS(流畅度)是一个相对比较好的选择
但是只支持安卓6.0及以下的版本

除了Emmagee,还有腾讯提供的一个同样测试性能的app, GT。使用与Emmagee大体一致,但是GT除了支持Android,同样支持ios。GT相对于Emmagee功能也更强大:性能测试(CPU、内存、流量、电量、帧率/流畅度等等)、开发日志的查看、Crash日志查看、网络数据包的抓取、APP内部参数的调试、真机代码耗时统计。3、使用AndroidStudio 自带 CPU 和内存检测功能 – Android Monitor
(首先要下载并安装好Android Studio)

Android Monitor 可以检测CPU 和内存,能够绘制出变化图,可以直观明了的看出内存和cpu的变化曲线。
image.png
Android Monitor ,有5个模块 :logcat、Memory、CPU、Network、GPU。
image.png

关注点:

1、退出某个页面后,内存是否有回落。
如果没有及时回落,且程序自动GC或者手动GC,那便可确认有问题。
2、进行某个操作后,内存是否增长过快。
如果增长过快,也有可能存在风险,需重复操作确认。
三、CPU
CPU测试,主要关注的是cpu的占用率。很多时候,我们玩手机时,会出现发热发烫,那是因为CPU使用率过高,CPU过于繁忙,会使整个手机无法响应用户,整体性能降低,用户体验就会很差,也容易引起ANR(application not responding, 主线程(UI线程)如果在规定时内没有处理完相应工作,就会出现ANR)等等一系列问题。

测试点:
1).在空闲时间(切换至后台)的消耗,基本没大应用使用cpu
2).在运行一些应用的情况下,cpu已占50%的情况下,观察应用程序占用cpu的情况
3).在高负荷的情况下看CPU的表现(cpu占用应是在80%以上)

具体场景:
1、应用空闲状态运行监测CPU占用率
空闲状态:应用按Home键退到后台,不再占用系统的状态(通常是灭屏半分钟后)
CPU占用率=0%

2、应用中等规格运行监测CPU占用率
中等规格:模拟用户最常见的使用场景
CPU占用率≤30%

3、应用满规格长时间正常运行监测CPU占用率
Monkey测试
CPU占用率≤30%

4、应用正常运行期间监测CPU占用率峰值
应用正常运行:打开应用进行基本操作
CPU占用率≤50%
测试方法:
1、使用adb命令:
1) top -m -s cpu |grep packageName


image.png

top cpu 参数:
-m 显示最大数
-s 按指定行排序
-t 显示进程名称
-n 在退出前刷新几次
-d 刷新间隔

四、FPS (应用的使用流畅度)

FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数愈多,所显示的动作就会愈流畅。
´一般来说,Android设备的屏幕刷新率为60帧/s,要保持画面流畅不卡顿,要求每一帧的时间不超过1000/60=16.6ms,这就是16ms的黄金准则,如果中间的某些帧的渲染时间超过16ms,就会导致这段时间的画面发生了跳帧,因此原本流畅的画面变发生了卡顿。

测试方法:
1、adb命令
1)打开手机:开发者选项—>profile GPU rendering —> in adb shell dumpsys gfxinfo

  1. 操作要测试的apk
  2. cmd窗口输入命令: adb shell dumpsys gfxinfo packageName
  3. 得到一个矩阵数据,计算矩阵中帧率大于16的点所占比例,即为卡顿比
    image.png
    image.png

    含义:
    Draw: 表示在Java中创建显示列表部分中,OnDraw()方法占用的时间。
    Process:表示渲染引擎执行显示列表所花的时间,view越多,时间就越长。
    Execute:表示把一帧数据发送到屏幕上排版显示实际花费的时间。
    Draw + Process + Execute = 完整显示一帧 ,这个时间要小于16ms才能保存每秒60帧。

    5)通过execl进行表格处理可以直观的查看软件的流畅度
    image.png

    2、除了使用adb shell, 还可以直接使用开发者选项自带的图表
    1)打开手机:开发者选项—>profile GPU rendering —> on screen as bars
  4. 操作被测的软件
    3)界面会显示如下的一个统计数据表


    image.png

五、GPU渲染

GPU渲染是指在一个像素点上绘制多次(超过一次):显示一个什么都没有做的activity界面算作画了1层,给activity加一个背景是第2层,在上面放了一个Text View(有背景的Text View)是第3层,Text View显示文本就是第4层仅仅只是为了显示一个文本,却在同一个像素点绘制了四次,这是一定要优化的。过度绘制对动画性能的影响是极其严重的,如果你想要流畅的动画效果,那么一定不能忽视过度绘制。

测试方法:
1、手机自动的Debug GPU overdraw
1)打开手机—>设置—>开发者选项—>Debug GPU overdraw—>show overdraw areas
2)打开被测的应用


image.png

测试指标:
1、控制过渡绘制为2x
2、不允许存在4x过渡绘制
3、不允许存在面积超过屏幕1/4的3x过渡绘制
六、耗电量
测试应用对电量的消耗前需要对手机本身的电量消耗有个大概了解,测试前先看规定时间内手机正常待机下(重启后待机)电量消耗为多少。然后再启动待测试APP看看消耗的电量增加了多少取差值。

测试点:
  测试手机安装目标APK前后待机功耗无明显差异;
  常见使用场景中能够正常进入待机,待机电流在正常范围内;
  长时间连续使用应用无异常耗电现象。

测试方法 :(先关闭所有的应用,再打开被测app)
1、使用第三方测试工具:Emmagee、GT等,只需要测试的电流静置一晚,待机电流在正常范围内即可。一般是被测应用对比待机电流<=2mA。
2、使用adb命令
adb shell dumpsys batterystats |grep packageName
【常见的几种异常】
NullPointerException 空指针引用异常
ClassCastException 类型强制转换异常。
IllegalArgumentException 传递非法参数异常。
ArithmeticException 算术运算异常
IndexOutOfBoundsException 下标越界异常
NegativeArraySizeException 创建一个大小为负数的数组错误异常
NumberFormatException 数字格式异常
SecurityException 安全异常
【查看crash】
安卓:cmd——adb logcat -v time>D:log.txt adb bugreport >E:\xx.txt
ios:ittools——工具箱——高级功能——崩溃日志
【异常原因】
1、网络异常引起的
2、app中访问网络的地方,组件中的ImageView没有正常的下载并显示到app页面上
3、app的sdk和手机系统不兼容
4、拍照/选择图片后闪退:1、手机内存小2、部分手机在使用相机拍照时存在横竖屏切换,可能导致应用重新调整生命周期
解决办法:在使用到拍照功能的activity设置:android:configChanges="orientation|keyboardHidden|screenSize"
5、版本问题:有些api在老版本中有,在新版本中没有,造成对象为空引起闪退
6、缓存垃圾:由于安卓系统的特性,如果长时间不清理垃圾文件,会导致越来越卡,也会出现闪退情况
7、权限问题:一般是AndroidManifest文件中忘记配置相关权限
8、页面布局问题,用LinearLayout布局时忘记指定orientation,出现了闪退
【monkey篇】
参数:
--help 输出monkey的命令行使用方法
-v 反馈信息级别
-s 生成相同的事件序列
-p 指定包名
-c 指定类别
--throttle 在事件之间插入固定延迟
--pct-touch 调整触摸事件的百分比
--hprof 生成内存快照文件
--ignore-crashes 忽略崩溃,异常
--ignore-timeouts 忽略超时
--kill-process-after-error停止错误进程
--monitor-native-crashes 监视并报告系统中本地代码的崩溃事件
--pct-motion 调整动作事件的百分比
--pct-pinchzoom 调整二指缩放事件的百分比
--pct-trackball 调整轨迹事件的百分比
--pct-rotation 调整屏幕旋转事件的百分比
--pct-nav 调整基本导航事件的百分比
--pct-majornav 调整主要导航事件的百分比
--pct-syskeys 调整系统按键事件百分比
--pct-appswitch 调整启动Activity的百分比
--pct-flip调整键盘事件的百分比
--pct-anyevent 调整其他类型事件的百分比
adb shell ps |grep monkey 查看进程id
adb shell kill pid 杀掉进程
adb shell dumpsys window |grep mCurrent 查看当前打开的包名
adb shell logcat -v time>log.txt 获取日志
adb shell dumpsys meminfo <进程名> 获取内存信息
adb shell top -n l |find "进程名" 获取cpu消耗信息
adb shell dumpsys battery 获取电量信息
adb shell dumpsys gfxinfo <进程名> 获取gpu信息
adb shell cat/proc/uid_stat/被测应用的uid>/tcp_rcv 获取流量信息
Adb shell am broadcast [options] <intent> 发送广播

app测试点汇总

  1. App测试工具

    工具会为你提供大量的数据和日志,有了这些数据,就能更方便的判断问题发生的原因。

    0.1 Android Monkey 压力测试

    0.2 Jmeter

  2. 功能测试

    1.1 根据产品需求文档编写测试用例,而进行测试。

  3. 兼容性测试

    2.1 android / ios 版本的兼容性;

    2.2 手机分辨率 兼容性;

    2.3 网络的兼容性:2G \ 3G \ 4G \ WIFI 、弱网下、断网时;

    2.4 app 跨版本的兼容性。

  4. 适配性测试

    3.1 手机不同分辨率支持:客户端支持的分辨率等。

    3.2 手机不同版本的支持,2.34.04.4等。

    在测试计划中:需要安排单独的时间用于android不同系统的兼容性测试,包括2.0以下版本和4.0以上等。

    3.3 手机不同厂家系统的支持,不同厂家会有不同android系统。

    例如:小米,华为等对市面上主流手机的支持。

    3.4 手机不同尺寸的支持: 3.5到5.0屏幕在UI显示有区别,要支持最大到最小。

  5. 安装、卸载测试

    4.1 生成apk文件,在真机上可以 安装、卸载。

    4.2 Android / ios 手机端通用安装工具。如:应用商店。

  6. 安装、卸载测试

    5.1 验证app能否正确安装、运行卸载,以及操作过程和操作前后对系统资源的占有情况

    5.2 升级后可以正常使用

    5.3 在线跨版本升级

  7. 性能测试

    6.1 压力测试

    6.2 电量、流量测试

    6.3 cpu、内存消耗

    6.4 app 启动时长

    6.5 crash率

    6.6 内存泄漏

  8. 网络测试

    7.1 外网测试,主要现实模拟客户使用网络环境,检验客户单程序在实际网络环境中使用情况及进行业务操作。

    7.2 外网测试,主要覆盖到 wifi \ 2G \ 3G \ 4G、net \ wap、电信 \ 移动 \ 联通、所有可能的组合进行测试

原则:

   1\. 尽可能全面覆盖用户的使用场景,测试用例中需要包含 不同网络排列组合 的各种可能。

   2\. 还有模拟信号被屏蔽时候。客户端的影响等。还有做外包场景测试,在高山、丘陵、火车上等特殊环境下进行全面测试

  1. 接口性测试

    8.1 client端 和 service端 的交互。

    8.2 client端的数据更新 和 service端的数据是否一致 。

    8.3 client端 更新时断开了。

    8.4 client端 更新时,service端挂了 。

  2. 业务逻辑测试

    9.1 业务逻辑测试,主要测试客户端业务能否正常完成。

    9.2 功能点测试,主要测试客户端功能点是否正常使用。

    9.3 关联性测试:主要测试 客户端 与 pc端 的交互,客户端处理完后,pc端与客户端数据一致。

  3. 异常测试

10.1 交互异常性测试:客户端作为手机特性测试,包括被打扰的情况;如来电、来短信、低电量测试等,还要注意手机端硬件上,如:待机,插拔数据线、耳机等操作不会影响客户端。

10.2 异常性测试:主要包含了断网、断电、服务器异常等情况下,客户端能否正常处理,保证数据正确性 。
  1. 客户端性能测试
11.1   基准性能测试:主要通过压 服务器端接口及客户端在不同网络环境下响应速度。 

11.2   大数量的测试:主要在特定环境下,客户端 一次性更新大量的数据 及人员列表时,客户端能否正常处理,分为三种情况:

       a. 客户端第一次使用,第一次就更新大量数据及人员列表。

       b. 客户端在平时更新中,更新大量的数据。

       c. 客户端已经在手机本地下载很多数据后,再次更新大量。

  1. 安全测试(权限)
12.1  软件权限:其中包括发送信息、拨打电话、链接网络、访问手机信息、联系人信息等等。

12.2  数据在本地的存储、传输等。

12.3  执行某些操作时,导致的输入有效性验证、授权、数据加密等方面。

12.4  基于各种通信协议或者行业标准来检查。

  1. UI测试
13.1  用户界面(菜单、对话框、窗口)等布局,风格是否满足用户需求,文字位置,描述是否正确,界面美观程度,文字图片组合是否合理。

13.2  用户友好性、人性化、便于操作等。

  1. 回归测试
14.1  bug修复后的回归测试,上线交付前进行全部的回归验证。

  1. 支付测试
15.1 支付结果的确认,数据库查询

15.2 请求报文是否加密

15.3 不同场景的支付

金额足够、金额不足、重复支付、无网支付、弱网支付、同账号多平台一起支付、余额宝微信信用卡等多种支付方式、不同支付方式的组合、密码正确/错误、支付上限等情况。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350