阿里文娱测试实战:机器学习+基于热度链路推荐的引流,让对比测试更精准

简介: 引流对比测试是目前阿里内部常用的一种回归测试手段,它基于线上真实流量做采集、回放、对比,通过对比结果评估代码变更是否影响了线上链路和功能。通过这种方案,极大地降低了手工构造测试数据的成本:

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!

作者 | 阿里文娱测试开发专家 正辰
出品 | CSDN(ID:CSDNnews)

1.对比测试的原理和现状

引流对比测试是目前阿里内部常用的一种回归测试手段,它基于线上真实流量做采集、回放、对比,通过对比结果评估代码变更是否影响了线上链路和功能。通过这种方案,极大地降低了手工构造测试数据的成本:

image

1)基于用户真实请求,对于复杂业务的接口,降低了模拟用户场景的成本;
2)采集流量足够多的时候,可以对业务场景做全覆盖测试,减少测试遗漏;
3)测试环境稳定,结果明确可靠,并且不需要手工测试执行。目前线上请求采集策略主要是按比例随机采集,从使用情况来看,存在一些问题:

1)从测试的角度,我们并不清楚采集到的流量是否覆盖了核心场景。用测试的话来说:这些流量到底覆盖了哪些用例?无法有效度量;
2)线上持续采集的情况下,回放请求要及时手工维护,排除失效或者重复请求;
3)采集配置多个接口时,由于大流量接口占比很高,导致小流量接口采集不到有效流量, 需要手动调整采集配置。

基于以上这些问题,不难发现,采集请求的有效性和覆盖度是对比测试能持续发挥作用的关键问题。如何破解?优酷在对比测试中引入热度链路覆盖率,实现了一套基于线上热度链路覆盖的精准对比测试方案。

2.如何有效度量测试覆盖率?

1.代码覆盖率

传统的测试覆盖率统计方法,测试之前先对代码文件进行插桩,生成插过桩的 class 文件或 者 jar 包,测试执行后,会自动收集走到的代码路径,生成覆盖率信息到文件,最后统一对覆盖 率信息进行处理,生成覆盖率报告。度量覆盖率的主要指标有:代码行覆盖、代码分支覆盖、 方法覆盖等等。

1)代码覆盖率的优点:

a)原理和方案比较成熟,有很多现成的工具,实现成本比较低;
b)度量维度比较多,能结合多个指标全面评估代码覆盖率。

2)代码覆盖率的问题:

a)无法有效评估业务场景的覆盖率。代码覆盖率高只能说明代码被执行到了,并不能说明 业务场景被覆盖了,业务场景的覆盖率还需要手工评估;
b)覆盖率分析成本比较高。由于代码质量问题(无效代码或者冗余代码),很多代码不会 被真实的业务场景调用到,这部分代码很难做到测试覆盖,覆盖的价值也不高,并不一定需要 覆盖。

2.子调用链路覆盖率

通过在中间件代码中插桩,统一实现对外部子调用的代码路径采集,从而聚合出代码走过 的子调用链路,然后通过聚合链路请求得出每条子调用链路的热度,从而获得线上真实用户场 景的链路分布情况。子调用链路精准反馈了业务场景的链路和热度,这种基于线上真实请求得

出的覆盖率评估方案,目前在阿里内部被广泛使用。度量覆盖率的主要指标是:子调用链路覆 盖率。

1)相比传统的代码覆盖率:

a)基于线上真实用户请求分析代码执行路径,通过子调用链路代表用户场景,能准确评估业务场景的覆盖情况;
b)统一在中间件代码中插桩,业务代码无需改动,接入成本比较低。基于子调用链路覆盖率评估,是否可以解决对比测试提出的覆盖率评估难题呢?是否也能适合优酷的业务场景?在试运行一段时间后,我们发现优酷一些业务采集到的子调用链路特别少,和业务的体量、复杂度不一致。带着这个疑问,我们看看下面两个请求的代码运行链路:

