Day06课堂笔记
目标
-
会APP类型项目的性能测试
-
会使用ADB命令对APP进行专项及性能测试
一、APP性能测试
1.APP性能测试介绍
-
通过工具或命令测试APP软件对于移动端硬件占用程度。
-
工具:
-
Android系统:solopi(开源)、GT、PerfDog(收费)
-
iOS系统:Xcode开发者工具
-
harmony next系统:DevEco Studio NEXT Developer、DevEco Testing Developer
-
-
命令:
-
Android:adb命令
-
-
2.APP性能指标
2.1 内存测试
-
内存异常现象:闪退(crash)、内存占比超80%
-
问题:内存泄露、内存溢出
-
-
使用APP,通过solopi的内存指标监控值
-
空间单位换算进率
1GB=1024MB、1MB=1024KB、1KB=1024B
-
模拟器总内存查看:设置中心--> 性能 --> 性能配置 【默认显示6GB】,总内存:6X1024MB=6144MB
-
获取图表数据,看平均值(MB/s)
-
计算:平均值/总内存大小 *100% < 80% 【表示当前APP内存指标达标】
如下图测试后内存占用率: (87.16/6144)*100% = 1.4% 结论:远远小于80%预期值,同时也没有出现内存泄露问题,当前APP内存指标达标,测试通过。
-
2.2 CPU测试
-
异常现象:
-
CPU占比超高:超过80%
-
设备发热、耗电量大
-
程序运行慢、卡,程序出现ANR(无响应)
-
-
直接通过solopi查看运行APP之后CPU占比平均值,不超过80%达标
2.3 流量测试
-
原则:希望APP运行过程中占用流量越少越好
-
指标达标依据:和同行APP或者和自己过去版本比较是否有改进
-
流量优化策略
① 数据进行压缩(减少流量)
② 采用不同数据格式(减少流量)
③ 控制访问的频次
④ 运用缓存机制(主要文件缓存本地,减少实施获取)
⑤ 设置访问策略进行请求后台(WiFi网络、移动网络数据量变化)
2.4 电量测试
-
介绍:APP使用时,对电池电量的平均消耗程度
-
原则:APP使用耗电量越少越好
-
指标达标依据:和同行(竞品)APP或者和自己过去版本比(运营数据)是否有改进
-
电量优化策略
-
APP定位仅使用时开启
-
网络传输需要时传输(而非后台实施传输)
-
屏幕亮度(根据需要自动调节)
-
尽量不频繁唤醒屏幕/频繁的锁屏解锁
-
看一段时间内电量耗费程度(mW)
-
-
-
电量测试:需要通过真机测试,模拟器不支持(模拟器没有电池)
2.5 流畅度测试
-
介绍:运行画面是否流畅(无卡顿/失真等)【主要针对游戏类、视频类APP】
-
原则:APP运行越流畅越好,需要通过FPS(24帧以上)体现,数值越大越流畅(FPS:60帧最佳)
-
普通APP:静态页面较多,FPS数值低正常
特定APP:动态页面较多(游戏类、视频类等)FPS数值最少24帧
2.6 启动速度测试
APP响应快,用户的体验更好
-
介绍:从启动app到主页面加载完成的速度
-
分类
-
冷启动:启动APP进程(进程未运行到运行)
-
热启动:APP从后台切换到前台(进程运行中,页面从后台转前台)
-
-
原则:启动速度越快越好
-
指标达标依据:和同行(竞品)APP或者和自己过去版本比(运营数据)是否有改
-
# 冷启动tpshopAPP时间大约为:6s左右 # 热启动tpshopAPP时间大约为:2s左右 注意:这里面有误差(有人操作占用时间)
2.7 稳定性测试
-
介绍:APP持久运行不出现异常问题【无:crash、ANR、卡顿、崩溃等】
-
测试方式
-
命令行工具:Android系统APP通过Android自带的monkey工具测试
-
作用:模拟用户进行随机操作(触摸屏幕、滑动、 按键等)
-
命令格式:
adb shell monkey -p 包名 -v 次数 > 日志文件.log
-
包名:任意APP唯一标记(类似于人的身份证号),一般按域名倒序命名【如:com.xxx.xxx】
-
次数:模拟用户操作APP的次数(事件),一般是百万次数据量
-
参数-v:表示日志详细程度。-v -v -v 最详细
-
-
测试结果:通过检查日志是否存在关键词【ANR,timeout,Exception,out leak,error】,存在日志发APP开发并进一步确认是否是bug。
-
-
稳定性测试总结
面试场景题:
-
APP稳定性测试目的是啥?—— 检查APP长时间运行是否出现【ANR、crash、timeout】
-
如何排查是否出现稳定性的问题?—— monkey运行后的日志中搜索关键词(ctrl+f)【ANR,timeout,Exception,out leak,error】,需要提交日志信息和Android开发确定是否是bug
-
一般一个APP稳定性测试多少次?—— 一般要求百万次以上(大约8小时左右),持续三轮以上。通过添加延迟参数
--throttle 延迟毫秒
-
如何确保monkey执行时,出现异常后,还能继续完成后续次数?—— 增加忽略闪退、忽略超时,让操作次数全部执行完毕
--ignore-crashes --ignore-timeouts
-
二、adb命令
# 介绍adb命令原因 1.命令使得测试更高效 2.应对面试 3.解决工具的能力边界 4.工具的操作本质还是调用命令
1.ADB介绍
-
ADB(Android Debug Bridge):Android调试桥,Android软件测试开发工作者常用的调试工具
-
应用场景:安装卸载软件、管理安卓系统软件、启动测试、抓取操作日志等【APP专项+稳定性】
-
ADB环境:
-
下载解压软件包
-
配置环境变量
作用:让软件/程序在任意路径下都能够启动运行(配置环境变量)
构成:三部分
-
adb 客户端
-
adb 服务端
-
adb daemon(系统自带守护程序)
注意:
-
daemon程序在Android手机/模拟器中自带
-
还可以连接真机(Android手机--用数据线,手机需要开启开发者模式)
-
-
2.ADB常用命令
-
连接设备及状态检查
# 检查接入的设备 adb devices # 接入设备状态不正常(offline) # 1.重启模拟器/手机 # 2.重启ADB服务 adb kill-server adb start-server # 连接设备 adb connect IP:端口
-
adb安装卸载APP
场景:测试Android设备过多,建议使用adb命令安装更高效
面试:
-
adb安装APP软件和卸载APP软件有啥区别?
-
关键不一样,安装install,卸载uninstall
-
安装和卸载跟的内容不一样,卸载后跟包名
-
-
安装:
adb install apk路径
-
卸载:
adb uninstall 包名
-
-
查看安装的APP软件包
-
查看第三方软件包:
adb shell pm list packages -3
-
查看正在打开软件包:
-
windows:
adb shell dumpsys window | findstr mCurrentFocus
-
mac/Linux:
adb shell dumpsys window | grep mCurrentFocus
-
-
-
app的启动和停用
场景:模拟人启动/停用APP
注意:
-
启动:需要知道包名和页面名(注意是APP的启动页,不是进入的首页)
-
停用:只需要知道包名即可
-
启动:
adb shell am start 包名/页面名
-
停用:
adb shell am force-stop 包名
-
-
模拟APP启动测试
-
启动:
adb shell am start -W 包名/页面名
-
-W:显示启动时间,主要看:TotalTime
-
-
-
查看APP端日志
面试场景:
-
针对APP类型项目,测试过程中出现了不可复现的bug时,最好提前通过adb logcat打开日志并记录
-
最好将日志重定向到指定的文件中,通过搜索关键词查询时间段/日志内容,提交开发进行进一步确认是否是bug
-
日志内容包含:操作系统的日志和APP应用的日志
-
命令格式:
adb logcat > 日志文件名.log
-
注意:强制结束用
ctrl+c
-
-
文件上传下载
场景:如何将电脑文件传到手机/模拟器上;或者把手机/模拟器文件传到电脑上
注意:下载文件到电脑时,需要指定文件夹,否则可能会报错
-
上传:电脑文件上传手机
adb push 电脑路径 手机路径
-
下载:手机文件下载电脑
adb pull 手机路径 电脑路径
-
-
内存查看
场景:获取正在运行的app占用内存比例
-
查看格式:
adb shell dumpsys meminfo 包名
-
如果不写包名:能看到设备总内存【Total RAM】
-
带包名:能看到当前app实际使用的内存(total pss)
-
计算:当前app占用内存% = Total PSS/总内存 *100%
如下截图: tpshopapp内存占比= Total PSS / Total RAM = 82069/6093056 * 100% = 1.3%
-
-
-
查看CPU信息
场景:获取正在运行的app占用CPU比例
-
查看格式:
adb shell top
-
说明:能够动态实时查看CPU及内存占比
-
Day06-APP补充
目标
-
知道项目开发模式(互联网+)
-
能说出项目的发布方式(互联网+)
一、ADB命令
# 介绍adb命令原因 1.命令使得测试更高效 2.解决工具解决不了的问题(工具操作Android本质还是调用adb命令)
1.ADB命令如何学习
命令作用:提效+解决工具解决不了问题
方法:
啥场景下用?(比如:批量安装APP、查询APP占用内存情况等)
怎么用?(以练习方式记忆,先模仿敲,再多重复多次记忆)
2.ADB命令记哪些
-
XMind中优先级最高的(其他的可以先放一放,后续面试前复习时再记忆)
二、项目发布(互联网+)
-
敏捷开发
理念:小步快跑(大项目拆分小块,不同敏捷小组同步进行实施)
迭代周期:一般2周(10个工作日)
-
三种角色
-
PO、SM、DT
-
-
五种会议
-
需求决策会(立项)
-
需求计划/评审会议
-
每日立会(15分钟左右)
-
迭代发布会
-
迭代回顾会
-
-
-
(服务器)上线前的发布策略:灰度发布
-
测试环境:
-
本地测试环境
-
预发布测试环境(测试团队完成整个系统测试后,准备上线前的最后一次测试)
-
-
正式环境:(用户使用)
面试题:
-
如何跟进项目的上线过程?
-
项目上线的流程是啥?
-
策略:灰度发布(预发布环境测试之后的版本发布上线的一种策略)
前提:一般项目中正式环境的服务器是一台还是多台?--> 多台 1.先下线一部分服务器,更新新版本,然后上线测试 2.同时将未更新的另一部分服务器下线 3.测试已经上线后的新服务器(上线测试:新功能要测试+原有业务功能正常),测试需要提前上线使用的测试用例(选择正向优先级最高的)。 4.如果测试没有问题,将下线的另一部分服务器更新后完成上线(再进行一次全部的上线测试) 5.如果第三步测试不通过,将新上线的服务器立即下线,然后恢复已下线旧服务器【回滚】 6.排查问题【本次上线之后的问题】
-
-
APP发布
测试要求:发布之后,需要下载安装进行基本功能验证
-
Android版本:apk
-
iOS版本:ipa
-
-