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

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

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

作者 | 阿里文娱测试开发专家 正辰
出品 | 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

相关文章
|
人工智能 自然语言处理 物联网
阿里万相重磅开源,人工智能平台PAI一键部署教程来啦
阿里云视频生成大模型万相2.1(Wan)重磅开源!Wan2.1 在处理复杂运动、还原真实物理规律、提升影视质感以及优化指令遵循方面具有显著的优势,轻松实现高质量的视频生成。同时,万相还支持业内领先的中英文文字特效生成,满足广告、短视频等领域的创意需求。阿里云人工智能平台 PAI-Model Gallery 现已经支持一键部署阿里万相重磅开源的4个模型,可获得您的专属阿里万相服务。
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
724 6
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段
在数据驱动时代,A/B 测试成为评估机器学习项目效果的重要手段。本文介绍了 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,强调了样本量、随机性和时间因素的重要性,并展示了 Python 在 A/B 测试中的具体应用实例。
460 1
|
机器学习/深度学习 人工智能 自然语言处理
自动化测试的未来:AI与机器学习的融合
【9月更文挑战第29天】在软件测试领域,自动化测试一直是提高测试效率和质量的关键。随着人工智能(AI)和机器学习(ML)技术的飞速发展,它们正逐步渗透到自动化测试中,预示着一场测试革命的来临。本文将探讨AI和ML如何重塑自动化测试的未来,通过具体案例展示这些技术如何优化测试流程,提高测试覆盖率和准确性,以及它们对测试工程师角色的影响。
356 7
|
机器学习/深度学习 人工智能 安全
自动化测试的未来:AI与机器学习的结合
随着技术的发展,软件测试领域正迎来一场革命。自动化测试,一度被认为是提高效率和准确性的黄金标准,如今正在被人工智能(AI)和机器学习(ML)的浪潮所推动。本文将探讨AI和ML如何改变自动化测试的面貌,提供代码示例,并展望这一趋势如何塑造软件测试的未来。我们将从基础概念出发,逐步深入到实际应用,揭示这一技术融合如何为测试工程师带来新的挑战和机遇。
423 3
|
机器学习/深度学习 人工智能 数据挖掘
探索自动化测试的未来:AI与机器学习的融合
【9月更文挑战第29天】在软件测试领域,自动化测试一直是提高效率和准确性的关键。但随着技术的发展,特别是人工智能(AI)和机器学习(ML)的兴起,我们见证了一个新时代的到来——自动化测试的未来正逐渐被重新定义。本文将探讨AI和ML如何改变自动化测试的面貌,从智能测试脚本的生成到测试结果的深度分析,我们将一探究竟这些前沿技术是如何使测试流程更加智能化、高效化,并预测它们将如何塑造软件测试的未来趋势。
|
机器学习/深度学习 数据采集 人工智能
自动化测试的未来:AI与机器学习的融合之路
【10月更文挑战第41天】随着技术的快速发展,软件测试领域正经历一场由人工智能和机器学习驱动的革命。本文将探讨这一趋势如何改变测试流程、提高测试效率以及未来可能带来的挑战和机遇。我们将通过具体案例分析,揭示AI和ML在自动化测试中的应用现状及其潜力。
529 0
|
10月前
|
机器学习/深度学习 数据采集 人工智能
【机器学习算法篇】K-近邻算法
K近邻(KNN)是一种基于“物以类聚”思想的监督学习算法,通过计算样本间距离,选取最近K个邻居投票决定类别。支持多种距离度量,如欧式、曼哈顿、余弦相似度等,适用于分类与回归任务。结合Scikit-learn可高效实现,需合理选择K值并进行数据预处理,常用于鸢尾花分类等经典案例。(238字)
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
1858 6
|
机器学习/深度学习 数据采集 人工智能
20分钟掌握机器学习算法指南
在短短20分钟内,从零开始理解主流机器学习算法的工作原理,掌握算法选择策略,并建立对神经网络的直观认识。本文用通俗易懂的语言和生动的比喻,帮助你告别算法选择的困惑,轻松踏入AI的大门。
1016 8