内容提要
本文介绍了移动端App健壮性测试的概念和设计方案,包括基于接口数据变异的静态和动态检测方法。静态检测通过代码扫描来控制代码规范和风险,动态检测通过构造变异数据并注入到App中来识别异常。文章还介绍了变异数据构造和异常检测的方法,并提出了精简变异数据的方案。最后,总结了当前工具的建设情况和未来发展方向。
延伸解读
静态与动态检测的互补性
文章提出的健壮性测试方案包含静态检测和动态检测两部分。静态检测通过自定义代码扫描规则管控增量代码和存量风险,例如强制使用健壮性工具类;动态检测则通过构造变异数据注入App,识别运行时崩溃、挂起或功能异常。两者互补:静态检测从代码规范层面预防问题,动态检测从实际运行中发现问题,共同提升App健壮性。
变异数据构造的挑战与应对
变异数据构造面临全面性和准确性挑战。文章指出,需通过页面描述方案控制基础数据唯一性,并基于语义匹配规则区分不同业务含义的数据。例如,字符串可能代表颜色、路由或资源链接,需分别构造异常。同时,结合历史问题增补变异规则,确保覆盖真实场景。这些措施有助于生成有效的测试用例。
精简变异数据的策略与效果
为控制测试用例数量,文章提出两种精简策略:对于结构一致的数组元素,删减构造用例数;对于结构不完全一致的数组元素,引入编辑距离和并查集算法判断节点相似性,合并构造。实践表明,精简后变异数据量降低40%,代码覆盖率无明显变化,且保持健壮性问题发现能力,有效平衡了测试全面性与执行效率。
工具应用现状与未来方向
该工具已在美团App和优选App接入,支持人工触发和自动触发,一年内发现几十个问题。当前实现覆盖页面加载展示场景的崩溃、卡死和部分功能异常检测。未来计划丰富异常构造和检测能力,支持长连接消息等更多数据构造类型,并通过智能化用例生成提升测试效率。
Q&A
移动端App的健壮性具体指什么?
移动端App的健壮性指App运行时遭遇环境异常或输入异常时,客户端能够继续正常运行的能力。环境异常包括操作系统、外部环境和硬件环境异常;输入异常包括系统输入和用户输入异常。
基于接口数据变异的健壮性测试方案包含哪几部分?
该方案包含静态检测和动态检测两部分。静态检测通过代码扫描控制代码规范,动态检测通过构造变异数据并注入到App中,识别运行时是否出现崩溃、挂起或业务功能模块异常。
如何构造变异数据以确保测试的全面性和准确性?
首先构建页面描述特征规则,解决页面标识唯一性问题,通过自动录制更新请求数据与页面的绑定关系。然后对响应体中的Value设置语义匹配规则,区分颜色、路由、资源链接等语义,按语义构造异常数据。同时结合基本数据类型边界值和历史健壮性问题增补变异规则。
精简变异数据有哪些策略?效果如何?
精简策略包括:1)数组元素结构一致时,删减构造的用例数;2)结构不完全一致的数组元素,引入编辑距离和并查集算法判断节点相似性,合并构造。应用后变异数据量减少40%,代码覆盖率无明显变化,健壮性问题发现能力保持不变。
该工具在哪些App上应用?发现了多少问题?
美团App和优选App已接入该工具,应用一年时间内发现了几十个问题。
健壮性测试的执行频率是怎样的?
执行频率分三种:1)需求维度,人工触发;2)变更维度,当组件发生变更时,关联到对应页面触发测试,频率受组件变更频率影响;3)回归测试,App回归测试两周一次,执行所有页面及关联用例。
对于接口返回的必填和非必填参数,用例范围如何确定?
目前方案没有区分必填和非必填参数,会对整个数据接口返回里的所有结果进行构造。对于非必返回参数可能产生的问题,通过运营手段做确认。
如何知道页面对应哪些变异规则?
在测试接入过程中配置要测试哪些页面,自动触发录制过程,生成页面与接口请求的对应关系,由配置人确认哪些接口需要构造。业务迭代产生新接口时,录制能感知变化并通知负责人确认更新规则或加入黑名单。