本文主要介绍测试客户端针对网络返回数据变化的鲁棒性的实践经验。文章第一部分介绍了客户端健壮性测试的基本概念,第二部分分享了设计基于接口返回数据突变的App健壮性测试方案的思路,第三部分主要描述了突变数据的结构和设计的异常检测。解决方案;第四部分介绍了简化突变数据的探索计划。
01 什么是客户端稳健性?
02 设计基于接口数据变异的App健壮性测试方案
03 变异数据构建与异常检测
04 变异数据效率计划
05 概述与展望
06 质量保证
07 参考文献
01 什么是客户端鲁棒性?维基百科将鲁棒性定义为计算机系统在执行过程中处理错误的能力,以及算法在面对输入或操作等异常情况下继续成功执行的能力,指的是能力。 IEEE 将鲁棒性定义为系统或组件在存在无效输入或压力环境条件下正常运行的程度。 Barton Miller 在1989 年首次提出模糊测试的概念,通过向目标应用程序抛出随机字符串来测试UNIX 应用程序的稳健性,1996 年的Ballista 项目允许研究人员基于API 定义来测试UNIX 应用程序的稳健性。模糊测试。操作系统或软件接口的自动化测试方法。这两个项目都使用“应用程序不会崩溃或挂起”作为测试验证的通过标准。在移动应用领域,鲁棒性可以理解为即使应用运行时出现环境或输入异常,客户端也能继续成功运行的能力。其中,环境异常主要分为三类:操作系统异常、外部环境异常、硬件环境异常。示例包括内存不足、CPU 负载高、线程池已满、内存分配失败以及网络连接失败。输入错误主要分为系统输入和用户输入。例如网络接口返回的异常数据、应用内缓存、数据库文件读写异常等都属于系统输入异常。在电话号码输入框场景中,用户输入的空格和富文本属于用户输入异常。
如果本应用不解决这些风险,可能会出现显示异常、交互异常、性能和安全问题等问题,从而导致用户无法继续使用该应用或在使用过程中造成不适。例如,当用户与您的应用交互下订单时,API 请求失败,并且没有返回任何响应,状态码为200。应用无法获取预期的界面响应信息而崩溃,影响用户体验。使用过程。
通过对业务接口返回数据的数据结构进行分析,我们发现层次越深,靠近根节点的两个节点在业务逻辑连接和结构上的相似度就越低。可以与节点交互。不影响逻辑。例如,如果有两个键值对,每个键值对值有三个变体值,则合并构造的排列和组合数为:可以从6个数据减少到3个数据。
基于这个思想,我们实际上引入了一种编辑距离和并集搜索算法,计算树每层每两个节点的编辑距离,并以节点路径为参考生成一个n*n矩阵。同时将高度减去节点所在层数作为权重来修改编辑距离。基于这样的计算,生成多个编辑距离矩阵。
为了最大限度地提高合并构建用例的有效性,我们将编辑距离转换为0,1 矩阵。其中编辑距离为1的两个节点可能存在业务逻辑绑定关系,应该在同一个组内单独构建,所以我们将大于1的编辑距离转换为0,最终得到编辑距离为0,1 。矩阵。
对于0,1 矩阵,我们使用图连通性的概念。如果A 和B 连接且B 和C 连接,则认为A 和C 连接。这里转换的概念是A和B。如果A和C相似,B和C相似,则将它们放在同一组中并分别构建,并且在构建同一级别的元素时,从每个组中取出节点并使用这些规则进行更改和组合。
基于以上两种策略进行精简后,生成的变异数据量比精简前减少了40%,但同时代码覆盖率没有明显变化,鲁棒性问题发现能力下降。
美团App和首选App都可以使用该工具,可以在新的需求阶段手动触发并执行。它还可以与客户端组件集成事件和回归事件结合自动触发。应用一年之内,发现了数十个问题。
05 概述与展望
在构建健壮性工具的第一阶段,我们在应用页面加载显示场景中实现了健壮性问题检测,并支持三种类型的异常检测:崩溃、冻结和部分功能异常。此外,基于节点相似度优化变异数据生成策略,可以在保持相同效果的同时,有效控制测试周期,但是否有更好的合并或推荐算法,还需要更多的尝试。
该工具后续迭代将继续聚焦异常构建和异常检测两个方向,支持更丰富的构建和检测能力以及更好的构建效率。
近期建设方面,我们将从业务角度增强自动变异数据生成建模,提高客户端异常的通用异常检测能力,开发前后端交互的通用数据结构类型。 (例如长连接消息);长期构建需要支持更丰富的数据和环境构建能力,并通过智能用例生成来提高测试效率。
Q8:有页面显示验证吗?如何? A:我们目前正在对页面内的模块进行“可见性”验证,基于美团目前集成的可测试性SDK,该SDK会判断当前页面是否可见,获取对应模块是否可见的信息不是。将相应的模块描述传递给SDK,并返回检查是否显示。
07 参考文献[1] 稳健性
[2] IEEE 稳健性
[3] Ballista:卡内基梅隆大学的一个研究项目,使用黑盒自动化测试来检测导致系统崩溃或异常终止的系统或接口调用。
[4] 基于布局视图的分析SDK:美团App页面视图可测试性改造实践-XraySDK