01
引言
在 IT 架构转型过程中,由于从主机到开放平台、从集中式到分布式的转变,对质量保障工作提出了更高的要求。过去的项目测试中,人工操作占比较高,导致在测试广度、测试深度、测试效能上都无法满足转型后的质量守护需求。
我行在性能测试领域的经验积累,以及业界主流性能测试工具(如Jmeter、Loadrunner、Tsung、nGrinder)在项目测试中的使用经历。然而,这些工具都存在一些不足,无法完美解决该行在质量守护方面的问题。
例如,Jmeter在大规模测试方面的支持不够理想,缺乏资产化管理手段。nGrinder的学习曲线陡峭,协议支持不够丰富(如WebSocket),且不支持复杂场景测试。Loadrunner需要高性能硬件资源,收费昂贵,且是闭源的。这些工具只提供监控图表,在分析能力上存在欠缺。此外,它们只提供测试执行和监控环节,其他环节需要借助其他工具完成,导致操作体验不连贯,效率需要改进。
02
智能化性能平台的设计思路
对于理想的智能化性能测试平台,我们认为应该具备以下能力:
一个完整的智能化性能测试平台应具备全面的智能化能力,可帮助测试人员提高测试效率、降低测试成本和提高测试质量,以支持应用程序的性能优化和改进。我们对主流性能测试工具在插件丰富度、扩展灵活性、复杂场景和通信协议等方面进行了权衡对比,最终选择了 Jmeter 作为底层执行引擎进行二次开发,并采用 Master+Slaver 模式对其能力进行扩展。
通过 Prometheus 监控和定制诊断分析模型实现智能执行、监控和预警,结合自定义组件实现功能、协议、场景扩展等,逐步构建智能化性能测试平台。
目前,平台已基本覆盖前文中提到的十个方向的能力,平台架构如下图所示:
03
智能化性能平台的实现
下面我们展开看看具体实现的原理:
1
需求/风险识别
我们使用决策树算法识别服务接口的风险级别,决策因子包括:核心程序变动对所有服务的影响(采用ASM字节码和深度优先搜索方法)、异常的服务存在数据库容量变化趋势(例如某大表容量连续突破历史新高)、生产运维统计命中的关注服务等。通过基尼系数计算,我们能够识别需要进行性能测试的服务清单。
2
智能用例设计
为了实现对性能测试关注的所有指标和资源的全面测试,我们使用了历史服务画像、生产服务画像、监控场景用例和专家规则库等用例模型。通过自动生成测试用例,我们能够针对不同的场景进行监控,比如针对单个PaaS容器进行测试。同时,我们为每个测试服务自动关联OFM+Z*4个场景测试用例,其中O代表测试容器或宿主机,F代表关注的性能指标,M代表指标支持的用例模型,Z代表业务指标数量。这种设计模式灵活扩展,可实现全面的用例覆盖。
针对性能测试关注的所有指标和资源,结合历史服务画像、生产服务画像、监控场景用例、专家规则库等用例模型,自动生成测试用例。
3
智能数据构造
通过使用造数模板和解析数据库表元数据信息,结合训练机器学习聚类算法模型,我们构建了一款造数引擎。引擎能够智能地根据生产运维各表数据量和数据分布概要提供测试数据的智能造数能力。同时,我们的解决方案配套提供了元数据、模板信息和交易服务映射关系等数据资产的自动化流程管理能力,实现了性能测试全流程自动化中测试数据处理的关键环节。
4
多场景/协议支持
我们通过重写 Jmeter 组件解析逻辑(脚本树和组件),成功实现了90%的 Jmeter 组件在线编辑和组装功能。对于剩余的10%统计组件,则可以使用统计监控模块来实现,无需重写。用户可以通过Web平台获得与C端一样的操作体验,从而轻松使用各种组件组合来实现复杂的交易场景。
5
高并发支持
通过使用 master-slave 模式和将性能测试任务拆分执行,可以在操作单个 Jmeter 容器达到上限时,使用多个容器一起发压,实现高并发支持。
6
执行过程智能化
通过实现业务指标和系统关键资源的自动关联采集和聚合监控,从服务信息获取、继承相关指标和资源信息,并利用数据层采集和统一装配,实现一次性对相关资源的监控。同时借助智能监控组件,实时检测资源运行状况,在出现性能瓶颈时自动保存系统快照以便后续分析。
7
模拟混沌注入
我们将 ChaosBlade 框架进行封装,实现了对Dubbo延时、SQL注入延迟、容器网络丢包、CPU/内存的单点和批量注入。此外,我们还提供了阶梯式注入功能,可以根据需求在性能测试时对容器进行注入,并监测服务在混沌环境下的高可用性表现。
8
智能结果分析
在性能测试结果分析方面,我们会利用历史模型数据、生产运维数据、智能监控数据以及专家规则库对业务类/技术类指标和系统资源状况进行智能评估,以判断是否存在可能的性能风险并进行预警。对于存在预警的测试结果,我们使用火焰图对容器快照进行代码调用栈耗时分析,并辅助开发人员快速定位到疑似问题代码片段(需注意,火焰图对JDK版本有要求,具有一定局限性,后续计划结合JavaCore+HeapDump文件完成自动分析定位)。在完成结果分析后,我们会根据模板自动生成测试报告。
9
资产管理和监控
在测试管理方面,平台提供了测试用例、测试数据和测试结果等资产管理,从而确保测试过程的可追溯性和有效性,实现测试资产的快速检索和管理。
另外平台可定时使用归档测试结果样本集进行模型训练,不断完善用例和断言模型。
在测试资源管理方面,我们通过 PaaS 容器管理执行机资源(Slaver),监听任务需求的容器数量,通过PaaS的容器自动伸缩满足测试需求。
04
智能化性能平台的未来展望
我们已经实现了智能化性能测试平台的建设,为智能化性能测试迈出了坚实的一步。随着不断有新的测试应用和场景接入,我们也发现了围绕智能化性能测试平台的丰富想象空间。我们充分利用了平台底层的自定义插件模式,使测试用户可以轻松开发自定义组件,并将其作为共享服务集成到平台中。这种方式建设了共同的测试生态,甚至让服务可以扩展到运营端。比如,结合DevOps流水线实现功能加性能的自动化质量门禁检查,实现了研发和运营的一体化。
云原生时代,智能化测试如何提质增效?6月29-6月30,DOIS DevOps 国际峰会 2023 · 北京站,BizDevOps、精益/敏捷、SRE 稳定性、AIOps,你想看的内容,都在这里!
近期好文:
投稿邮箱:jiachen@greatops.net,或添加联系人微信:greatops1118。