闲鱼是如何实践一套完整的埋点自动化验证方案的?

简介: 九层之塔,始于垒土

作者:闲鱼技术——程木

背景

作为一款国民级二手交易App,闲鱼每天都有成千上万的二手闲置商品发布,精准的个性化的商品推荐是促进闲鱼用户快速成交的秘诀。搜索推荐算法的精准和埋点数据的准确性息息相关。一旦埋点数据出现问题,用户侧就会出现推荐商品不准确、过度推荐等问题,同时宏观的交易大盘数据的统计也会有偏差,进而影响整个商品运营策略,因此采取有效的手段来保障埋点质量就成为了闲鱼客户端质量保障的关键的一环。

问题

过去的一年闲鱼客户端进在首页、搜索、商品发布等核心场景下进行App体验优化与升级,在客户端快速迭代过程中经常会出现UI改版之后某些关键埋点没有上报、埋点关键字段缺失、埋点字段值不正确等问题,而这些问题在线下测试的时候由于不影响用户体感而被忽略,往往客户端版本发布之后算法或者数据同学察觉到数据异常才会回过头来定位埋点问题,问题修复代价很高,通常会追加客户端版本或者开关降级来解决埋点异常的问题。通过对迭代过程中出现的问题复盘得出来主要有以下的急需解决的问题

  • 哪些是我们需要重点保障的核心埋点
  • 如何开展有效的线下埋点测试
  • 如何提高埋点问题的排除效率

针对以上问题,闲鱼技术质量团队结合自身业务特点提供了一套低侵入埋点质量保障方案

埋点质量保障方案

闲鱼端上承载着数以万计的埋点,且随着业务的增长埋点个数也在不停地增多,而这些埋点由于历史原因都没有沉淀相关的说明文档,依赖开发、数据、产品同学主动梳理埋点数据显然是一件耗时费力又容易出错的事情,所以针对端上埋点质量保障我们的核心思想是:通过历史数据的分析和人工干预生成埋点画像(校验规则、值特征),优先保障核心埋点,并提供自动化测试和埋点版本对比来提升埋点数据交付的信心。
埋点数据上报流程.png
如图所示为闲鱼端内埋点质量保障方案,埋点数据hook后进行数据的抄送,抄送的埋点数据会分为两部分,一部分样本会交给埋点分析服务提取埋点的Key/Value特征,进而生产埋点的校验规则;另一部分核心埋点会交给验证服务处理,参考已生成的校验规则和人工干预的校验条件会对这部分数据进行逐个校验,最后在版本灰度发布前也会提供埋点的版本比对功能来确定核心埋点是否漏报。

核心埋点梳理

首先需要从成千上万的埋点中圈选出重点保障的埋点,圈选的原则是

  • 埋点数据缺失/异常会导致搜索推荐算法精准性
  • 埋点数据缺失/异常会导致大盘统计数据偏差
  • 埋点数据缺失/异常会导致运营投放策略

满足上述条件的都会被标记为闲鱼客户端核心埋点。前期我们梳理了闲鱼首页、同城、关注、搜索、详情等场景,并通过埋点所属页面(PAGE)、事件标识(ARG1)、事件类型(EVENTID)进行核心埋点的标记,最终在后续的测试中也更侧重于这部分核心埋点,而这部分的埋点的校验规则则是由样本数据分析和人工规则干预得出的。

埋点数据上报

圈选出核心埋点之后,接着需要解决得问题就是如何获取客户端埋点数据。闲鱼端上集成的埋点SDK是通过实时上报通道对埋点数据进行上报,上报后数据经过处理后会最终落到数仓中,所以说要拿到埋点数据可以从数仓中取数据,也可以在端上下功夫。由于数仓取数存在数据实时性不高、数据量大、调用链路长等问题,最终选取了客户端埋点抄送的方案。通过对端上埋点上报通道的hook来实现每一个埋点数据抄送。例如在Android端我们采用的是AOP切面拦截的方式对开发包的埋点数据进行截获然后通过HttpAPI抄送到数据接收服务。当然采用这种直接拦截代码的方式做数据抄送需要熟悉代码逻辑,做最小化的侵入。除了AOP切面拦截,类似的通用技术方案Frida也是不错的选择。