image

2)基于以上代码运行链路分析:

a)部分业务外部依赖比较少,主要逻辑在应用内部,导致代码运行的外部子调用完全一样,但内部方法链路不一样;
b)评估业务内部逻辑覆盖的话,内部方法链路覆盖要比子调用链路覆盖更有效。如果能聚合出内部方法链路,对优酷业务场景的覆盖率评估会更有指导意义。于是优酷和集团 JVM-SANDBOX 团队深入合作,提出了一套内部方法链路覆盖率的评估方案:热度链路覆盖率。

3.基于热度链路推荐的对比测试

通过收集一段时间内的线上真实请求,并记录下请求执行过的方法路径,即为链路。线上不同的真实请求很多都是走的同一个链路,这样不同的链路就有不同的热度,根据链路热度可 以自动评估出需要优先覆盖的链路,即为热度链路。

1.方法链路感知

要采集方法路径,首先需要感知到每个方法的执行。利用 JVM-SANDBOX 底层模块的能 力,能统一在每个内部方法做代码增强,感知到每个方法“运行前”、“返回前”、“异常后”三 个事件,从而收集到代码执行到的方法数据,聚合成方法链路。

image

1)BEFORE 事件:感知和改变入参;直接返回;
2)RETURN 事件:感知和改变返回值;重新构造返回结果;抛异常;
3)THROWS 事件:重新构造异常;模拟正常返回。

2.采集模块部署

在模块部署环节,最大的挑战是配置需要增强的代码逻辑类。最开始由各个业务方自己配 置,但由于配置范围没有统一标准,导致采集的链路不完成,很难获取比较。根据优酷的业务 特性,我们统一提供了一套代码逻辑类扫描服务,支持优酷各个业务的代码解析和逻辑类扫描, 为每个业务方提供统一的代码增强配置标准。接入过程如下:

image

1)TraceModule:采集运行链路;2)Repeater:采集请求和返回结果,录制回放;3)MockModule:服务端动态 Mock。

3.链路采集和热度计算

线上模块激活后,就可以根据配置的采样比率,持续采集线上流量,并聚合方法链路。

image

有了应用链路数据做参考后,通过采集线上请求,并识别出请求的链路,就可以按照热度 链路或者全部链路推荐对比请求,通过扩大请求采集周期(推荐采集周期为 7 天),最后推荐的 请求可以覆盖线上全部业务链路,不仅提升了对比测试的有效覆盖率,而且推荐过程高效且全自动化,全程不需要人工干预,可以快速推广到服务端所有应用的对比测试。

4.回顾&展望

基于热度链路分析,可以辅助测试更具体地理解真实的业务场景,除了用于推荐对比测试请求,在优酷服务端回归体系中,也用于评估回归测试的覆盖率,相比传统的代码覆盖率评估,业务指导意义更明确。

当然,对于高热度的链路,可能包含了大量的用户请求,也包含了不同的业务含义,如果只覆盖其中一条请求,虽然链路覆盖了,但会造成业务覆盖损失,后期我们可以通过机器学习,智能聚类,让机器来筛选出覆盖更完整、更精确的测试集,深度挖掘线上请求数据的价值,辅助测试建设更有意义的质量保障体系。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/zhibo

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-03-29
本文作者:阿里文娱
本文来自:“CSDN”,了解相关信息可以关注“CSDN

