夏鸣远 - 基于DEX插桩的自动化质量监控

Mobile Testing Summit China(中国移动互联网测试开发大会)是一个以移动测试开发技术为主题的行业交流大会,主要聚焦于移动互联网应用和智能硬件方向的测试开发技术。大会由中国最大的移动测试社区TesterHome主办,  邀请国内外众多顶尖的测试专家和行业大牛分享他们的先进工作经验及独到见解, 是国内移动测试技术发展的风向标. 本届会议为第三届

1. 基于 DEX 插桩的 自动应用质量监控 夏鸣远 AppetizerIO theappetizerio@gmail.com S 1
2. 以数据说质量 S 业务埋点 S 开发 log S 正确性 S 性能数据 S HTTP 流量 S 覆盖率,性能图表 à 用户路径,留存活跃 à logcat 日志 à 捕获异常 à 帧率,卡顿,耗电 à 接口稳定性、性能、流量等 à 测试有效性 2
3. DEX 插桩 S 手工埋点:难维护,单应用 S SDK:接入、配置成本,涵 盖有限 S 系统层工具:各种局限性, 采集数据有限 S 全自动一键插桩,零维护 S 持续化集成生态 S 测量广泛:闪退、性能、网络 S 数据透明统一 传统采集方式 DEX插桩 3
4. 一键插桩 in.apk 业务逻辑 4
5. 一键插桩 $> python insights.py process in.apk out.apk 业务逻辑 测量逻辑 5
6. DEX插桩技术内幕 S 基于smali/baksmali unzip baksmali instrumen t zip sign 6 smali
7. 插桩举例 Appetizer有近百条插桩规则,插桩内容从简单的计时,到复杂的配对追踪等 7
8. 插桩举例 8
9. 质量监控流程 插桩 测试 产生报告 9
10. 支持的APP开发技术 混淆 ✔ 加固 ⨉ 插桩 测试 WEEX 热补丁:Tinker, AndFix 10 产生报告
11. 插桩包测量内容 插桩 • Java层全线程异常 • 主线程卡顿(事件、回调) • 界面切换(Activity/Fragment) • 完整HTTP请求响应 (HttpURLConnection, okhttp 2/3, Apache HTTP Client) 11 测试 产生报告 • CPU/内存使用率 • 测试的界面覆盖率 • 网络流量 • 前后台时间
12. 插桩方式 云服务插桩 插桩 测试 产生报告 Jenkins Python 命令行 客户端图形化 界面 12 Gradle
13. 测试阶段 插桩 测试 产生报告 • 原生系统,不需要Root,不需要特殊设备配置 • 手工测试 • UI自动化:Appium, Calabash, Robotium • 自动探索:Monkey, AppCrawler • Log数据存在设备本地,约为1k~20k/分钟 13
14. 报告与分析 云服务分析 插桩 测试 产生报告 免费版本 收费版本 • 客户端查看最近报告 • 查看完整历史报告 • 导出问题(csv, html, pdf, json) • 下载完整数据导入MongoDB/ELK做 • Exceptions 深度分析 • HTTP错误 • 按照每个插装包收取费用 • HTTP性能问题 • 主线程卡顿 14
15. 报告 - 测试统计信息 15
16. 报告 – JVM层异常 16
17. 报告 – CPU/内存/堆栈 17
18. 报告 – 启动切换缓慢 18
19. 报告 – HTTP请求错误 19
20. 报告 – HTTP首包太慢 20
21. 报告 – HTTP下载过慢 21
22. 报告 – 主线程卡顿 22
23. 插桩的性能影响 S 测量开销 S HTTP – 非主线程 测量开销<1ms S CPU/内存数据采集 约 2% CPU占用 S 页面切换 测量开销<1ms S 可定制化减少log,开关测量项目(未来高级功能) 23
24. 我们的用户 Appetizer + 24 AppCrawler
25. 我们的用户 应用市场 工具类 美颜类 健康类 车载APP 安全类 生活类 金融类 娱乐类 视频类 新闻类 电视盒子APP 游戏 输入法 25
26. 私有化部署 插桩(docker) 测试(本地) 产生报告 (docker) 输出APP执行数据(json/mongodb/ELK) à 深度分析 26
27. APP执行数据 业务打点 Fragment/Activity HTTP请求响应 卡顿 异常 CPU内存用量 27
28. 深度分析:搜索,排序 HTTP请求响应 某个业务内最耗 时的HTTP请求 卡顿 异常 业务中发生的异常 CPU内存用量 28
29. 深度分析:流量分析 29
30. 资源 S Appetizer 官网及客户端下载: https://appetizer.io S 插桩工具Python命令行版: https://github.com/appetizerio/insights.py S 社区,文档:https://testerhome.com/topics/node127 S 知乎专栏: https://zhuanlan.zhihu.com/smartmobdev S QQ群:467889502 S 私有化部署、商务合作:theappetizerio@gmail.com 30
31. 未来计划 S Appetizer BLSDK(aar格式)更精确的业务埋点 S 目前到Fragment层面的业务精细度 S HTTP 更精细化:DNS, TCP连接时间 S WebView S 导入其他 SDK 数据,例如 Leak Canary,JaCoCo 31
32. 基于 DEX 插桩的 自动应用质量监控 夏鸣远 AppetizerIO theappetizerio@gmail.com S 32