埋点校验规则

有了埋点数据之后接下来就是补全核心埋点的特征,例如埋点上报哪些字段、字段是必须上报的、字段的值是离散的还是可枚举的、字段在上下文场景中值的特点。后端的数据处理就会根据核心埋点的分布和版本上报数据进行样本的提取,对每个样本逐字段进行检查,并统计Key的分布、Value的分布,当样本数达到阈值之后根据历史Key/Value分布数据就能得出以下的基础校验规则

  • Key非空
  • Value非空
  • Value取值范围

上面的基础规则得出之后进一步对数据进行聚类分析,就可以得出以下的场景校验规则

  • 组合Key条件下Value的特征

例如:通过样本的聚类分析可以推断出类似于“同一次搜索过程中,rn参数必须保持一致”这样的规则

埋点自动化测试

有了数据和规则接下来就需要自动化测试脚本大显身手了。通过手工操作闲鱼App能知道对应埋点触发的时机、页面等信息,因此只要编写自动化测试代码替代人工的点击、滑动、浏览行为就可以做到埋点的自动化验证。以搜索点击核心埋点为例整体的自动化验证过程示意如下
自动化验证流程.png
埋点的自动化测试可以大幅提高埋点回归的效率,测试同学只需按照版本维护核心埋点自动化用例,就可以在分钟级别完成闲鱼核心埋点的自动化验证。埋点自动化测试解决了大部分的核心埋点的精准验证问题,版本比对则是在自动化之上实现埋点Diff的功能,通过不同版本埋点数据的比对快速检测出新版本中哪些埋点丢了,哪些埋点埋点格式发生了变化,进一步降低人工排除的成本。
埋点版本比对.jpg

总结

闲鱼端内埋点质量保障方案上对端上侵入较少,通过历史样本数据分析免去了人工主动梳理埋点的工作量,目前梳理出闲鱼端内重要场景(首页/关注/同城/搜索/发布/详情)下的核心埋点共计100+,UI自动化验证整体回归时间由手工测试耗时0.5天下降为到分钟级别,快速的版本比对和可视化的埋点数据展示和筛选也让埋点问题排查变得更加方便。在未来我们将继续从以下两点来进行方案的整体优化:

  • 埋点自动化将纳入端上集成卡点之中,即开发同学集成后就立即触发埋点的自动化验证和比对,在集成阶段就提早发现埋点问题。
  • 自动化深度和用例的可维护性方便也是我们需要努力的方向。

希望我们的自动化手段能让更多技术小二从重复劳动中释放出来,提升数据质量的同时也为每一个闲鱼的用户提供贴心的个性化推荐服务,为每一个闲鱼用户提供更好的购物体验。

References

[1] Frida:https://github.com/frida

