| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> 得物技术埋点自动化验证的探索和最佳实践 -> 正文阅读 |
|
[系统运维]得物技术埋点自动化验证的探索和最佳实践 |
背景埋点对电商类app的业务发展一直有着重要的指导作用,但是其复杂的数据组成使得它的稳定性难以得到保障,往往业务逻辑的一些重构就会导致一些埋点属性甚至是整个埋点的丢失。 也正是由于埋点具有多个数据源,常规的自动化验证只能验证埋点是否存在,无法跟业务场景匹配。而对于人工排查来说,虽然能解决和场景匹配的问题,但是像不同埋点的属性之间的关联或者属性和接口字段的关联这类复杂的校验做起来也非常的困难。 本文将介绍我们是如何通过teslaLab+埋点验证平台实现了埋点的自动回归以及多维度的埋点校验,并在最近三个版本中累积发现了数十个埋点问题。 安卓 IOS 痛点一个埋点中的数据主要由三个部分组成:
要想验证一个埋点是否符合预期的设计,关键的难点就在于如何固定住这三个数据源,使其每次生成的结果都保持一致或者符合我们预定的规则。因此我们分别采用了以下方案来实现埋点生成时数据源的固定
概览名词解释
系统架构图整个埋点自动化验证平台主要由三部分组成,分别是:
流程图下图为单个测试用例的首次验证流程: 主要可分为三个阶段: 1. 准备阶段
2. 运行阶段
3. 验收阶段
详情接下来将按照验证流程的顺序逐一介绍这三个模块的详细流程 自动化模块埋点自动化依赖 「Tesla-lab」 的自动化模块,其中数据Mock 记录的录制和UI自动化 脚本的录制依赖 「Tesla-lab」 本地编辑器,任务和任务组的定时执行依赖 「Tesla-lab」 任务调度模块,任务的实际执行依赖 「Tesla-lab」 任务执行器。 「Tesla-lab」自动化流程图「Tesla-lab」自动化整体架构实现实现上分三个模块:
「Tesla-lab」自动化录制编辑器编辑器/录制器(客户端内嵌Web)
「Tesla-lab」自动化任务执行器
回放任务的创建会通过 本地socket xxxx 端口新建一个本地任务,同时会创建一份远端任务。这样可以通过Lab的安装自动同步任务到本地,TeslaLab的核心本地任务和数据都是通过agent 模块和服务端进行交互。
任务支持立即执行或者通过配置Cron表达式来实现定时执行,任务具有保护机制,在遇到应用crash或者anr(脚本停滞超过一定时间)时会尝试重新开始任务,并且单个任务执行总耗时超过一定时间则会提前调用结束录制的api来跳过该任务。
执行完毕后可通过在任务配置中开启飞书通知来获取任务组或者任务的执行结果,包含任务的执行详情。也可以直接在任务列表页点击展开查看该任务的历史执行记录,记录中包括执行期间的截图和logcat日志。
关联mock记录和校验规则,支持模糊搜索 2. 「最佳实践二」合理利用任务组,任务组可以按照产品线或者业务线进行创建。
3. 「最佳实践三」合理利用飞书通知,进行任务/任务组的排错。 报告示例: 4.「最佳实践四」利用Cron表达式实现每日凌晨定时执行任务组,用于持续关注自动化运行的稳定性。目前一个应用的所有任务均在同一个任务组中,每天凌晨0点定时运行,其任务组的通过率即为当日的通过率指标,用于监测自动化运行的稳定性。 「Tesla-lab」演进方向在未来,依托云真机平台实现本地调试,云端部署和运行能力,实现更加自动化/智能化的方式,再结合客户端丰富的异常采集策略将埋点缺陷,客户端缺陷尽早,尽快发现。 数据采集SDK移动端的数据采集SDK均由teslaLab通过socket通信调起,无交互界面。 安卓侧为独立sdk:ubt-verification,ios测则是依赖于线下性能测试工具Kylin实现。 整体架构图流程图移动端SDK的功能主要有录制Mock数据和录制埋点数据两个流程: 准备阶段
录制Mock数据
录制埋点数据(即自动化回放)
埋点数据采集模块安卓实现 主要通过反射对神策sdk实现静态代理,在代理中实现埋点上报时的回调,并在回调中将埋点数据通过eventBus抄送至负责埋点上报的管理实例中,进而存储至sqlite。后续在埋点上报阶段将分批从sqlite中取出埋点数据并通过接口上报至后端。 IOS实现 神策sdk埋点记录时有对外的通知,iOS监听神策埋点通知即可获得埋点数据。 接口Mock模块安卓实现 通过对okhttpClientBuilder类的build方法进行插桩,并使用addInterceptor方法加入自定义拦截器,用于实现接口数据的录制和接口的Mock。这里我们是通过是否包含业务自定义的拦截器来判断当前的okhttpClient是否为我们需要插桩的目标client。 在拦截器中即可对接口数据进行录制或者是mock。 IOS实现 通过NSURProtocol对网络进行拦截,有请求发起时,请求mock服务接口判断是否有mock数据,请求到mock数据就构建响应返回mock数据,没有请求到就正常发起请求。 socket通信模块安卓实现 通过引入三方工具nanoHttpPd,在移动端开启服务,mac客户端端即可直接通过IP+端口的方式调用到在移动端实现的get/post接口,从而实现和自动化工具teslaLab的交互。 IOS实现 通过引入三方工具GCDAsync,在iOS客户端开启服务,交互逻辑同Android。 稳定性监控模块
遇到的挑战在稳定运行了一个版本之后,安卓侧突然出现了大规模脚本执行失败问题,经排查运行截图定位到是商详接口的response发生数据结构的变更,导致使用前期录制的接口数据进行Mock时无法完成数据解析,自动降级切换到CDN数据,从而导致页面元素无法被脚本识别。 我们在早期有规划到这种情况,所以实现了对接口数据结构变更的自动检测以及修复提醒,但是这里的商详接口却并没有触发任何提醒,最后经排查发现我们录制到的Mock数据是风控sdk加密后的response: 初期我们是为了录制到完整的request和response数据,所以将拦截器放在了拦截器列表中最后一位。但是实际运行中应用层并不需要这些拦截器添加的额外参数,因此我们将拦截器前移到第一位,并且重新录制这些涉及商详接口的Mock记录。最终修复后脚本运行恢复正常。 平台整体架构图无线研发平台:
埋点管理平台
流程图埋点验证&验收流程
最佳实践 根据最近几个版本的用户反馈和总结,目前的最佳实践为:
测试场景模块为了从多方面对埋点实现充分的精准校验,我们根据埋点的内容将用于验证的规则划分为埋点维度和属性维度:
并且每一个规则都可选强/弱校验,区别只在于弱校验不会影响到最终的通过率指标 遇到的挑战 1. 一个运行时长1分钟的测试用例,假设能够录制到100个左右的埋点,去重后大约40个,每个埋点需要验证的属性平均约7个,这意味着每一个case都需要手动点击40*7*3*3=2520次才能完成基础规则的配置,这显然是不可接受的,所以我们实现了从录制的埋点数据中按照预定策略自动生成默认规则,这样只需要保证录制的埋点数据正常,即可完成最基本规则(包括埋点数量,是否必传,是否可空和取值范围规则)的构建。 2. 对于首页的一些的曝光埋点来说,大部分case都会上报,并且其规则基本一致,所以为了避免重复配置浪费人力,我们实现了全局场景,并按照配置的优先级和普通规则进行整合,目前已用于首页曝光埋点的接口映射规则配置。 3. 部分埋点属性的值是直接将算法下发的数据和接口数据合并的结果,这类数据一般为嵌套层级较深的JSON数组,由于数组中元素是无序的,因此枚举类型不能满足其取值范围的校验。为此我们通过递归将问题简化为JSON对象之间的对比来寻找差异,实现了针对这类复杂层级JSON数组的规则提取,规则校验和规则修复。 4. 埋点的详情数据均来自埋点管理系统,自动生成的规则也是根据埋点管理平台中埋点属性是否必传的标注来生成,但是大部分埋点属性是否必传并非绝对情况,在不同的应用场景下可能必传也可能不必传,这导致我们产出的验证报告中一直有大量噪声。为此我们实现了在报告中对规则快速修复以及接口映射规则,在迅速消除噪声的同时也建立起埋点数据和接口数据的映射关系,从根源上对埋点数据进行校验。虽然在修复上线后由于商详接口的问题整体的验证报告通过率并未大幅度提升,但是在修复后的单个版本就发现了数十个埋点问题。 Mock记录模块
并且支持变更的应用和撤回。 遇到的挑战
测试记录
测试记录由移动端数据采集sdk创建,会根据端上上传的监控信息进行比对,如果有异常会飞书报警。 其中红色背景表示记录异常,完全不可信:
淡黄色背景表示记录可能有异常,需要排查:
验证报告模块
总结埋点验证平台在每个阶段遇到的痛点其实都是“埋点数据如何固定”这个问题的一个缩影。业务的快速迭代使得埋点验证过程中积累的mock记录和验证规则这些沉淀产物十分脆弱,即使我们通过多种手段实现了这些数据的手动或自动更新,它们最终也难免会彻底失效。因此我们后续在提取长期有效沉淀的同时,也将致力于提升验证规则和mock数据构建的自动化程度,来压缩失效后数据重建的人力成本。 文/ZHOUXIAOFENG 关注得物技术,做最潮技术人! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/30 1:54:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |