性能压测是一种评估系统运行效率和稳定性的方法,通过模拟真实的使用场景和负载条件,对系统进行压力测试和负载测试,并对测试结果进行分析,以评估系统的性能,其中性能压测结果分析是性能压测的重要环节。以往的性能压测,测试执行和分析是分开的,分析的结果具有滞后性,且依赖于测试人员经验,存在分析标准不统一的问题。为解决上述问题,笔者探索了一个基于指标趋势和阈值规则的自动化异常分析方法,并将方法嵌入性能压测执行过程,实现实时、自动的捕获测试异常,帮助测试人员分析和评估系统在特定条件下的表现。
一、优化压测执行过程
性能压测执行过程一般由系统自动完成,无需人工参与,主要包含发压、数据聚合、结果汇总三个环节。笔者探索在性能压测执行过程中增加分析节点,接收实时的测试结果数据流,根据分析方法对其进行分析,捕获异常点,汇总展示给用户。
图1:增加分析节点的性能压测执行过程
二、流数据&流处理
性能压测结果数据是标准的流数据,测试结果是随着时间的推移而产生的数据元素序列。流处理是对流数据的处理,与批处理不同,流数据会在产生后立即被逐一处理,其具有以下特点:
无界数据:流数据是一种不断增长的、无限的数据集,不能作为一个整体来操作。
无界的数据处理:由于适用于无界数据,流处理本身也是无界的。与批处理相比,工作负载可以均匀地分布在不同的时间。
低延迟、近实时:流处理可以在数据产生后就进行处理,以极低的延迟获得结果。
三、分析指标
本文方法针对性能压测结果中关注类指标和统计类指标进行分析。其中关注类指标包括响应时间、吞吐错误率、资源利用率等,统计类指标包括分位数、标准差等。
图2:分析指标
四、分析方法
1.基于趋势的分析
异常毛刺通常指的是在性能压测期间出现的TPS、响应时间或其他资源使用率的短暂、剧烈波动,如图3。
图3:性能压测过程的异常毛刺点
异常毛刺点有两个特点,一是处于异常趋势中,一个是有剧烈波动,例如TPS的陡降,响应时间的陡升。趋势分析则通过分析压测过程中指标的趋势走向,识别异常趋势中波动剧烈的毛刺点,从而实现异常毛刺点识别。所以,如何识别趋势和计算波动是整个趋势分析中最关键的技术。本文方法利用时态窗口实现了对指标的趋势识别,同时利用状态保存机制,根据上下文信息计算波动幅度,实现异常毛刺点识别。
2.基于阈值规则的分析
性能压测过程中,项目组会根据业务预估交易运行预期,制定相应通过准则。本文方法支持用户根据通过准则自定义阈值规则,规则在测试开始时生效,测试结束停止,期间可以实时捕获没有达到通过准则的数据。
五、搭建规则管道
在流处理中,规则代表了一项计算工作,它定义了输入源,计算逻辑和结果,比如一条分析规则,它以性能测试结果为数据源,分析方法为计算逻辑,捕获的异常点作为输出。规则与规则可以进行串联,形成一个规则管道,完成一系列操作。基于规则管道可以实现分析节点的自动化运行。以响应时间异常点分析为例子,规则1实现了将所有测试结果根据测试id和接口名称进行分流,规则2对分流数据响应时间指标进行分析,标记异常点,规则3实现了异常点入库,将3个规则串联就可以实现一个完整的自动分析过程。
图4:响应时间分析的规则管道
六、实践
基于上述,笔者在性能压测执行环节通过规则管道搭建了一个分析节点,节点可基于阈值和指标趋势自动的、实时的对性能测试结果进行分析,无需人工参与,分析结果如图5所示。
图5:测试分析结果
七、总结
本文探索了一个基于指标趋势和阈值规则的自动化异常感知分析方法,该方法利用时态窗口和状态保存机制实现了对性能压测过程中异常毛刺点捕获,同时方法可以根据用户自定义的阈值规则自动捕获没有达到通过准则的数据。并通过搭建规则管道,将分析融入性能压测执行过程中,实现了自动化分析,提高了分析效率。
文末了:
可以到我的个人号:atstudy-js,可以免费领取一份10G软件测试工程师面试宝典文档资料。同时我邀请你进入我们的软件测试学习交流平台,大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,了解测试行业的最新趋势,助你快速进阶Python自动化测试/测试开发,稳住当前职位同时走向高薪之路。