《5-PPT版《客户端健壮性测试实践》覃馨.pdf》由会员分享,可在线阅读,更多相关《5-PPT版《客户端健壮性测试实践》覃馨.pdf(37页珍藏版)》请在三个皮匠报告上搜索。
1、美团平台技术部 2023年06月客户端健壮性测试实践分享要点 1、为什么关注客户端健壮性 2、App健壮性保障的思路 3、App健壮性检测方案设计 4、如何解决健壮性测试覆盖不足和测试耗时长问题201|什么是客户端健壮性定义4健壮性:系统或组件在存在无效输入或压力环境条件下可以正常运行的程度。移动端App健壮性:App运行时遭遇环境异常或者输入异常时客户端能够继续正常运行的能力。什么是客户端健壮性?5举个例子:某服务触发限流向客户端返回状态码403,客户端未获取到预期的接口响应数据时发生了崩溃。请求响应移动端有哪些环境异常和输入?6操作系统硬件环境运行环境内存网络外部 环境CPU系统输入输入应
2、用间应用内用户输入交互 内容 数据交互 事件 遭遇异常后产生的健壮性问题表现7异常类型表现展示异常加载过程中出现Crash/ANR/JS Error功能/模块缺失界面错位字体/颜色/文本内容异常交互异常交互过程中出现Crash/ANR/JS Error交互无响应性能问题CPU、内存、线程池等资源消耗异常加载时间等时间维度性能指标劣化安全问题出现安全漏洞产生被攻击或信息泄露等风险02|为什么关注客户端健壮性业务特点:用户规模持续增长,流量大、高频业务占比高 以基础功能和核心入口为主,影响范围广 业务简介9平台业务外卖美食酒店旅游机票门票打车基础组件技术形态:不同技术形态页面数量分布均衡 以页面流
3、量占比看,Native原生页面占据大部分的曝光(重点关注)动态化容器页面与H5页面相对曝光量极小 Native问题修复周期长,故障恢复时间长 业务简介10平台业务外卖美食酒店旅游机票门票打车基础组件页面数量分布页面流量分布Native页面动态化页面H5页面故障风险11客户端健壮性问题引发故障占比高 典型故障:e.g.核心模块入口丢失,影响十万级用户 e.g.类型转换异常,用户使用App闪退,5分钟内降级仍累计影响百万级用户 /java.lang.NumberFormatException:For input string int count=Interger.parseInt(key);故障险
4、影响范围急需改善=恢复周期03|如何开展客户端健壮性问题治理基本思路 保障方案设计基本思路13制定治理 目标建设度量 方案辅助问题 分析驱动问题 治理持续控制制定治理目标14降低由于网络接口返回数据与预期不符导致的Crash或核心功能/模块缺失的线上问题数量 问题诱因分析:-网络接口返回数据占比100%异常表现:加载过程中出现Crash,占比Top 1 核心功能/模块缺失,占比Top 2 影响时长:出现在Native页面/模块的问题占比100%,需要通过发版才能彻底修复问题,修复成本高、周期长 非Crash/ANR/JS Error类异常发现100%依赖于客诉反馈,发现问题时长不可控运行环境输
5、入分析关键举措15根因分析:关键举措:健壮性检测工具优化建设 业务异常监控完善 流程规范完善及管控手段建设,含技术设计、技术方案评审、测试用例设计、配置变更等整体保障方案 实施策略:客户端健壮性保障方案16 聚焦通用发现能力建设,重点建设事前检测能力质量特性手段工具/平台 支撑健壮性监控运营流程管控制定流程规范需求规范研发规范测试规范发布规范线上运维规范监督流程Push流水线PR流水线提测流水线测试流水线回归测试流水线发布流水线配置变更流水线迭代标准复盘对标静态代码扫描测试健壮性测试异常检测稳定性异常功能异常性能异常线上巡检运行环境异常构造异常输入构造业务层健壮性测试组件/API健壮性测试展示
6、交互单元测试监控告警建设问题治理运营机制建设持续集成/交付平台事件管理中心云真机平台可测性改造SDK自动化测试管理工具问题运营工具工具类使用治理:开发自定义静态代码扫描规则,增量管控新增代码,长期治理存量风险 如:PrimitiveParseDetector、ColorParseDetector 以此为契机初步完善了Android和iOS端共200+扫描规则和组件仓库的接入 静态检测17动态检测18新需求测试人工配置触发健壮性测试版本回归测试监听事件中心触发健壮性测试进入Crash运营流程是否Crash通知负责人确认创建工单是否误报标记误报是否修复不修复确认修复验证测试自动录制数据自动生成用例
7、结果记录提交测试运行异常检测是否是否是否04|客户端健壮性测试怎么做方案调研分析 核心难点及解决方案 业务应用及效果什么是健壮性测试20e.g.构造接口返回值中某个key对应的value的异常值,对客户端展示进行校验 核心动作:构造异常;完成校验 异常检测稳定性异常功能异常性能异常运行环境异常构造异常输入构造业务层健壮性测试组件/API健壮性测试展示交互单元测试客户端健壮性测试怎么测21目标:发现网络数据不符合预期导致的页面加载Crash或核心模块不展示问题-“测什么”“怎么测”-客户端(App)vs 服务端 对比项客户端服务端测试对象被测页面或模块被测服务异常构造所需信息接口返回数据、设备网
8、络信息、系统状态信息、数据库、缓存数据、配置信息、手势动作等依赖服务返回数据、数据库、缓存、MQ和LION配置等中间件数据异常检测Crash、ANR、展示异常、交互异常、性能、安全问题等输入异常数据导致的服务异常,以及请求量过大或异常请求引发的性能、可靠性、安全问题环境差异受设备系统、版本、硬件条件等外界因素影响运行环境统一测试执行效率低。客户端进行请求和交互相对耗时,且结果需要UI层面进行观察,因此在用例数量相当的情况下,客户端执行时长远超服务端高方案对比22行业方案 -“怎么测”基本原理:返回预置数据检测异常请求响应拦截请求对比项美团内部工具A/B行业做法A/B数据构造按照基本数据类型设置
9、异常值,根据权重随机构造;支持自定义异常值和权重按照基本数据类型设置异常值,支持自定义异常值,支持JSON数据节点跳过数据覆盖一次测试只覆盖一种异常数据一次测试支持遍历所有异常数据组合情况,也支持只覆盖一种异常结果异常检测能力Crash/ANRCrash/ANR执行效率与UI自动化执行效率一致与UI自动化执行效率一致,测试耗时根据测试覆盖异常数据条数几乎等比上涨数据生成未包含业务语义覆盖不足用例量大,测试耗时长不支持功能模块缺失检测面临挑战23挑战一:如何保障数据构造生成的全面性 e.g.如何唯一访问1种形态的上海品茶?哪些请求和当前页面相关?Request-1Request-2Request-n
10、Response HeaderResponse Body基本数据类型相同但是包含了不同的语义,如何处理?key:value /基本类型:Int、Float /复合类型:Array /挑战一:数据构造生成全面性24解决方案:结合语义的变异规则 e.g.响应体 Json的字符串可能代表时间戳、颜色、路由跳转链接、动态/静态资源链接(静态图片、动图、视频等)测试对象 控制数据录制结合语义的变异规则定义描述规则用例“活”起来时间戳实现方案25控制登录状态地理位置数据构造策略控制缓存控制可测性改造观测页面跳转语义差异化的数据异常构造基本数据类型跳链颜色资源配置文件文本挑战一:数据构造生成全面性26产生问
11、题:用例生成数量级巨大,测试执行耗时长 e.g.假设对于1个变量,有7种变异取值,存在n个此类型变量情况下,就会产生7n种数据组合,当n=10时用例已经超过亿级,假定一条用例执行1分钟,耗时约为537年 面临挑战27挑战二:如何精简用例降低测试运行时长 基本思路:相似节点识别,利用相似节点的相同key取值不同的变异数据,删减构造用例数 挑战二:用例精简降低测试耗时28基本思路:结合响应体层级,量化计算不同层级间响应体中节点的相似度,距离根节点越近,相似度越低,需要合并构造 e.g.data.modules0.proxyData.resourcesMap.utilInfoArea0.materi
12、alMap.utilName data.modules1.proxyData.resourcesMap.utilInfoArea0.materialMap.utilName 挑战二:用例精简降低测试耗时29解决方案:引入编辑距离和并查集算法,对于响应体中每一层构造N*N矩阵计算相似度,并通过距离根节点的距离赋予不同权重。为了合并最大用例,把同层节点的编辑距离矩阵做0,1转化,由于耦合关系的需要放在同一个组里分别构造,转化时把编辑距离大于1的转化为了0;挑战二:用例精简降低测试耗时30解决方案:利用图的联通性概念,认为如果A和B是相似节点,B和C是相似节点,则A与C相似。e.g.挑战二:用例精简
13、降低测试耗时31用例精简效果评估:用例数2000+近40%代码覆盖率基本持平发现能力不变业务应用及效果32工具接入:美团App、优选App 应用场景:接入成本:一次性接入成本;全量回归测试执行4小时 异常检测能力:Crash、ANR、功能模块缺失 问题发现能力:目标范围内无漏测05|总结及展望总结回顾34工具建设:不足:在节点相似计算和用例精简上异常检测稳定性异常功能异常性能异常运行环境异常构造异常输入构造业务层健壮性测试组件/API健壮性测试展示交互单元测试还在继续35进一步探索方向:异常检测能力增强 异常构造能力增强:千人千面场景下保证录制数据的全面性、有效性 缓存、文件等数据环境构造能力增强 用例生成智能化,减少无效构造 算法优化 智能推荐更多挑战364.总结和展望些结果不和改进向未来挑战更多技术干货欢迎关注“美团技术团队”招聘:测试开发岗位邮箱: