GTLC全球技术领导力峰会·上海站,首批讲师正式上线! 了解详情
写点什么

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

2021 年 1 月 13 日

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

背景


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


问题


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


•哪些是我们需要重点保障的核心埋点


•如何开展有效的线下埋点测试


•如何提高埋点问题的排除效率


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


埋点质量保障方案


闲鱼端上承载着数以万计的埋点,且随着业务的增长埋点个数也在不停地增多,而这些埋点由于历史原因都没有沉淀相关的说明文档,依赖开发、数据、产品同学主动梳理埋点数据显然是一件耗时费力又容易出错的事情,所以针对端上埋点质量保障我们的核心思想是:通过历史数据的分析和人工干预生成埋点画像(校验规则、值特征),优先保障核心埋点,并提供自动化测试和埋点版本对比来提升埋点数据交付的信心。



如图所示为闲鱼端内埋点质量保障方案,埋点数据 hook 后进行数据的抄送,抄送的埋点数据会分为两部分,一部分样本会交给埋点分析服务提取埋点的 Key/Value 特征,进而生产埋点的校验规则;另一部分核心埋点会交给验证服务处理,参考已生成的校验规则和人工干预的校验条件会对这部分数据进行逐个校验,最后在版本灰度发布前也会提供埋点的版本比对功能来确定核心埋点是否漏报。


核心埋点梳理


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


•埋点数据缺失/异常会导致搜索推荐算法精准性


•埋点数据缺失/异常会导致大盘统计数据偏差


•埋点数据缺失/异常会导致运营投放策略


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


埋点数据上报


圈选出核心埋点之后,接着需要解决的问题就是如何获取客户端埋点数据。闲鱼端上集成的埋点 SDK 是通过实时上报通道对埋点数据进行上报,上报后数据经过处理后会最终落到数仓中,所以说要拿到埋点数据可以从数仓中取数据,也可以在端上下功夫。由于数仓取数存在数据实时性不高、数据量大、调用链路长等问题,最终选取了客户端埋点抄送的方案。通过对端上埋点上报通道的 hook 来实现每一个埋点数据抄送。


例如在 Android 端我们采用的是 AOP 切面拦截的方式对开发包的埋点数据进行截获然后通过 HttpAPI 抄送到数据接收服务。当然采用这种直接拦截代码的方式做数据抄送需要熟悉代码逻辑,做最小化的侵入。除了 AOP 切面拦截,类似的通用技术方案 Frida[1]也是不错的选择。


埋点校验规则


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


•Key 非空


•Value 非空


•Value 取值范


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


•组合 Key 条件下 Value 的特征


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


埋点自动化测试


有了数据和规则接下来就需要自动化测试脚本大显身手了。通过手工操作闲鱼 App 能知道对应埋点触发的时机、页面等信息,因此只要编写自动化测试代码替代人工的点击、滑动、浏览行为就可以做到埋点的自动化验证。以搜索点击核心埋点为例整体的自动化验证过程示意如下



埋点的自动化测试可以大幅提高埋点回归的效率,测试同学只需按照版本维护核心埋点自动化用例,就可以在分钟级别完成闲鱼核心埋点的自动化验证。埋点自动化测试解决了大部分的核心埋点的精准验证问题,版本比对则是在自动化之上实现埋点 Diff 的功能,通过不同版本埋点数据的比对快速检测出新版本中哪些埋点丢了,哪些埋点埋点格式发生了变化,进一步降低人工排除的成本。


总结


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


在未来我们将继续从以下两点来进行方案的整体优化:


•埋点自动化将纳入端上集成卡点之中,即开发同学集成后就立即触发埋点的自动化验证和比对,在集成阶段就提早发现埋点问题。


•自动化深度和用例的可维护性方便也是我们需要努力的方向。


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


文章转载自: 闲鱼技术(ID:XYtech_Alibaba)

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

2021 年 1 月 13 日 08:001405

评论 1 条评论

发布
用户头像
怎么降低ui自动化的成本?编写自动化测试代码替代人工的点击、滑动、浏览行为就可以做到埋点的自动化验证,这个的实现可以详细说嘛?
2021 年 01 月 18 日 09:58
回复
没有更多了
发现更多内容

LiteOS内核源码分析:消息队列Queue

华为云开发者社区

队列 LiteOS LiteOS内核 消息队列Queue 队列池

使用 SpringBoot 的 CommandLineRunner 遇到的坑

Java小咖秀

容器 开发 springboot CommandLineRunner ApplicationRunner

【LeetCode】解码方法Java题解

HQ数字卡

算法 LeetCode 4月日更

ES 终于可以搜到“悟空哥”了!

悟空聊架构

中文分词 elasticsearch 分词 ES ik

《采访提纲:声网 Agora.io 资深 iOS 开发工程师--龚宇华》

空城机

活动专区 签约计划 4月日更

Semaphore自白:限流器用我就对了!

王磊

Java 多线程 Semaphore

python内置数据结构list、set、dict、tuple(二)

若尘

List 数据结构 set 元组 Python编程

库存溯源之批次管理

陈俊

溯源 供应链 仓储 冷链 wms

哭了!“日志注入”为什么跟想象中的不一样

华为云开发者社区

Java 参数 日志注入 log4j2框架 异常堆栈

读《乌克兰拖拉机简史》有感

高彪

读书笔记 【4 月日更】

源中瑞区块链农产品溯源--推动农业科技发展

13530558032

AUC/ROC:面试中80%都会问的知识点

华为云开发者社区

机器学习 面试 mindspore roc AUC

存储成本降低80%!US3在海量数据归档存储下的成本优化技术实践

UCloud技术

存储 海量数据 存储成本

专访融云 CTO 杨攀 | 技术人如何在创业路上走得更远

邴越

活动专区 签约计划

专访彩食鲜 CTO 乔新亮:CTO的“升级”秘笈

Tango

阿里巴巴研究员吴翰清采访提纲:天才少年之路

Nydia

签约计划

如何提升摄影技能?Adobe国际认证送中国摄影计划,助力技能提升

Adobe国际认证

Gartner在线研讨会:如何使用情况和行为来完善基于客户的营销计划

Geek_bacee5

Gartner Gartner在线研讨会

“湘”遇区块链 赋能新业态

CECBC区块链专委会

【Knative系列】看完这篇还不懂 Knative Serving,你来打我~(史上最详细)

Chumper

Serverless 云原生 Knative

人的目标

paver1023

智慧平安社区建设--赋能基层治理

13530558032

区块链电子合同签约,推动合同签约数字化转型

13530558032

智慧党建平台建设,智慧组工干部人事管理系统开发方案

WX13823153201

2021年政府应关注的十大技术趋势

Geek_bacee5

Gartner Gartner在线研讨会

中广协支持配合打击整治非法社会组织工作

󠀛Ferry

四月日更

张超 - 机锋网联合创始人 - 采访提纲:那些 3 个月就上线的产品,如何去做技术规划?

梦想橡皮擦

签约计划

别再问我 2050 可以干什么,Make a Movie in a Day!

阿里云视频云

电影

NumPy之:NumPy简介教程

程序那些事

Python 数据分析 Python3 Numpy 程序那些事

聪明人的训练(二十一)

Changing Lin

四月日更

Zookeeper基础原理&应用场景详解

SH的全栈笔记

zookeeper 中间件 ZooKeeper原理

DNSPod与开源应用专场

DNSPod与开源应用专场

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