论app性能专项测试和监控 演讲者 金阳光(王劲松) 蔡植楷 职位 QA负责人 科长 来自 百度 努比亚
2、曾中兴努比亚测试开发、腾讯TEG过亿日活负责人 金阳光(王劲松)介绍 1、重庆邮电大学计算机硕士 2、曾中兴努比亚测试开发、腾讯TEG过亿日活负责人 3、现就职于北京百度质量部 4、录制Android & IOS自动化测试视频 自我介绍
摘要 一 案例背景 二 性能测试挑战 三 性能测试在项目流程中重要性 四 性能测试技术难点分析 五 性能测试建构图 六 性能测试落地部署 七 性能测试数据分析 八 曾经尝试 九 案例ROI分析 十 案例启示
优秀APP 一 案例背景 ? 优秀的性能对app很重要 a)提升用户体验 b) 符合产品设计 性能测试是通过测试工具模拟多种正常、峰值,以及异常负载条件来对系统的各项性能指标进行测试
二 性能测试挑战 不连接 USB 指标 自动采集 测试用例 自动Run 不ROOT 不越狱 建立评测 说清楚性能测试难点和要点
线上阶段 Coding 线下阶段 系统提测 灰度发布 三 性能测试在项目流程中重要性 开发阶段 编 译 开发阶段 小范围体验 单元测试 专 项 众 测 监 控 线上阶段 三 性能测试在项目流程中重要性 Coding 开发阶段 线下阶段 编 译 代码扫描 Code review 单元测试 冒 烟 系统提测 开发阶段 灰度发布 小范围体验 详细讲黄色工具
性能测试配合使用平台和工具 性 能 专 项 评 测 监 控 编 译 代码扫描 工具APP类 腾讯APT 百度慕斯 腾讯bita 阿里TMTS 性 能 腾讯APT 百度慕斯 腾讯bita 阿里TMTS 百度mvp 专 项 百度crab 腾讯melt GT随时调 百度坚果 评 测 舆情平台 百度UFO VA平台 百度开放云 监 控 随身调GT Miss监控 扫雷平台 腾讯bugly 编 译 Jenkins 代码扫描 findBugs 腾讯卡帕莱sonar Coverity 百度godeyes PCLint 工具APP类 微信NewMonkey 百度SmartMonkey 百度SmallApple 坚果: 内存泄漏插件:一款基于开源的Leakcanary改造的坚果插件,支持Activity和Fragment的内存泄漏监控,正常操作过程中发生泄漏会弹Toast消息报警并Dump Hprof,通过坚果App能自动分析出每个泄漏结果的最短GC路径 App监控体验插件:集成了移动端线上监控平台 SDK,可以进行App端监控体验,或直接联系监控平台负责人进行接入 网络监控插件:能监控App的Http网络请求,目前只支持DefaultHttpClient类型的请求 UI性能插件:目前支持StrictMode开启,能监控UI主线程读写磁盘数据、发起网络请求等异常点,并显示完整堆栈信息 崩溃ANR插件
a、 通用指标Get b、 FPS、log不开Root c、 功耗和电量 d、 特殊app a、记ViewID,智能消除弹窗 四 性能测试技术难点分析 a、 通用指标Get b、 FPS、log不开Root c、 功耗和电量 d、 特殊app a、记ViewID,智能消除弹窗 b、算关键路径,智能回溯 c、跳出app智能回退 d、脚本自启动 e、弹出广告处理 f、 支付类加密SDK 标准:参照MTBF 稳定性测试万能脚本,关键技术 a、记录没个ViewID,智能消除弹窗 b、关键路径概率、停留时间,不重复 c、跳出app智能回退(调用UIautomator) d、脚本手机自启动(am start -instrumentation) 指标关键获取: a、 通用指标:cpu、内存、启动时长 (DumpSys命令或者 ActivityManager类) b、 FPS不需要开Root权限(游戏类app关注) b、 功耗和电量获取Cpu轮询jiffies c、 特殊app(、视频娱乐类)获取网络流量和下载、播放,get播放内 核 数据写入上报:json解析写存储卡,然后上报 json解析写存储卡,然后上报
性能自动化建设-线下 分析内存 优化布局分析 FPS采集 智能遍历 追踪Trace堆栈 1、配合Uiautomator+智能Monkey算法 2、层级嵌套分析工具(权重分析) 3、测试UI界面响应和娱乐类app响应 4、函数响应时间追踪Trace堆数据 5、提取内存HPROF,分析内存泄露 分析内存 优化布局分析 FPS采集 智能遍历 追踪Trace堆栈
危机 性能线上建设-E2E 网络的DNS 查询的时间 APP启动时长 页面切换耗时 关键场景路径耗时 数据更新率监控 Push推送监控 网络响应时间 Bug定位 网络异常 Crash上报 性能线上建设-E2E 危机 场景 e2e
网络关注点 响应时长关注点 响应时长 网 络 首字节时间(TTFB) 1. 页面加载时间 开启GZIP压缩 FPS 使用长连接(keep alive) 是否合并CSS和JS文件 是否设置静态内容缓存时间 合理用cookie 网 络 网络关注点 开启严苛 7.webP格式图片 8.大图片 9.大文本 1. 页面加载时间 FPS 静态分析工具 函数响应时间 6. StrictMode GC 响应时长 响应时长关注点 详细 说cookie和大文本图片 断点续传 严苛模式:虚拟机和开发线程 1. 页面加载时间 通过抓取logcat日志或者代码埋点 FPS 通过GPU呈现模式分析(Profile GPU rendering)得到帧数据 静态分析工具 Lint可以静态扫描找出布局可优化的代码 另外可自定义一些规则如:ListView中没有重用convertView, 没有使用固定行高等… 函数响应时间 Total call排序(函数的调用次数 InclusiveCpuTime排序,包含子函数的调用函数耗时 6. StrictMode 找出在UI Main Thread上进行I/O、网络请求 GC 应用运行过程中GC是否频繁,在3.0以下将会阻塞主线程 网络响应度量指标 首字节时间(TTFB) 开启GZIP压缩 使用长连接(keep alive) 是否合并CSS和JS文件 是否设置静态内容缓存时间 合理使用COOKIE webP格式图片 大图片 大文本
电量关注点 稳定性关注点 稳 定 性 电 量 Cpu单进程jiffies 1.特殊场景的内存泄露、 兼容性 必须cpu固定频率下 休眠 wakeLock唤醒锁 电 量 1.特殊场景的内存泄露、 兼容性 2.Low memory 3.弱网络 4.异常场景crash 稳 定 性 电量关注点 稳定性关注点 1. 页面加载时间 通过抓取logcat日志或者代码埋点 FPS 通过GPU呈现模式分析(Profile GPU rendering)得到帧数据 静态分析工具 Lint可以静态扫描找出布局可优化的代码 另外可自定义一些规则如:ListView中没有重用convertView, 没有使用固定行高等… 函数响应时间 Total call排序(函数的调用次数 InclusiveCpuTime排序,包含子函数的调用函数耗时 6. StrictMode 找出在UI Main Thread上进行I/O、网络请求 GC 应用运行过程中GC是否频繁,在3.0以下将会阻塞主线程 网络响应度量指标 首字节时间(TTFB) 开启GZIP压缩 使用长连接(keep alive) 是否合并CSS和JS文件 是否设置静态内容缓存时间 合理使用COOKIE webP格式图片 大图片 大文本
内存关注点 CPU关注点 CPU OOM内存溢出 ANR 压测提取堆空间log Crash 指标:Davlik Pss Unkown Pss Total Pss 内 存 内存关注点 CPU CPU关注点 User(用户使用) SYS(系统等待) IOW(磁盘IO等待) 1. 页面加载时间 通过抓取logcat日志或者代码埋点 FPS 通过GPU呈现模式分析(Profile GPU rendering)得到帧数据 静态分析工具 Lint可以静态扫描找出布局可优化的代码 另外可自定义一些规则如:ListView中没有重用convertView, 没有使用固定行高等… 函数响应时间 Total call排序(函数的调用次数 InclusiveCpuTime排序,包含子函数的调用函数耗时 6. StrictMode 找出在UI Main Thread上进行I/O、网络请求 GC 应用运行过程中GC是否频繁,在3.0以下将会阻塞主线程 网络响应度量指标 首字节时间(TTFB) 开启GZIP压缩 使用长连接(keep alive) 是否合并CSS和JS文件 是否设置静态内容缓存时间 合理使用COOKIE webP格式图片 大图片 大文本
性能监控 Server Driver 被测APP GetViewID TestCase RemoteServer BackApp 五 性能测试设计架构图 性能监控 Server 进程1-- writeData 进程3-- sendData 进程2-- performance Driver TestCase 被测APP RemoteServer GetViewID BackApp 举个滴滴uber例子
01 02 03 04 本地百台机器跑定制化Case脚本收集指标 App和自动化 嵌入用户反馈 Case平台众包 和数据统计上 下发 六 性能测试落地部署 01 02 03 04 本地百台机器跑定制化Case脚本收集指标 异地靠用户众测 App和自动化 Case平台众包 下发 嵌入用户反馈 和数据统计上 报SDK 阿里tmts、itesin、易测云等等
七 性能测试数据分析 做到这步完成了? Kaopu-app(iphone5s) Ionic-demo(note4) Weixin(iphone5s) 点击时间 加载时间 帧数 25.05 25.19 17 17.03 17.21 8 0.11 0.14 3 26.24 27.08 14 18.01 10 1.10 1.14 4 28.14 29.14 20 18.11 18.21 2.29 3.07 30.12 30.26 19.01 19.10 9 3.22 4.00 31.12 31.24 12 19.22 20.01 4.22 4.27 5 32.26 32.22 20.10 20.20 5.13 5.18 32.29 33.10 11 21.00 21.09 6.10 6.17 7 33.20 34.07 21.18 21.26 7.03 7.09 6 34.13 34.25 16.12 16.21 7.29 8.85 35.05 35.20 15 15.24 16.03 8.21 8.28 做到这步完成了?
一拖多 抓取堆日志 Junit 内存泄露抓取 GET-hprof 云端下发 用原生态 开Root 测试任务 读取ANR 无线wifi-USB 八 曾经尝试 开Root 读取ANR 连接数据线 app代码监控 云端下发 测试任务 抓取堆日志 内存泄露抓取 GET-hprof 用原生态 代码插桩 配合EMMA 一拖多 Junit 无线wifi-USB Android Ios 动态
A B C F G E D 2-3个人 Case 自动化 平台智 能分析 用户参与 整合 Jenkins 用户不 用操作 自动收 集指标 九 案例ROI分析 A 2-3个人 B C F G E D Case 自动化 平台智 能分析 用户参与 整合 Jenkins 用户不 用操作 自动收 集指标 推广产品线 项目周期时间短 QA人员不足 在项目周期时间短、QA人员不足的情况下,不但能够提高产品质量,而且能够不断CI、去适应不断变化的产品需求 1、只需要2-3个人维护(Android和IOS) 2、手工操作Case变成自动化 3、让用户参与(二维码或者Push下发app) 4、系统方便整合到Jenkins 不用买机器 不用排场测QA 用户调起app不用操作 性能指标自动收集 数据上报server,一个专门QA分析
统一性能指标 聚焦TOP问题 多纬度评估 性 能 众 测 指 标 智 能 过 滤 线上监控预警分析 监控定位模块 提升召回率 十 案例启示 统一性能指标 聚焦TOP问题 多纬度评估 性 能 众 测 指 标 智 能 过 滤 线上监控预警分析 监控定位模块 提升召回率