相关文章
|
5月前
|
数据采集 JSON JavaScript
Cypress 插件实战:让测试更稳定,不再“偶尔掉链子”
本文分享如何通过自定义Cypress插件解决测试不稳定的痛点。插件可实现智能等待、数据预处理等能力,替代传统硬性等待,有效减少偶发性失败,提升测试效率和可维护性。文内包含具体实现方法与最佳实践。
|
6月前
|
存储 关系型数据库 测试技术
玩转n8n测试自动化:核心节点详解与测试实战指南
n8n中节点是自动化测试的核心,涵盖触发器、数据操作、逻辑控制和工具节点。通过组合节点,测试工程师可构建高效、智能的测试流程,提升测试自动化能力。
|
7月前
|
Web App开发 人工智能 JavaScript
主流自动化测试框架的技术解析与实战指南
本内容深入解析主流测试框架Playwright、Selenium与Cypress的核心架构与适用场景,对比其在SPA测试、CI/CD、跨浏览器兼容性等方面的表现。同时探讨Playwright在AI增强测试、录制回放、企业部署等领域的实战优势,以及Selenium在老旧系统和IE兼容性中的坚守场景。结合六大典型场景,提供技术选型决策指南,并展望AI赋能下的未来测试体系。
|
7月前
|
存储 人工智能 算法
AI测试平台实战:深入解析自动化评分和多模型对比评测
在AI技术迅猛发展的今天,测试工程师面临着如何高效评估大模型性能的全新挑战。本文将深入探讨AI测试平台中自动化评分与多模型对比评测的关键技术与实践方法,为测试工程师提供可落地的解决方案。
|
5月前
|
人工智能 自然语言处理 JavaScript
Playwright MCP在UI回归测试中的实战:构建AI自主测试智能体
Playwright MCP结合AI智能体,革新UI回归测试:通过自然语言驱动浏览器操作,降低脚本编写门槛,提升测试效率与覆盖范围。借助快照解析、智能定位与Jira等工具集成,实现从需求描述到自动化执行的闭环,推动测试迈向智能化、民主化新阶段。
|
7月前
|
人工智能 缓存 测试技术
Playwright进阶指南 (6) | 自动化测试实战
2025企业级测试解决方案全面解析:从单元测试到千级并发,构建高可用测试体系。结合Playwright智能工具,解决传统测试维护成本高、环境依赖强、执行效率低等痛点,提升测试成功率,内容从测试架构设计、电商系统实战框架、高级测试策略、Docker化部署、CI/CD集成及AI测试应用,助力测试工程师掌握前沿技术,打造高效稳定的测试流程。
Playwright进阶指南 (6) | 自动化测试实战
|
6月前
|
人工智能 数据可视化 测试技术
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
AI 时代 API 自动化测试实战:Postman 断言的核心技巧与实战应用
772 11
|
11月前
|
监控 测试技术 数据库连接
RunnerGo API 性能测试实战:从问题到解决的全链路剖析
API性能测试是保障软件系统稳定性与用户体验的关键环节。本文详细探讨了使用RunnerGo全栈测试平台进行API性能测试的全流程,涵盖测试计划创建、场景设计、执行分析及优化改进。通过电商平台促销活动的实际案例,展示了如何设置测试目标、选择压测模式并分析结果。针对发现的性能瓶颈,提出了代码优化、数据库调优、服务器资源配置和缓存策略等解决方案。最终,系统性能显著提升,满足高并发需求。持续关注与优化API性能,对系统稳定运行至关重要。
|
7月前
|
算法 测试技术 API
从自学到实战:一位测试工程师的成长之路
在技术快速发展的今天,自动化测试已成为提升职场竞争力的关键技能。本文讲述了一位测试工程师从自学到实战的成长之路,分享他在学习UI、APP和API自动化过程中遇到的挑战,以及如何通过实际项目磨炼技术、突破瓶颈。他从最初自学的迷茫,到实战中发现问题、解决问题,再到得到导师指导,逐步掌握测试开发的核心思维,并向测试平台建设方向迈进。文章总结了他从理论到实践、从执行到思考的转变经验,强调了实战、导师指导和技术服务于业务的重要性。最后,邀请读者分享自己的技术突破故事,共同交流成长。
|
7月前
|
资源调度 前端开发 JavaScript
Jest 测试实战指南
本文系统讲解如何使用 Jest 进行高效的 JavaScript 函数测试,涵盖环境搭建、测试用例编写、模拟函数与快照测试等内容,帮助开发者提升代码质量与测试效率。
243 0