相关文章
|
25天前
|
运维 监控 持续交付
构建高效自动化运维体系:策略与实践
在数字化时代,企业IT基础设施的管理和维护变得日益复杂。为了提高效率、降低错误率并快速响应市场变化,构建一个高效的自动化运维体系至关重要。本文将探讨自动化运维的核心策略,并通过实际案例分析展示如何将这些策略应用于日常管理中,以实现IT运维的优化。
15 0
|
3天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
3天前
|
测试技术 持续交付 Docker
Django中的自动化部署与持续集成实践
【4月更文挑战第15天】本文介绍了Django项目中自动化部署与持续集成的实践方法。自动化部署通过选择Ansible、Fabric或Docker等工具,编写部署脚本,配置持续集成工具(如Jenkins、GitLab CI),确保服务器环境一致,实现快速应用上线。持续集成则涉及配置版本控制系统,设置自动化构建和测试,编写全面的测试用例,集成代码质量检查工具,并配置通知机制,以提升代码质量和开发效率。这两者结合能有效提升项目的迭代速度和可靠性。
|
10天前
|
运维 监控 Kubernetes
构建高效自动化运维体系的实践与思考
【4月更文挑战第8天】在数字化时代,IT基础设施的复杂性日益增加,传统的手工运维模式已经难以满足快速响应和高效率的需求。本文将探讨如何通过自动化工具和策略构建一个高效的自动化运维体系,旨在提高系统的稳定性、减少人为错误以及优化资源分配。文章首先分析了自动化运维的必要性,接着介绍了实现自动化的关键技术和工具,并通过案例分析展示自动化运维体系的实际效果。最后,对自动化运维的未来发展趋势进行了展望。
|
26天前
|
敏捷开发 IDE 测试技术
深入理解自动化测试框架Selenium的设计理念与实践
随着敏捷开发和持续集成的理念深入人心,自动化测试在软件开发周期中扮演着越来越重要的角色。Selenium作为一个广泛使用的自动化测试工具,其设计理念和实践对于提高测试效率和质量具有指导意义。本文将深入探讨Selenium的核心设计原则、架构以及最佳实践,旨在帮助读者构建更稳定、高效的自动化测试系统。
|
26天前
|
jenkins 测试技术 持续交付
深入理解自动化测试框架设计原则与实践
本文旨在探讨自动化测试框架的设计原则及其在实际项目中的应用。通过对自动化测试框架的系统剖析,我们揭示了有效构建和维持测试框架的核心要素,并提供了一套实用的指导方案来帮助读者实现高效、可靠的自动化测试流程。文章不仅聚焦于框架的技术细节,也强调了灵活性、可维护性和可扩展性在设计时的重要性,同时结合实际案例分析,展示了如何在不同测试环境中定制化和优化测试框架。
|
26天前
|
运维 监控 Devops
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
在数字化转型的浪潮中,企业的IT基础设施和软件交付模式正经历着深刻的变革。传统的运维方式已难以满足快速迭代、灵活扩展的现代业务需求。本文将探讨如何通过容器技术实现高效的自动化运维体系,重点分析持续集成(CI)与持续部署(CD)的实践方法及其对企业运维效率的影响。通过引入微服务架构、容器编排、DevOps文化等概念,我们旨在为读者提供一套全面的自动化运维解决方案,以支持业务的敏捷性和可扩展性。
|
28天前
|
机器学习/深度学习 人工智能 运维
构建高效自动化运维体系的探索与实践
【2月更文挑战第30天】 在信息技术迅猛发展的今天,企业对于IT系统的依赖日益加深。随之而来的是运维工作的复杂性和难度不断上升,传统的手动运维模式已经难以满足快速响应和高效率的需求。本文旨在探讨如何构建一个高效的自动化运维体系,以提升系统稳定性、降低人为错误并优化资源配置。文中将详细介绍自动化运维的核心组件,包括配置管理、持续集成与持续部署(CI/CD)、监控告警以及故障自愈等,并通过实际案例分析自动化运维实施过程中的关键考量因素和挑战。
|
28天前
|
运维 监控 持续交付
构建高效自动化运维体系的实践之路
【2月更文挑战第30天】随着信息技术的飞速发展,企业对于运维服务的要求越来越高。本文将深入探讨如何构建一套高效的自动化运维体系,包括监控、部署、日志管理以及故障响应等方面。文章首先分析了当前自动化运维的必要性和挑战,随后提出了基于容器化技术、微服务架构和DevOps理念的解决方案框架,并通过实际案例展示了实施该体系的详细步骤与成效评估。本研究的目标是为运维团队提供一套可行的方法论,以提升系统稳定性和运维效率。
|
28天前
|
机器学习/深度学习 敏捷开发 人工智能
深入探索软件自动化测试:框架与实践
【2月更文挑战第30天】 在快速迭代的软件开发周期中,自动化测试已成为确保产品质量和加快交付速度的关键因素。本文将深入探讨自动化测试的核心概念、常用框架以及在实际项目中的应用实践。我们将分析自动化测试的优势,并讨论其在不同开发阶段的作用,同时提出构建高效自动化测试流程的策略。通过实际案例分析,本文旨在为读者提供一套系统的自动化测试解决方案,以应对日益复杂的软件测试挑战。

热门文章

最新文章